rt-thread(rtthread和freertos选择哪个)
rt-thread和keil的区别
功能不同。rt-thread和keil是两款不同的软件,其最主要的区别是功能不同。rtthread全称是RealTimeThread,是一个嵌入式实时多线程操作系统,基本属性之一是支持多任务。
RT Thread与uCOS区别
1 、任务管理及调度:
RT-Thread - 32/256可选优先级抢占式调度,线程数不限,相同优先级线程时间片轮转调度;支持动态创建/销毁线程。
uCOS - 256优先级抢占式调度,不允许相同优先级任务存在
2、 同步/通信机制:
RT-Thread - 支持semaphore, mutex, mailbox, message queue, event。mailbox可存储多条消息,任务等待可按优先级进行排队。
uCOS -semaphore,mutex, mailbox, message queue, event。mailbox只能存放1条消息
3、内存管理:
RT-Thread -固定分区内存管理,小内存系统动态内存管理,大内存系统SLAB内存管理
uCOS - 固定大小内存块管理
4、定时器:
RT-Thread - 挂接到系统OS定时器的硬定时器
uCOS - 只能使用OSTimeDly进行时间间隔处理
5、中断嵌套:
RT-Thread - 允许
uCOS - 允许
6、源码许可证:
RT-Thread - 遵循GPLv2+许可证。可用于商业产品(只需要注明使用了RT-Thread)
uCOS - 商业收费
[RT-Thread]事件(event)
event就像是一个非定向的事件通知器,可以实现一( thread )对多( thread )、多( thread )对一( thread )、多( thread )对多( thread )的线程间同步。
一个 event 包含一个32位事件集,每一位都可以表一个单独事件。比如:
发送 event 可以任意组合:
接收 event 时也可以按需组合事件,看一下 rt_event_recv 函数用法:
那么使用就比较简单了,如果需要 EVENT_FLAG3 和 EVENT_FLAG5 都满足,则如下侦听( RT_EVENT_FLAG_CLEAR 按需):
EVENT_FLAG3 和 EVENT_FLAG5 可以是一个thread设置:
也可以是两个thread分别设置:
一个 event 的 suspended_thread 列表里的 thread 等待的事件集不一定相同,所以为做区分,在 rt_thread 中新增两个成员,用于存储 thread 等待的事件集:
RT_Thread组件开发
当重启开发板直接挂载文件系统,就会看到 spi flash mount to /spi failed! 的提示,因为此时在 SPI Flash 中还没有创建相应类型的文件系统。
文件系统的挂载指的是将文件系统和具体的存储设备关联起来,并挂载到某个挂载点,这个挂载点即为这个文件系统的根目录。
[图片上传失败...(image-dd0ae4-1563508716000)]
在 github 上有一份独立仓库: rtthread-apps ,这份仓库中放置了一些和动态模块。
编译成功会生成xxx.mo文件,将文件放置到rt-thread的文件系统上,就可以执行。
在msh命令中输入list_symbol命令。可以看到内核符号表(kernel symbol table)所映射的函数,这些函数就是模块模块开发当前能使用的函数
上述函数主要来自于rt-thread/src/xx.c文件、rt-thread/components/使用的组件xxx/src/xx.c文件
通过宏定义RTM_EXPORT(symbol) ,可以将函数导出到符号表。
rt_dlmodule结构体
动态模块API函数在rt-thread\components\libc\libdl\dlmodule.c文件中定义。
停止动态模块
rt-thread和kernel的区别
RT-Thread,全称是RealTime-Thread,是一款主要由中国开源社区主导开发的开源实时操作系统(许可证GPLv2),包含了实时、嵌入式系统相关的各个组件:TCP/IP协议栈、图形用户界面等。相较于Linux,RT-Thread具有体积小,成本低,功耗低、启动快速的优势,Kernel表示软件的内核,可重复使用,像种子一样。