看了网上 原子操作 临界段 volatile 可见性等概念,对于全局变量在前后台中共享问题还是有一些疑问。1.对于AVR 、51 单片机 是不是 访问或者赋值一个16位、32位的变量 对应的指令就是好几条的,分别操作高低字节 ?
2.例如 一个16位宽的变量在中断里写 ,主程序里读 需要加保护措施吗
下面设计是不是会导致当中断发生在执行 if(uwcnt>=1000)这条语句时读uwcnt时读到一个跳变的数据。或者单读单写一个超过总线宽度的变量 是不是就要保护了,要进行中断保存-> 关闭相应中断-> if(uwcnt>=1000)->恢复之前中断状态操作。那这样在循环里的频繁开关中断会影响系统实时性 所以这样程序设计是不是不合理?采用共享8位变量 单读单写是不是会解决读取到一个不是正常的数值的问题?可能问的有点乱 希望能解答下 或者哪里有相关资料
[C] 纯文本查看 复制代码 // 51 或avr 8位机
#include <stdint.h>
volatile unsigned short int uwcnt++;
main()
{
init()
while(1)
{
if(uwcnt>=1000)
{
led_on;
lcd();
}
}
//中断程序
ISR XXXX()
{
uwcnt++;
}
|