Mak*_*RBI 1 c embedded volatile interrupt-handling
我正在使用nrf52微控制器(CORTEX 34F)处理器.我对主循环进行了变量检查,在主循环和定时器中断程序中都进行了修改.
主循环检查变量是否为真:
执行条件代码
将变量设置为false
没有volatile
关键字,代码似乎不起作用,但当我将变量设置为volatile
它似乎工作,但我不相信,因为:
任何答案,请;
if true执行正文代码2.列出项目
Cli*_*ord 10
你对这个volatile
关键词有误解; 具体地说,它是不相关的缓存-缓存的一致性是由硬件完全处理,volatile
对没有效果.
目的volatile
是防止编译器生成假定值无法更改的代码.C语言不提供对执行线程的支持,并且生成代码就好像有一个线程一样; 如果编译器可以在单个执行线程内观察到某个变量尚未被显式修改,则它可以删除显式读取并使用已知值(例如存储在寄存器中).
main()
函数中的代码"不知道"在读取之间可能发生中断,因此可以优化读取.该volatile
关键字指示编译器生成代码来显式读取内存.无论这种方式或其他方式是否导致高速缓存命中或未命中或者根本没有高速缓存 - 这都是硬件问题.
您可以从Embedded.com上的volatile关键字简介中获益.它涵盖了这个问题.