
マイコンのメインルーチン内で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ランキング
-
このレジの並び方は間違ってま...
-
スーパーのレジで並んでいたら...
-
割り込みハンドラの処理の簡素化
-
ショッピング
-
CPU負荷率の安全な上限と計...
-
PIC12F683から移植
-
H8/3052F/IRQを使った割り込み
-
電車で待機列の割り込みについ...
-
Macターミナルで実行中のプログ...
-
メモリが不足しています(VBA)
-
VBAの配列サイズとメモリに関して
-
C++ 画像をダウンロード
-
家電製品の電力周波数を変える機械
-
パソコンの演算速度について
-
TCP/IP通信時のサーバーからの受信
-
プロセスIDの取得方法について
-
メッセージボックスのボタン名変更
-
64BitOSについて
-
DoEvents関数って何?
-
C#でのbatファイル実行結果取得
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
このレジの並び方は間違ってま...
-
電車で待機列の割り込みについ...
-
CPU負荷率の安全な上限と計...
-
PIC16F84Aから16F628Aの...
-
【組込み】割り込み中のstatic...
-
コールバック関数について
-
マイコン C言語 割り込み処理...
-
USB機器からのデータ受信による...
-
スーパーのレジで並んでいたら...
-
VB.NET スレッドからのイベント...
-
割り込みについて
-
一定時間操作がなかったら、と...
-
PICマイコンでエンコーダパルス...
-
CPUの処理量を減らすコーデ...
-
pic 複数の割り込み関数 切り分...
-
PICマイコン 割り込み実行時間...
-
ロータリーエンコーダがうまく...
-
SH7727(SH3-DSP)
-
VBAのDoEventsが上手く動きません
-
割り込みの入り方。考え方。
おすすめ情報