当前位置: 首页 >  资讯 >  >  详情
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

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

关键词:

上一篇:吃草的猫咪
下一篇:最后一页