This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

MSP430FR5994: 汇编add.w指令求解

Part Number: MSP430FR5994

我使用TA2R做0到192-1计数,用来触发ADC采样,并定义了如下2个宏:
#define ADC_TIMER_CNT_GET()                   (TA2R)
#define ADC_TIMER_CNT_SET(value)           (TA2R = value)
定义变量s16 T,T的范围是[-6,6];
做如下操作1:
u16 temp_cnt = ADC_TIMER_CNT_GET();
ADC_TIMER_CNT_SET(temp_cnt + T);
对应汇编如下:
mov.w &TA2R,R15
add.w R10,R15
mov.w R15,&TA2R
执行后读取TA2R的值正常。

做如下操作2:
ADC_TIMER_CNT_SET(ADC_TIMER_CNT_GET() + T);
对应汇编如下:
add.w R10,&TA2R
执行后读取TA2R的值,小概率会读到0或者191,同时丢失1次更新事件,此结果会导致我后续的所有ADC采样都滞后。

请问操作2的C语言写法是否合理,IAR翻译的汇编是否合理,是什么原因造成了计数值突变的情况呢?