仕事で組み込み系のプログラムをしています。現在困っている現象に出くわしてしまいました。
現象:下記コードにおいてif文の条件を満たしているはずなのにif文を通らない
目指す機能:1マイコンのあるピンにパルスが入ってきたら外部割込みが働いてzcntをインクリメントする
2zcntが1になったら、かつpulsecntが20000を超えたら処理する。pulsecntは定期的に増加する
if文の前でブレイクポイントを張って変数を確認するとpulsecnt=20010、zcnt = 1にセットされています。しかし
if文をとおりません。
どなたか同じような現象に遭遇した人はいないでしょうか。
私の中で考えている仮設はこうです
仮説:外部割込みで使用した変数の値が変わっていも、main文には反映されない
コード:
/*外部変数の定義*/
uint8_t zcnt=0;
uint16_t pulsecnt= 0;
int main(void){
while(1){
pulsecnt = TIM2->CNT; /*レジスタ値の読み取り*/
if(pulsecnt> 20000 && zcnt == 1){
/*処理文*/
}
}
}
/*外部割込み関数*/
EXTI4_IRQ_handler(){
clearFlg(PA4); //割り込みフラグのクリア
zcnt++;
}
よろしくお願いします