OpenEdv-开源电子网

 找回密码
 立即注册

扫一扫,访问微社区

正点原子新作:阿波罗STM32F767&F429&探索者STM32F4开发板&赶快来下载资料哦。

查看: 1502|回复: 5

FREERTOS中使用全局变量的问题。

[复制链接]

  离线 

27

主题

87

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
244
金钱
244
注册时间
2015-11-28
在线时间
45 小时
发表于 2017-7-3 09:05:22 | 显示全部楼层 |阅读模式
5金钱
在freertos队列章节中,看到如下内容:
11111111111.png
想搞明白使用全局变量会出现什么问题。串口接收到数据后,要存储在一个数组中,这个数组不也是全局变量吗?

最佳答案

查看完整内容[请看2#楼]

都给你写的清清楚楚了“资源管理”的问题!多任务访问全局变量会带来共享资源管理问题,消息队列最终是用的全局变量!但是消息队列对这个全局变量做了保护,重点就是资源管理的保护!假如你直接使用全局变量,那么在代码中任何任务都可以随时随地的访问、修改这个全局变量!比如A任务正在使用全局变量S,A任务由于任务切换暂停运行切换到B任务,而B任务也要使用S,这时候B任务修改了S的值。当再次切换到A任务的时候这个变量S不就变 ...
笑哥
回复

使用道具 举报

  离线 

62

主题

6368

帖子

5

精华

资深版主

Rank: 8Rank: 8

积分
12588
金钱
12588
注册时间
2013-11-13
在线时间
1419 小时
发表于 2017-7-3 09:05:23 | 显示全部楼层
本帖最后由 zuozhongkai 于 2017-7-3 09:19 编辑

都给你写的清清楚楚了“资源管理”的问题!多任务访问全局变量会带来共享资源管理问题,消息队列最终是用的全局变量!但是消息队列对这个全局变量做了保护,重点就是资源管理的保护!假如你直接使用全局变量,那么在代码中任何任务都可以随时随地的访问、修改这个全局变量!比如A任务正在使用全局变量S,A任务由于任务切换暂停运行切换到B任务,而B任务也要使用S,这时候B任务修改了S的值。当再次切换到A任务的时候这个变量S不就变了?A任务可能就运行出错。如果使用消息队列的话,A任务要使用队列S,先申请,申请成功以后才可以使用。B任务也要使用S的时候也要先申请,当时发现S已经被A任务使用了,所以B任务就没法使用(假设当前的队列长度为1),直到A任务使用完S并且释放掉B任务才申请使用!
回复

使用道具 举报

  离线 

27

主题

87

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
244
金钱
244
注册时间
2015-11-28
在线时间
45 小时
 楼主| 发表于 2017-7-3 23:22:46 | 显示全部楼层
zuozhongkai 发表于 2017-7-3 09:12
都给你写的清清楚楚了“资源管理”的问题!多任务访问全局变量会带来共享资源管理问题,消息队列最终是用的 ...

这个问题想清楚了,又一个新的问题,多个任务(比如三个)向一个队列(长度也是3)中发送消息,如何保证每个任务的信息都发到了队列中,并且读队列的任务能把几个任务传的参数都读出,而不是一直传输的是三个任务中优先级最高的那个任务的发送的数据。
笑哥
回复

使用道具 举报

  离线 

23

主题

676

帖子

0

精华

版主

Rank: 7Rank: 7Rank: 7

积分
3545
金钱
3545
注册时间
2015-11-5
在线时间
1095 小时
发表于 2017-7-4 14:15:15 | 显示全部楼层
Y-Hanxiao 发表于 2017-7-3 23:22
这个问题想清楚了,又一个新的问题,多个任务(比如三个)向一个队列(长度也是3)中发送消息,如何保证 ...

对于全局变量的安全使用,其实网上已有很明确的方法
为了避免读-改-写导致的全局变量问题的出现,一定要对变量做临界区保护,或者是关中断
楼上左工说的队列,其实核心也是用了OS的临界区做保护
生活不只有眼前的苟且,还有你看不懂的诗和永远到不了的远方!
回复

使用道具 举报

  离线 

9

主题

21

帖子

0

精华

初级会员

Rank: 2

积分
87
金钱
87
注册时间
2017-6-21
在线时间
29 小时
发表于 2017-7-9 21:23:04 | 显示全部楼层
正点原子公众号
楼主的资料哪里来的 我咋没有找到呢 可否分享一下
回复

使用道具 举报

  离线 

18

主题

92

帖子

0

精华

高级会员

Rank: 4

积分
730
金钱
730
注册时间
2012-3-26
在线时间
235 小时
发表于 2018-2-11 08:59:08 | 显示全部楼层
可是我看四轴飞行器里面FreeRTOS的例程不是还是使用了好多全局变量???
回复

使用道具 举报

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

本版积分规则




QQ|联系我们|手机版|官方淘宝店|新浪微博|微信公众平台|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2018-5-27 13:31

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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