アプリ版:「スタンプのみでお礼する」機能のリリースについて

現在Atmel Studio6.2でATmega88のプログラミングをやっています。

LEDを1秒間隔で点滅させるプログラムをやってみてます。

http://sourceforge.jp/projects/cc1101driver/scm/ …


このプログラムでdelay関数として

#include <util/delay.h>

このヘッダーファイルをインクルードして


int main()
{

hw_setup();


while(1)
{
B_CTL_HIGH;
_delay_ms(1000);
B_CTL_LOW;
_delay_ms(1000);
}
}



このようなプログラムを組んで見たところ次のようなエラーが出てきます。


(エラー内容)

Error1__builtin_avr_delay_cycles expects a compile time integer constantc:\program files (x86)\atmel\atmel toolchain\avr8 gcc\native\3.4.1056\avr8-gnu-toolchain\avr\include\util\delay.h16328CC1101_ATmega88



このエラーの解決方法をご教示頂きますよう、お願い致します。

A 回答 (1件)

質問で直接書かれている


  _delay_ms(1000);
だけならエラーにならないはずです。

実際のソースには
  _delay_ms(msec)
という別の関数を書いていますね。そこがエラーなのです。
msecは関数の引数であり、コンパイル時に値を確定できないのでエラーとなります。

AVRLibcの説明より引用
「これらの関数を意図した通り動かすには、コンパイラの最適化を必ず有効にし、
遅延時間はコンパイル時には必ず既知の定数でなけれなりません」
    • good
    • 0
この回答へのお礼

回答頂きありがとうございます。
確かにmsecの場合はエラーになりますが、固定値の場合は問題なくコンパイルできました。

助かります。

AVRLibcのマニュアルをちゃんと読んでみたいと思います。

http://www.atmel.com/webdoc/AVRLibcReferenceManu …

お礼日時:2014/08/20 09:46

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!