关中断可行,但是效率不好,还容易丢触发信息。
所以中断开始的时候先保护用到的寄存器,中断返回前再恢复啊。
我对你贴的汇编不熟,猜想开头ST两句是把R16和R17压栈,后面的LD是恢复R16,R17原来的数据。这样中断退出后,仍然不会影响到普通模式下寄存器的应用。
至于原子操作,我的理解是操作数的位数不大于cpu字长就可以了吧,不然处理了到一半,另一个线程又来处理,这样会导致计算不计算不正确,这个时候需要加锁。
比如8位的cpu处理16位的数据:
short int a;
线程1:
a = 0x1111; // 这时候分2步,一次一个字节
线程2:
a = 0x2222;
不锁定的话,有可能使a变为 0x1122,或0x2211 |