搜索

[uCOS/RTOS] 关于使用rtos时的实现思路

[复制链接]
110|5
 楼主 | 2020-10-23 11:51 | 显示全部楼层 |阅读模式
本帖最后由 djz1992 于 2020-10-23 11:55 编辑

一直用的裸机,rtos看了有段时间了,信号量、队列、邮箱也看了,也操作了。
但是还是不明白怎么来把旧项目改写成RTOS项目。有起码一百个全局变量。
比如,就把项目分为以下几个线程:
1.温度采集
2.段码显示屏
3.按键检测
4.PTC控制

段码显示当前温度、当前运行剩余时间,在按键进入设置模式的时候,显示设置温度、设置运行时间。
按键,可以开关机,进入设置,加减值。

问题:那么当前温度、设置温度、当前时间、设置时间,这些参数,需要多个不同线程使用。该如何传递?

思路1:每个变量都创建一个队列,写的线程发出,使用的线程读取。这个好像比较简单,就当他是全局变量用。可以阻塞等待。
思路2:创建一个队列,把所有参数按设想的顺序排列好(像通信协议),每次传递都把所有值都传递。各线程定时获取所有数据,但仅解析自己用得到的那部分。
思路3:。。。。。

感觉做之前得把所有状态量都列出来,然后好好规划一下怎么传递。。。。@ufbycd 大佬,指点下。其实上述功能,用不到rtos,主要是用在联网设备上。

使用特权

评论回复
| 2020-11-12 16:30 | 显示全部楼层
“一百个全局变量”还跨不同源文件访问,这么拙劣的代码就没什么模块化可言了,基本上是重构不了的。

良好的编程习惯是每个全局变量都加static修饰,即只允许本源文件直接访问。其它源文件要访问就加get、set或类似接口。这样才能保证模块间的隔离,方便后期维护或重构。

使用特权

评论回复
| 2020-11-13 11:02 | 显示全部楼层
你的问题在于搞不清楚 业务逻辑和驱动,没有做好层次区分,去查查QP状态机,你这些东西都可以分解的清清楚楚。

使用特权

评论回复
 楼主 | 2020-11-25 08:10 | 显示全部楼层
ufbycd 发表于 2020-11-12 16:30
“一百个全局变量”还跨不同源文件访问,这么拙劣的代码就没什么模块化可言了,基本上是重构不了的。

良好 ...

学习了。

使用特权

评论回复
 楼主 | 2020-11-25 08:24 | 显示全部楼层
ufbycd 发表于 2020-11-12 16:30
“一百个全局变量”还跨不同源文件访问,这么拙劣的代码就没什么模块化可言了,基本上是重构不了的。

良好 ...

这次新项目,我用了rtthread,尽量不用全局变量,都用指针作为形参在函数间传递,外加函数的返回值。

使用特权

评论回复
 楼主 | 2020-11-25 08:25 | 显示全部楼层
菜鸟同学 发表于 2020-11-13 11:02
你的问题在于搞不清楚 业务逻辑和驱动,没有做好层次区分,去查查QP状态机,你这些东西都可以分解的清清楚 ...

学习。

使用特权

评论回复
扫描二维码,随时随地手机跟帖
您需要登录后才可以回帖 登录 | 注册

本版积分规则

我要发帖 我要提问 投诉建议 申请版主

快速回复

您需要登录后才可以回帖
登录 | 注册
高级模式

论坛热帖

关闭

热门推荐上一条 /5 下一条

在线客服 快速回复 返回顶部 返回列表