Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
RT-Thread活动
我与RT-Thread的故事
【我与RT-Thread的故事】 我的 rt-thread 观
发布于 2021-10-27 17:25:23 浏览:1362
订阅该版
[tocm] # 【我与RT-Thread的故事】 我的 rt-thread 观 ## 初识 说起接触 rt-thread 系统来,也算是慌乱之中的邂逅。从今年 5 月份到这个月底刚好半年,半年前对它是一无所知。我们有一个着急项目,要求使用单片机开发带触屏界面的,对于我这种多年不使用单片机,被 linux “腐蚀”的不爱学习了。突然要换一个陌生的环境,着实让我慌乱地一批。 经过开会商议,大家觉得之前有个项目使用的芯片可以胜任,可以先拿那个项目的硬件搭建基础环境。而那个项目恰恰使用的 rt-thread 系统。这是我第一次接触 rt-thread。 ## 熟知 ### 核心 可能因为多年前有过 uCOS-II 系统的底子,在熟悉 rt-thread 的初期没花费多少时间就先找到了内核调度、sysTick 心跳、上下文切换等几个核心的代码实现。我认为,这些部分就像是一部机器的引擎,一个人的心脏。 ### 多任务 多任务系统,不可避免地要使用多个线程完成不同功能任务。线程间互斥、同步、通信这些概念性的东西换到任何多任务系统下都一样,也是必不可少的。说到这里,不得不提两个概念 —— “临界区”和“临界资源”。我发现很少有人提到这俩概念,但是多任务系统里,这两个概念很重要,涉及到系统设计是否稳定安全。这一块儿因为有 linux 上多线程使用的经验,不难理解。 ### 同步和消息机制 一个复杂的,功能繁多的系统,多线程配合上定时器、信号量、互斥锁、邮箱、事件集、消息队列等同步和消息机制一起使用,就像如虎添翼一般。有了它们,线程可以更专注自己的功能实现,线程之间功能实现解耦,同时保证系统稳定性和数据安全。 ### 外设驱动框架 这也是 rt-thread 的一个亮点,当初看到 rt-thread 的这个特性的时候,感觉眼前一亮了。在这个框架下,我几乎可以继续像在 linux 系统里那样读写文件、访问外设。 open close read write control 函数簇,几乎一样的 api ,一样的操作逻辑。刚开始使用 STM32F4 系列芯片的时候,外设驱动很完善。想添加任何外设,拿来即用。 也正是这个,rt-thread 让我痴迷,勾起了我的好奇心,想深入全面的了解一下 rt-thread ,一探究竟 rt-thread 是怎么实现各种外设接口统一的。 ### 第三方工具包 支持到 rt-thread 上的第三方包也是数不胜数。从文件系统,到网络协议栈,还有 py 解释器、xml json 等解析器...... 几乎嵌入式平台上可以能用到的组件包都可以找到,这个极大地方便了初学者。 ## 深交 熟练使用才是我们研究一个新系统的第一步,挖掘它的实现原理、工作性能以及潜在的漏洞,反馈到我们的项目中,才能写出高质量、高性能、最优化的代码。 经过大量阅读源代码,一方面,了解了各种内核对象 —— 线程、定时器、信号量、互斥锁...... 等实现工作机制;另一方面,也发现了很多值得再讨论的地方。例如: 1. 函数运行状态返回码,在应用层、内核api、驱动底层,要不要要求都使用负值。因为在驱动代码里有大量的地方使用的是正值,但是返回给内核层的时候就变成负值了,这种情况虽然不影响使用,但是相同的 `RT_ETIMEOUT` 超时,有时候 `return RT_ETIMEOUT;`,有时候 `return -RT_ETIMEOUT;`。 2. 线程的错误码 `struct rt_thread::error`(c++ 写法,仅为说明问题)。除了 `RT_ETIMEOUT` 这一种错误状态,其它错误就没有扩展空间了?个人愚见,任何阻塞操作都应该处理 `RT_EINTR`。 3. rt-thread 的某些特性,导致它的开关中断比其它 rtos 要频繁很多。但是,我拿不出有效的测试方案,并没有数据支撑这个观点。但是我希望有人能找到精确测量关中断时间的方案。 4. 怎么满足内核任务调度启动前的延时需求。某些芯片板级初始化过程中需要有延时,以满足外设的时序要求。但是这个时候因为内核未启动直接使用 rt_thread_mdelay 达到毫秒延时是不对的。我认为,在 INIT_BOARD_EXPORT 初始化阶段及之前,所有的延时需求都需要另行想办法实现。因为那个时候没有线程概念,也就不能随意使用 rt_thread_xxx 函数。 5. 类似的,串口初始化的时候调用了一些内核对象初始化接口,而内核函数大多有调试打印输出信息的行为。或者说,在为指派控制台串口之前,或初始化 rt_printf 底层输出接口的过程中,调用了 rt_printf 。虽然目前没有任何影响,但是会让新人迷惑。 6. 优化关中断操作,减少关中断次数及总时间。 7. 在之前的文章中提到的其它问题。 ## 永相随 今年,无疑是 rt-thread 大爆发的一年。有大量的国产芯片 bsp 被添加到仓库,支持更多的国产芯片。这个时候加入 rt-thread 大军也不算落伍。如果可以,在享受到 rt-thread 带给我们的便利之外,希望我也能尽自己的一点儿绵薄之力,帮助完善 rt-thread。 愿更多的人加入进来,一起助力 rt-thread 尽善尽美。
3
条评论
默认排序
按发布时间排序
登录
注册新账号
关于作者
出出啊
恃人不如自恃,人之为己者不如己之自为也
文章
43
回答
1517
被采纳
342
关注TA
发私信
相关文章
1
(苏州站)RT-Thread物联网开发者沙龙【已结束】
2
(成都站)RT-Thread物联网开发者沙龙
3
(深圳站)RT-Thread物联网开发者沙龙
4
(西安站)RT-Thread物联网开发者沙龙
5
成都站2018 RT-Thread开发者沙龙回顾及PPT下载
6
2018 RT-Thread物联网开发者沙龙(北京站)
7
2018 RT-Thread物联网开发者沙龙(南京站)
8
第十三届研电赛RT-Thread企业专项奖发布通知
9
RT-Thread应用作品征集大赛开始啦!
10
你的投票将决定RT-Thread官网应该优先准备的文档是哪些
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
国产MCU移植系列教程汇总,欢迎查看!
4
机器人操作系统 (ROS2) 和 RT-Thread 通信
5
五分钟玩转RT-Thread新社区
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
FinSH
ART-Pi
USB
DMA
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
FAL
rt-smart
ESP8266
I2C_IIC
UART
WIZnet_W5500
ota在线升级
freemodbus
PWM
flash
cubemx
packages_软件包
BSP
潘多拉开发板_Pandora
定时器
ADC
flashDB
GD32
socket
中断
编译报错
Debug
SFUD
rt_mq_消息队列_msg_queue
msh
keil_MDK
ulog
C++_cpp
MicroPython
本月问答贡献
a1012112796
10
个答案
1
次被采纳
踩姑娘的小蘑菇
4
个答案
1
次被采纳
红枫
4
个答案
1
次被采纳
张世争
4
个答案
1
次被采纳
Ryan_CW
4
个答案
1
次被采纳
本月文章贡献
catcatbing
3
篇文章
5
次点赞
YZRD
2
篇文章
5
次点赞
qq1078249029
2
篇文章
2
次点赞
xnosky
2
篇文章
1
次点赞
Woshizhapuren
1
篇文章
5
次点赞
回到
顶部
发布
问题
投诉
建议
回到
底部