- 2024-12-06
-
回复了主题帖:
FREERTOS编译错误的问题
这个函数编写的不完整。
楼主,您查查这个函数的书写吧
-
回复了主题帖:
【一句】来一句话证明你干过嵌入式
jlink掉固件了
-
回复了主题帖:
e络盟 2025新年台历你领了吗?
自己从淘宝购买一个。
干净,看着舒服~~
- 2024-12-05
-
回复了主题帖:
【L99H92直流电机驱动评估板】STM32G474 PWM生成
G4 是不是主要为电机驱动而生啊
- 2024-12-04
-
回复了主题帖:
来,来,来,撒分了!RTOS要学,要会,要用吗?
Orima 发表于 2024-12-3 21:18
想学习,请推荐下高质量的教材教程。。。
计划选择哪个RTOS啊?
-
回复了主题帖:
【翌创ET6001测评】LCD5110屏显示驱动
这个屏是存在了多少年了啊
- 2024-12-03
-
回复了主题帖:
来,来,来,撒分了!RTOS要学,要会,要用吗?
秦天qintian0303 发表于 2024-12-2 09:46 暂时还在搞裸机开发
感谢版主来捧场啊
- 2024-11-30
-
回复了主题帖:
来,来,来,撒分了!RTOS要学,要会,要用吗?
wangerxian 发表于 2024-11-29 16:57
先学习得FreeRTOS后面接触得RTThread,还是觉得RTThread好用一些。
谢谢版主来捧场
-
回复了主题帖:
8051还有学的必要吗?
这个问题我倒是觉得最后还是会归结到自己的导师的水平上面。
如果导师熟悉51单片机,还是按照导师的意愿来吧
-
回复了主题帖:
求大佬们帮忙看看
先上电测量电压是否正确。
然后,再看看jtag能否找到Cortex-M3的内核
- 2024-11-28
-
回复了主题帖:
来,来,来,撒分了!RTOS要学,要会,要用吗?
我先来回一个帖子!
我主要工业控制领域,上学的时候就是这个方向。当时,FreeRTOS因其免授权,所以就一直使用下来了。算下来也好多年了!
FreeRTOS在嵌入式实时操作系统里面算是小巧,紧凑的。该有的系统特性它都有,比如内存管理,任务间通讯,信号量与消息队列等。这几年其被收购之后,更新了其中文文档,国内用户学习起来成本更低。
第三方扩展组件也越来越丰富,如lwip网络协议栈,FatFS文件系统等
这几年使用下来,其移植的成本还是蛮低的,任务设计也简单,示例也丰富。推荐大家学习,使用。
-
发表了主题帖:
来,来,来,撒分了!RTOS要学,要会,要用吗?
本帖最后由 jobszheng5 于 2024-11-28 17:13 编辑
来,来,来,撒分了!RTOS要学,要会,要用吗?
嵌入式MCU,早已经不在那个资源受限,主频只有8MHz的时代了。在当下的嵌入式主控芯片里面,主频已经可以高达600MHz,而普通的MCU也可以轻松运行在64MHz。不仅主频有质的飞跃,而且ARM Cortex-M系列的MCU,其在内核设计初期亦添加了支持嵌入式实时操作系统(RTOS)的原生内核指令。古人云:“天时,地得,人和。”这也使得RTOS在这几年大放异彩,涌现出多个重量级的RTOS产品。有开源,有闭源,有免费学习,更有免授权使用。
这不,话题就来了!
你会在你的项目中使用RTOS吗?
你看重RTOS的哪些特性?
你愿意在未来的日子里跟随论坛的小伙伴们一起学习RTOS吗?
欢迎大家回帖!聊一聊你和RTOS的那些事。
楼主也会把大家谈到的RTOS的简介不断更新在主题帖子里面,要时不时回来看看哟!
1. FreeRTOS简介
FreeRTOS,全称为Free Real-Time Operating System,是一个开源、轻量级、小型的实时操作系统内核。由Real Time Engineers Ltd.开发和维护,FreeRTOS专为嵌入式系统设计,以其高度可移植性、丰富的功能和活跃的社区支持,成为众多开发者的首选RTOS。
主要特点
开源与免费:
FreeRTOS是完全免费的操作系统,源码公开,用户可以自由使用、修改和分发。
轻量级与小型:
FreeRTOS的内核非常小巧,占用的资源非常少,适用于资源受限的嵌入式系统。它可以根据应用程序的需求进行裁剪,只包含必要的功能模块,以减小内存占用。
可移植性:
FreeRTOS的内核代码是高度可移植的,可以在不同的处理器架构和开发平台上运行。它已经被广泛移植到各种单片机和嵌入式设备上。
实时性:
FreeRTOS是一个实时操作系统,提供了实时任务调度和中断处理机制,能够满足实时应用程序的需求。它支持任务的优先级调度和中断的响应,可以保证关键任务的及时执行。
核心功能
任务管理:
FreeRTOS支持多任务管理,可以创建、删除、修改任务,以及进行任务调度。它支持优先级调度和轮换调度算法,确保高优先级的任务能够及时得到CPU资源。
时间管理:
FreeRTOS提供了时间管理功能,包括时间片的分配和调度。FreeRTOS也支持软件定时器,可以在指定的时间间隔后执行特定的任务。
同步与通信:
FreeRTOS提供了多种同步和通信机制,如信号量、消息队列、事件标志组等,用于任务之间的通信和同步。这些机制可以确保任务之间的数据共享和协作,防止数据竞争和冲突。
内存管理:
FreeRTOS提供了内存管理功能,包括内存的申请、释放和内存池的管理。它支持动态内存分配和静态内存分配两种方式,可以根据应用程序的需求进行选择。
官方网站:https://www.freertos.org/
2. 你心目中那个向往的RTOS_2
- 2024-11-27
-
回复了主题帖:
无刷电机 是甚么来着?!
貌似还是无刷电机厉害
- 2024-11-25
-
回复了主题帖:
DIY一个袖珍实验电源
LM317做线性压降型的电源的方案 一直都想做。
羡慕一下楼主的动手能力
- 2024-11-24
-
回复了主题帖:
电路对照实物,分析三色调光台灯的电路原理
这个拆解清晰!
话说,现在台灯的电路也够简单的啊
- 2024-10-30
-
回复了主题帖:
新能源汽车充电桩的内部结构、充电原理知识
强电部分还没有介绍呢
- 2024-10-27
-
发表了主题帖:
【米尔 瑞芯微RK3568 工业开发板】基于libuv的客户端TCP连接
# 【米尔 瑞芯微RK3568 工业开发板】基于libuv的客户端TCP连接
今天给大家带来的试用分享是在米尔出口的瑞芯微RK3568的工业开发板的以太网相关评测:基于开源库libuv的TCP客户端实现。
以太网,在现在的社会中,应该没有人说我没有上过网。人如此,机器设备亦如此。在工业设备通讯里面,相对于RS485,CAN,或者WiFi,蓝牙,zigbee等通讯方式,以太网仍然是带宽大,速度高,延迟低的通讯方式。这些特性也成为工业控制领域中设计 应用使用以太网通讯的重要筹码。对于实时性要求巨高的伺服电机驱动,也是在以太网基础上部署了EtherCAT协议。据科技媒体相关报道,现在部分头部新能源车企也开始部署车载以太网与更新适应汽车安全的以太网协议。可见,以太网功能是我们嵌入式工程师必备的一项基础知识与技能。
## 米尔RK3568开发板
既然以太网这么重要,那么,我们米尔的瑞芯微RK3568在这方面的设计又如何呢?
做为一款国产高性能4核芯片,RK3568拥有丰富的高速接口,比如,我们本次要评测的以太网接口。米尔贴心的为我们准备了两个接口,并且两个以太网接口均支持千兆速率。没错!是双千兆接口。这样,我们可以使用这两口接口分别加入两个不同的局域网,也可以使用一个接口连接入内网,另一个连接入外网。这样也可以隔离数据与通讯,而且增强了数据安全性。总之,双千兆网口足以胜任我们工业控制领域的大多数应用。
## libuv实现客户端
有了米尔RK3568强悍的硬件支持,优秀、稳定、可靠的软件软件驱动也要跟上。考虑到自身软件实现的水平,所以,本次我使用了开源的libuv来实现TCP客户端,并进行数据的收发。
libuv是一款开源的跨平台的异步IO库。它也是大名鼎鼎Node.js的底层库实现。libuv开源库的特性是异步IO方式,但我们本次使用它的客户端模式,借用其回调函数的实现方式。当然,对于我个人而言,在一个已有框架下编程,程序的健壮性也多少有点保证。
## 部署libuv客户端
我们需要从国外github.com上同步下载libuv的源代码。我建议大家直接下载libuv的zip包。如果使用git clone的方式,由于众所周知的原因,大概率会失败。
下载完成之后,将zip包解压到合适的文件夹。由于libuv使用纯C编写,并且并未依赖其它链接库,我们可以直接运行CMake来生成动态链接库.so文件。当然,如果是自己的程序,我还是非常建议使用静态链接库,主要是出于好发布,好维护的原因。我这里使用.so的动态链接库的原因还有一个,我也要在米尔RK3568的环境下运行TCP服务端。这样可以共用同一套libuv库,也充分体现动态链接库的优势。
## 编写我们自己的TCP客户端
有了libuv动态链接库,我们就基于libuv的框架来编写我们的程序代码。
我们让app连接到端口号为9012的服务端,并发送"Hello EEWORLD! Hello MYiR RK3568!"字符串。我的参考源代码如下:
```c
/**
******************************************************************************
* @File main.c
* @author jobs
* @version v0.00
* @date 2024-09-11
* @brief * @note
*
******************************************************************************
*/
#include
#include
#include
#include
#include “uv.h”
#define DEFAULT_PORT (9012)
uv_buf_t iov;
char buffer[128];
const char hello_str[] = "Hello EEWORLD! Hello MYiR RK3568!";
uv_loop_t *loop;
uv_tcp_t client_tcp_socket;
uv_connect_t connect;
void send_done(uv_write_t *req, int status)
{
if (status < 0)
{
fprintf(stderr, "Connection error %s\n", uv_strerror(status));
return;
}
uv_close((uv_handle_t *)&client_tcp_socket, NULL);
}
void on_connect(uv_connect_t *req, int status)
{
if (status < 0)
{
fprintf(stderr, "Connection error %s\n", uv_strerror(status));
return;
}
fprintf(stdout, "Connect ok\n");
stpcpy(buffer, hello_str);
iov = uv_buf_init(buffer, sizeof(buffer));
iov.len = strlen(hello_str);
uv_write((uv_write_t *)req, (uv_stream_t *)&client_tcp_socket, &iov, 1, send_done);
}
int main()
{
int ret = 0;
struct sockaddr_in dest;
*loop = uv_default_loop();
uv_tcp_init(loop, &client_tcp_socket);
uv_ip4_addr("192.168.8.18", DEFAULT_PORT, &dest);
ret = uv_tcp_connect(&connect, &client_tcp_socket, (const struct sockaddr *)&dest, on_connect);
if (ret)
{
fprintf(stderr, "connect error %s\n", uv_strerror(ret));
return 1;
}
uv_run(loop, UV_RUN_DEFAULT);
return 0;
}
/******************************** END OF FILE *********************************/
```
我们可以看到,我们模拟的TCP服务端成功接收到米尔RK3568的连接,并接收到发送过来的字符串。
## 总结
通过本次试用TCP客户端的以太网接口,我们可以看到米尔RK3568在工业控制领域,自动化领域,机器人领域轻松实现TCP高速、大带宽的数据通讯。
本次原型验证也起到非常积极有效作用。我相信,经过本轮试用定会在实际项目选型中会优先考虑米尔RK3568,也必将会减少我实际项目的开发周期。
-
发表了主题帖:
【米尔 瑞芯微RK3568 工业开发板】本地Linux交叉开发环境搭建
# 【米尔 瑞芯微RK3568 工业开发板】本地Linux交叉开发环境搭建
在申请试用的时候,我就提前了解了一下瑞芯微的RK3568的开发所需的交叉编译环境——“区区几行命令而已,并未放在心上。”我觉得我这样的Linux小白,在有多年C语言开发经验下,上手起来应该易如反掌。可是,现实却又如此的“啪啪”的打脸!等我拿到开发板后,开始搭建环境时才发现嵌入式Linux开发使用的交叉编译环境入门门槛还是相当高的。虽然都是按照手册的安装命令一路下来,但每个人的情况也貌似各有各的不同。这样,或者那样的问题时不时地很自然地就冒了出来。我也是历经曲折,迎难而上,终于迎了编译成功的信息提示。接下来,我就来分享一下我的米尔瑞芯微RK3568工业开发板的嵌入式Linux交叉编译环境搭建过程中所踩的“坑”与解决办法。
## 坑一:操作系统选择
在米尔提供的Quick Start手册文中建议使用Ubuntu操作系统——至少,我还是十分建议的,毕竟,它可以让你少走很多很多的弯路。开始的时候,我的测试机环境是CentOS8,我想着也是Linux,应该差不多。于是,我以小白的角色,试了一下。结果,各种软件安装失败,依赖包找不到。也不知道什么原因?CentOS提示安装源过期!查了不少资料,也按照网友们的建议进行了尝试,终不得法。在各种挣扎与纠结之后,下定决心更换为了Ubuntu操作系统。
## 坑二:Python2的安装
在米尔官方的指导手册说明中,有安装Python2的命令,但我本次安装的却非指导手册默认的Ubuntu 22.04版本,而是Ubuntu 23.04。主要是当时下载Ubuntu镜像包时,没有看到22.04的版本,只有23.04的版本。于是我就又没有听米尔的建议。唉,又吃了不苦呀!
我在安装Python2时,提示我:Ubuntu不再支持!不再支持!对于只会使用“sudo apt install”安装软件的我,这使用安装步骤陡然剧增,不过,还好!办法总算是让我找到,又搜索了不少的资料。最后终于让我搞定了!
在高版本的Ubuntu系统上安装Python2,其核心的办法就是需要下载Python2的源代码,自行编译并安装。现在把Python2的安装过程分享一下:
首先,获取到Python2的源代码,打开网站地址:[Python Release Python 2.7.15 | Python.org](https://www.python.org/downloads/release/python-2715/),下载tar包。
依次敲入下面的命令:
```shell
wget https://www.python.org/ftp/python/2.7.15/Python-2.7.15.tgz
tar -xf Python-2.7.15.tgz
cd Python-2.7.15/
./configure --enable-optimations
make
python2
```
安装好Python2之后,根据指导手册继续安装,遇到未找到的安装依赖,我们可以直接使用“sudo apt install”来安装,然后,再将运行安装脚本,反复几次即可。
在踩完这两个大坑之后,后面的操作便一帆风顺了!这不,您瞧!
这张图片是安装交互编译器,并参数配置生效的截图。
这张是我们重新编译Kernel,rootfs和uboot镜像的截图。
其实,我们按照米尔官方的指导手册来依次执行是没有多大的问题的。对于我来说,现在经过这段时间与嵌入式Linux的磨合,回头再看,我也并不再觉得嵌入式Linux的交叉编译环境有多难。一名Linux小白的成长过程也就是如此吧!我想这也是我们米尔厂商,EEWORLD论坛为大家安排试用的初衷吧!
P.S.多说一句。米尔官方资料是保存在了网盘,下载速度相当快!
- 2024-10-22
-
回复了主题帖:
【STM32H7S78-DK】手撸一个数字键盘
好厉害啊
- 2024-10-15
-
回复了主题帖:
Modbus调试软件--modbuspoll、modscan和modsim使用详解
我平时使用ModbusPoll软件来辅助开发