近日使用F4发现一个有趣现象,一个十分简单的语句(在F1中已经通过的)计算结果不对。
这是一个利用TIM2做1ms定时中断的代码:
void TIM2_IRQHandler(void) {
if (TIM2->SR & TIM_IT_CC1) {
TIM2->SR = ~TIM_IT_CC1;
TIM2->CCR1+= 8400; //8.4MHz 1ms
}
}
改为下面的代码就Ok了
void TIM2_IRQHandler(void) {
u16 TT = 0;
if (TIM2->SR & TIM_IT_CC1) {
TIM2->SR = ~TIM_IT_CC1;
TT = TIM2->CCR1;
TIM2->CCR1= TT + 8400; //8.4MHz 1ms
}
}
优化:Medium
读了一下反汇编看不出什么问题。 |