硬汉嵌入式论坛

 找回密码
 立即注册
查看: 7638|回复: 7
收起左侧

[其它] 关于RTOS中使用全局变量的问题,欢迎探讨

[复制链接]

7

主题

23

回帖

76

积分

初级会员

积分
76
发表于 2017-9-15 17:32:05 | 显示全部楼层 |阅读模式
最近在移植freeRTOS,比如存在这么一个结构体数组,它的成员在许多任务中都有访问到,如果不定义成全局变量,则每个任务中都需要再定义和初始化一遍,且如果一个任务更改了其中一个成员信息,其它的几个任务都需进行同步,这种情况下定义成全局的是否更方便,也更省空间,大家遇到这类问题都是怎么解决的,有何利弊,欢迎探讨。
回复

使用道具 举报

0

主题

4

回帖

4

积分

新手上路

积分
4
发表于 2017-9-15 18:07:42 | 显示全部楼层
改成全局变量,  资源读写操作的时候互斥量控制下.
回复

使用道具 举报

7

主题

23

回帖

76

积分

初级会员

积分
76
 楼主| 发表于 2017-9-15 19:55:11 | 显示全部楼层

回 lake518j 的帖子

lake518j:改成全局变量,  资源读写操作的时候互斥量控制下. (2017-09-15 18:07) 
嗯,谢谢提醒,目前也打算这么用,引入RTOS觉得主要一个目的是为了降低任务间的耦合,能用局部则用局部变量,这应当是出发点吧,你们是这么考虑的吗,还是说有其它的原因,应当作怎样的权衡?
回复

使用道具 举报

7

主题

23

回帖

76

积分

初级会员

积分
76
 楼主| 发表于 2017-9-16 16:21:49 | 显示全部楼层

回 lake518j 的帖子

lake518j:改成全局变量,  资源读写操作的时候互斥量控制下. (2017-09-15 18:07) 
这里其实还涉及到一个任务阻塞的问题,觉得还是用消息队列进行同步比较妥当。
回复

使用道具 举报

0

主题

26

回帖

26

积分

新手上路

积分
26
发表于 2017-9-21 12:23:22 | 显示全部楼层
先可以简单粗爆的对全局变量加保护。

后面尽量避免多线程直接访问全局变量
RTOS RT-Thread
回复

使用道具 举报

7

主题

23

回帖

76

积分

初级会员

积分
76
 楼主| 发表于 2017-9-21 21:24:27 | 显示全部楼层

回 aozima 的帖子

aozima:先可以简单粗爆的对全局变量加保护。

后面尽量避免多线程直接访问全局变量 (2017-09-21 12:23) 
但这个要考虑高优先级任务就绪需要访问这个变量时造成的阻塞问题,且由于有多个低优先级任务访问该资源,造成的阻塞时长还不一样,而高优先级任务是需要及时处理的。
回复

使用道具 举报

7

主题

23

回帖

76

积分

初级会员

积分
76
 楼主| 发表于 2017-9-21 21:30:15 | 显示全部楼层

回 mr_ftx 的帖子

mr_ftx:但这个要考虑高优先级任务就绪需要访问这个变量时造成的阻塞问题,且由于有多个低优先级任务访问该资源,造成的阻塞时长还不一样,而高优先级任务是需要及时处理的。 (2017-09-21 21:24) 
由于每个任务中需要同步的结构体成员不一样,目前采用消息队列的方式根据不同任务需要进行同步即可。当然,这必然会牺牲掉一些系统资源(每个任务都需要创建相应的消息队列),但任务间的耦合度降低便于管理。
回复

使用道具 举报

7

主题

23

回帖

76

积分

初级会员

积分
76
 楼主| 发表于 2017-9-21 21:37:52 | 显示全部楼层

回 aozima 的帖子

aozima:先可以简单粗爆的对全局变量加保护。

后面尽量避免多线程直接访问全局变量 (2017-09-21 12:23) 
从目前来看,觉得在RTOS中,能用到全局变量传递信息的地方都可以用消息队列来实现,觉得主要需要考量的还是多任务访问冲突的问题(任务耦合度),仁者见仁。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-5 11:24 , Processed in 0.269390 second(s), 24 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表