Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
心得分享
入门
【再见,2020】rt-thread 入门系列之先用后学
发布于 2021-01-18 09:34:31 浏览:1152
订阅该版
[tocm] 自从入行以来, 如果要问什么时候能力提升最大, 不是查寄存器手册那会, 也不是深入学习c语言那会,更不是自称十年老工程师手把手教学那会, 而是从认识rt-thread 开始, 无论是优雅的代码风格, 健全的开发辅助工具, 还是强大的软件功能 , 都令人眼前一亮. 学一样新东西的时候, 一开始从心底都是抵触的, 需要不断在获取正反馈, 才能快速掌握新新知识. 克服抵制心理.所以先用后学也是一种不错的学习方法. 原文由本作者发布在csdn 上 rt thread 学习网站 https://www.rt-thread.org/document/site/ ## 1 rt thread 之缘 ### 1.1 从裸机开发开始 在学校里进行开发的时候, 学长和老师教会了一些前后台的逻辑, 定时器轮询任务, 以这样来的方式开发智能车或者其他电子产品, 那个时候还好, 偶尔了解到rtos 之类的, 一看望去, 原理好复杂啊, 就没细学,一没必要, 二也学不会.所以一直用着前后台的逻辑编写代码. ### 1.2 单片机的分身术 后来工作了, 前后台的写法, 已经无法完成一些逻辑复杂的任务了, 刚好空挡期就学会了ucos操作系统, 因为是抱着一个明确目标去学习用, 只是想实现多个while(1) 的循环体, 然后发现原来用起来很简单,一个创建任务的函数就搞定了,真就是把单片机拆分成数个单片机一起用了, 学完创建任务的功能后, 有一种春风得意马蹄疾的快感, 这样键盘任务, 和显示任务, 计算任务, 就非常容易去理清逻辑了. 然后那时候的感觉就是, rtos这样太简单了, 果然还是裸机开发下, 程序驱动的移植, 和调试比较重要, 操作系统也没那么神奇, 但是真好用. 实现了多任务, 已经能够解决那时候工作比较棘手的问题, 关于线程通信, 说来惭愧, 沿用了全局变量的思想, 就没有线程通信, 准确的说, 持续了一小段时间仅仅使用了操作系统的一个创建任务的函数, 但这么傻瓜的操作, 却成为了后面深入学习的敲门砖. ### 1.3 分身乏术 分身乏术一词,可能描述不对, 虽然上面说了已经实现了分身术, 但是程序逻辑还是偶尔不稳定, 有很多时候和预想的结果不太一样, 比如传感器那边的数据, 最早可能立刻就可以处理了, 最晚可能要等到thread_delay()的时间了, 完全就和赌博一样跑程序了, 尤其是当我用同样的编程思维写了一个电脑端的多线程程序后, 程序直接占用了25% 的cpu , 我人都傻掉了, 区区几行c 代码, 竟然如此猖狂, 独占了一个cpu 核心全速运行, 是时候做点什么去改变了. **信号量** 作为第一个用在多线程同步的成员, 直接解放了不止多少cpu 的工作量, 又及时, 又能释放cpu 资源, 没数据的时候, 也不会空转(空闲任务空转另说,可以用低功耗解决, 降频之类的..), 简直又是一个得力助手啊, 比如串口收到数据后, 才去通知线程去处理, 太完美了. **事件集合** 在ucos 叫做标志位组, 信号量虽好,但是只能一对一, 确实偶尔设计的逻辑有局限性, 我想等待多个线程都发来同步信号,就用到这个了 **互斥量** 作为特殊的信号量, 信号量可以不断的往上+1 , 互斥量只能加到1 , 就可以保证, 有生产, 才有消费 ### 1.4 移植好麻烦 虽然操作系统很好用, 除了上文提到的同步线程的功能以外, 还有线程通信的**邮箱, 消息队列**等, 都非常好用, 都是一看就会, 一用就爽那种, 但是新的问题又出现了, 由于工作上遇到不同的单片机, 所以需要不断的去移植,配置各种通信啊 , 比如串口, iic , spi 等等, 就算是同一个牌子的单片机, 配置选项也不尽相同, 通常需要同时打开数个文档, 数个软件, 经过反复调整, 非常麻烦.这种工作基本上属于花时间涨经验比较少的那种. 如果能一套代码, 到处运行就好了, 通过了解发现, rt-thread 处理具备常规操作系统的线程调度管理之外, 还有**设备管理框架**, 只需要对接底层驱动, 就可以写同样的代码, 非常方便移植, 轻松做到了应用软件, 和底层驱动分离. ### 1.5 调试好麻烦 在用ucos 操作系统时, 需要调用自己写的部分代码进行测试, 或者与产品进行交互调试的时候, 就非常麻烦, 需要自己写一个相应help 的指令, 用来响应自己写的指令, 配置参数, 查看状态之类的. 后来用来finsh 之后, 这些问题统统不存在了, 而且可以通过 导入指令宏进行操作. 程序就可以变得有效解耦. 可以非常自由. 比如用rt thread 写的程序可以做到一个c 文件, 一个功能, 需要某个功能, 直接把文件拖进去, 自动创建任务,执行, 导出调试指令, 不需要就直接删除, 对于开发非常快捷方便. ### 小结 除了以上非常好用的功能之外, 还有很多在线的软件包, 可以一键添加进来(ENV 部署工具), 学习进步最快的方法, 就是阅读优秀的源代码, 大量的软件包, 纠正了我很多不良习惯. 是非常值得学习的一个操作系统 关于rt thread与其他操作系统的区别, 我从网上找到了一张对比图, 虽然一开始从ucos 那里获取到了不少好处, 但我还是背叛了ucos.... ![在这里插入图片描述](https://oss-club.rt-thread.org/uploads/20220714/fb164894427febf2e959fe48ef16159a3ee0ca6a.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzI5NTA1MTUz,size_16,color_FFFFFF,t_70) 关于rt - thread 的论坛, 有很多靠谱的大佬坐镇, 对于一开始入门的我, 提供了不少帮助 论坛地址 https://club.rt-thread.org/
2
条评论
默认排序
按发布时间排序
登录
注册新账号
关于作者
kid
这家伙很懒,什么也没写!
文章
7
回答
54
被采纳
5
关注TA
发私信
相关文章
1
内核视频教程为什么打不开
推荐文章
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
WIZnet_W5500
UART
ota在线升级
PWM
cubemx
freemodbus
flash
packages_软件包
BSP
潘多拉开发板_Pandora
定时器
ADC
GD32
flashDB
socket
中断
Debug
编译报错
msh
SFUD
keil_MDK
rt_mq_消息队列_msg_queue
ulog
C++_cpp
at_device
本月问答贡献
踩姑娘的小蘑菇
7
个答案
3
次被采纳
a1012112796
13
个答案
2
次被采纳
张世争
9
个答案
2
次被采纳
rv666
5
个答案
2
次被采纳
用户名由3_15位
11
个答案
1
次被采纳
本月文章贡献
程序员阿伟
9
篇文章
2
次点赞
hhart
3
篇文章
4
次点赞
大龄码农
1
篇文章
5
次点赞
RTT_逍遥
1
篇文章
2
次点赞
ThinkCode
1
篇文章
1
次点赞
回到
顶部
发布
问题
投诉
建议
回到
底部