当前位置: 首页 > 市场

全球通讯!RTOS不同任务共享全局变量问题

发布时间:2023-06-23 08:19:54 来源:面包芯语

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

本期话题

群友在群里咨询的一个问题: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

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

标签:

Copyright   2015-2022 南非质量网 版权所有  备案号:沪ICP备2022005074号-13   联系邮箱:58 55 97 3@qq.com