質問: H8SX/1655マイコンで、 グローバル変数が動作しなくて困っています。 周りの人に聞いても原因がわからず、ネットにも解決策を見つけれず 藁をもすがる気持ちで投稿します。 どうか皆様のお知恵をお貸しください。
回答: ソースで見る分には問題無さそうだねぇ。 この手の話はちょっとした記述ミスとかオブジェクトの取り違えとかの単純ミスであるパターンが多いんだけど... 試してみるとすれば、 ・アセンブルリストを出力して動作を追ってみる。 ・切り替えで変わる部分を可能な限り少なくして試す。例えば、 /* 以下一文をコメントアウトすればローカル */ #define GLV #ifdef GLV volatile unsigned long count=0; /* グローバル変数は0に初期化されることが決まっているけど気になるならおまじない */ #endif void main(void){ unsigned long i; #ifndef GLV volatile unsigned long count=0; #enidf PM.DDR = PM.DDR |0x08; PM.DR.BIT.B3 = 0; count=0; glv_count=0; while(1) { for (i = 0; i < 100000; i++); //wait count++; if(count>20){ PM.DR.BIT.B3 = ~PM.DR.BIT.B3;} //invert LED_state if(count>30){ count=0;} } } だったらどうなるか、とか。