
マイコンのメインルーチン内でwhile(1)文を用いてループしたとき、正常な動作をしない事があります。
使用しているマイコンはAVRです。
具体的には
各種インクルードファイル
int temp =0;
//tempはタイマー割り込みによって加算される
int main (void)
{
初期設定
while(1)
{
if (temp >= 50)
{
全割り込み禁止
LED出力トグル
temp =0;
全割り込み許可
}
}
}
と記述するとwhileループ内のif分岐がうまく処理されない事があります。
この時whileループ内に1usのdelayを入れると正常に動作します。
具体的には
int main (void)
{
初期設定
while(1)
{
if (temp >= 50)
{
全割り込み禁止
LED出力トグル
temp =0;
全割り込み許可
}
_delay_us(1);
}
}
のように記述すれば問題なく動きます。
このような症状の原因としては何が考えられますでしょうか?
No.2ベストアンサー
- 回答日時:
割り込みで値が変化する場合、
コンパイラにそれを教えないといけません。
volatile int temp =0;
にしてみては?
変数temp にvolatileをつけてみたところ、delayなしでも正常に動作するようになりました。
的確なご回答を頂きましてありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
人気Q&Aランキング
-
4
実行した後、どうしてもフリー...
-
5
CPU負荷率の安全な上限と計...
-
6
USB機器からのデータ受信による...
-
7
割り込み中に例外異常
-
8
H8マイコンで割り込みが任意の...
-
9
h8/3052 GDB-stub上でのプログ...
-
10
auの携帯で「パケット通信中...
-
11
アセンブラのタイマー割り込み
-
12
割り込みベクタは誰が設定する...
-
13
PIC16F84AのRBポート変化割り込...
-
14
VB.NET スレッドからのイベント...
-
15
アプリケーションをフルスクリ...
-
16
ゲームプログラマーは優秀なの?
-
17
Timerコントロールによる動作の...
-
18
VB6でSendKeyを利用したTab移動...
-
19
CPUの処理量を減らすコーデ...
-
20
システムの割り込みについて シ...
おすすめ情報