打印
[STM32]

裸机程序移植到OS上,一堆全局变量该怎么处理???

[复制链接]
877|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
飛饵|  楼主 | 2020-6-7 02:37 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 飛饵 于 2020-6-7 02:38 编辑

之前裸机上的一个小工程,大概框架是有3个软件模块:
1、一个负责OLED屏显示的UI模块
2、一个负责按键扫描和键值处理模块
3、一个负责控制外部设备的模块
4、还有一些小的模块比如RTC时间获取,led灯之类的。
在裸机上的流程大概是定时器中断内运行模块2和RTC时间获取,其他的都在main中循环。所有模块都靠全局变量通信,特别是模块1和2之间几乎所有变量都飞来飞去。
现在移植过来只是把模块单独丢进各个线程里让他们并行处理,什么信号量邮箱都没用到,感觉好不规范。
而且那些小模块不太懂怎么安排,比如RTC时间获取,是给一个线程单独运行还是和UI或者按键扫描一起好??



使用特权

评论回复

相关帖子

沙发
ayb_ice| | 2020-6-8 11:45 | 只看该作者
简单
那个信号量,对全局变量的访问先申请信号量,访问完后释放信号量

使用特权

评论回复
评论
飛饵 2020-6-9 18:28 回复TA
刚会用OS,都不太懂怎么组织架构 
板凳
叶春勇| | 2020-6-9 21:35 | 只看该作者
看了你的项目介绍,非常适合用os,有oled有键盘,都是慢速,需要的是人的速度。
如果项目需要的是单片机机器的速度用os就浪费资源。

使用特权

评论回复
评论
飛饵 2020-6-9 22:38 回复TA
另外,我说的那些全局变量有什么好的办法进行规范处理吗 
飛饵 2020-6-9 22:37 回复TA
怎么说?多任务还要保证实时性的情况下用RTOS不是很好的选择吗?你说的“需要的是单片机机器的速度”是单片机指专门处理一些事吗? 
地板
叶春勇| | 2020-6-9 23:11 | 只看该作者
在操作系统里讲进程间通讯,一种是消息机制,一种是共享内存。
有的人用全局变量,目的就是个标志位。
有的全局变量是当共享内存用的,如果进行解耦,会降低程序效率。
最后建议,成熟的东西别去折腾

使用特权

评论回复
评论
飛饵 2020-6-10 18:02 回复TA
目前在OS上运行没发现什么问题。只是担心并行处理导致一些资源被抢占,不过变量太多又很难分析哪些会被抢占。。感觉裸机移植过来好容易出问题 
5
叶春勇| | 2020-6-10 18:23 | 只看该作者
把全局变量按排列组合分成如下形式。
1、单写单读
2、单写多读
3、多写单读
4、多写多读
那么当你写成OS形式的时候。
第一种:
随便折腾,不涉及互斥的问题。
第二种:
由于也是单个写,可能涉及到多个读的子程序同步的问题,如果不同步,也是随便折腾。
第三种:多写单读
这个就有问题了
第四种:多写多读,类似火车票订票系统
同第三种,多了个读方的同步的问题。

总结:
第一种,第二种,移植到操作系统问题不大。
第三种,第四种,移植到操作系统,就需要学习操作系统理论,了解一些信号量,互斥,等基本概念。至于资源的分配,是华为的轮值ceo(时间分配),还是腾讯qq的vip优先(优先级),跟人类社会很像的。
当然第三种和第四种,出现的情况很少。也是可以用状态机手动分配资源。

最后,你移植了操作系统,如果没有抽象出得到足够多的模块和库,我认为收益不大。

全局变量猛如虎,但是全局变量特别适合单写多读的情况。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

18

主题

117

帖子

1

粉丝