RTOS不同任务共享全局变量问题_每日热闻

面包芯语

2023-06-23 08:32:26

扫描关注一起学嵌入式,一起学习,一起成长

本期话题

群友在群里咨询的一个问题:Freertos 里高优先级的任务中改变了全局变量值,低优先级的任务中循环等待值的改变;为何高优先级任务里的值改变后,低优先级循环没有结束并向下执行呢?


(资料图)

高优先级任务中的代码,修改全局变量:

if(1000 <= Complete){update_flag = 1;printf("update_flag = [%d]\n”, update_flag);}vTaskDelay(10);

低优先级任务中的代码,判断全局变量:

while(!update_flag); // 判断......

聊一聊

如果你能想到关键词 volatile,那么恭喜你,你已经真正理解了这个关键词。

之前分享过相关的文章:嵌入式 C 语言经常提到的关键词 volatile

告诉这位小伙伴在全局变量定义的时候,加上 volatile。问题得到解决。好了,万事大吉。

显然,为了证实我们的猜想,我们进行逐步分析。

这个项目开启了编译一级优化。这样就解释通了,编译器开启了优化,并且变量定义没有添加关键词 volatile 。这两点组合起来导致问题发生。

while(!update_flag){printf("update_flag = [%d]\n”, update_flag);vTaskDelay(10);}

嵌入式 C 语言经常提到的关键词 volatile

【C语言】彻底搞懂内存屏障与volatile

觉得文章不错,点击“分享”、“赞”、“在看” 呗!

最新资讯

猜你喜欢

“疫”不容辞 火焰蓝的特殊“11·9”

2021-11

驴肉店里的培训班号称“考研包过”?济南警方侦破作弊案

2021-11

多地喊话!这类人拒不回国将注销户口!

2021-11

内蒙古民警暴雪中徒步8小时 寻回走失牛群

2021-11

浙江天台500多名视障者“重见天日”:好日子在光明中开启

2021-11

四川多所高校学子用“青春力量”助力疫情防控

2021-11

成都理工:三次全员核酸均为阴性 “三万人吃喝没人管”

2021-11

无辣不欢的年轻人 开始吃纯清汤火锅了?

2021-11