Atmel Studioでdelay関数でエラー

このQ&Aのポイント
  • Atmel Studioでエラーが発生する
  • プログラム中のdelay関数に関するエラー
  • 解決方法の指示をお願いします
回答を見る
  • ベストアンサー

Atmel Studioでdelay関数でエラー

現在Atmel Studio6.2でATmega88のプログラミングをやっています。 LEDを1秒間隔で点滅させるプログラムをやってみてます。 http://sourceforge.jp/projects/cc1101driver/scm/svn/tree/2510/branches/CC1101_source_ATmega88_AVRS6/AVRGCC1/ このプログラムでdelay関数として #include <util/delay.h> このヘッダーファイルをインクルードして int main() { hw_setup(); while(1) { B_CTL_HIGH; _delay_ms(1000); B_CTL_LOW; _delay_ms(1000); } } このようなプログラムを組んで見たところ次のようなエラーが出てきます。 (エラー内容) Error 1 __builtin_avr_delay_cycles expects a compile time integer constant c:\program files (x86)\atmel\atmel toolchain\avr8 gcc\native\3.4.1056\avr8-gnu-toolchain\avr\include\util\delay.h 163 28 CC1101_ATmega88 このエラーの解決方法をご教示頂きますよう、お願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
  • kabasan
  • ベストアンサー率44% (264/588)
回答No.1

質問で直接書かれている   _delay_ms(1000); だけならエラーにならないはずです。 実際のソースには   _delay_ms(msec) という別の関数を書いていますね。そこがエラーなのです。 msecは関数の引数であり、コンパイル時に値を確定できないのでエラーとなります。 AVRLibcの説明より引用 「これらの関数を意図した通り動かすには、コンパイラの最適化を必ず有効にし、 遅延時間はコンパイル時には必ず既知の定数でなけれなりません」

techhouse
質問者

お礼

回答頂きありがとうございます。 確かにmsecの場合はエラーになりますが、固定値の場合は問題なくコンパイルできました。 助かります。 AVRLibcのマニュアルをちゃんと読んでみたいと思います。 http://www.atmel.com/webdoc/AVRLibcReferenceManual/index.html

関連するQ&A

  • Atmel Studioのeepromアドレス

    現在Atmel Studio6.2でATmega88pマイコンのプログラミングを行っています。 https://sourceforge.jp/projects/cc1101driver/scm/svn/blobs/head/branches/test002_AVRS6_20140819/test02/test02/src/main.c AVR studio4.19 + winAVR Cコンパイラで作成していたコードをAtmel Studio6.2に移してコンパイルを行ったところ、EEPROMアドレスへのデータ書き込みが逆になってしまう現象が起きました。 #define EEPROM __attribute__((section(".eeprom"))) ctl_data EEPROM gctl_data; reg_slave EEPROM greg_slave[100]; int EEPROM eprom_level[14]; char EEPROM eprom_fixid[3]; char EEPROM test_mode; char EEPROM monitor_state; int EEPROM wdt_cnt; int EEPROM cnt_loop_break; このようなコードを”AVR studio4.19 + winAVR”の時からしているのですが、このときは ctl_data EEPROM gctl_data; こちらがEEPROMアドレスの0x0000番地から始まっていたのですが、Atmel Studio6.2の場合は、 int EEPROM cnt_loop_break; こちら側が0x0000番地に配置するようになっていて、逆になってしまっています。 この場合、一番最初のアドレスに割り当てするには、コードも逆にして記述する必要がありますでしょうか? どうぞ、ご教示頂きますようお願いいたします。

  • AVRプログラム 関数から戻ってこない

    AtmelStudio6 で、ATmega64A向けにプログラム行なっているのですが、 すごく、単純なところで困っています。 ICEは、AVR JTAGICE です。 main() のみで処理をさせると普通に動くのですが、関数に飛ばすと飛んだ先の 関数から戻ってこなくなるのです。 ツールかレジスタの設定が不十分なのかもしれません。 -- 問題のプログラム -- #include <avr/io.h> #include <avr/iom64a.h> #include <avr/interrupt.h> #include <util/delay.h> void test(void){ DDRA = 0xC0;//<ここは、実行される }//デバッガで見ると、ここで止まっている。 int main(void) { cli();//この関数はライブラリにあるので戻ってくる test();//この関数から帰ってこない // DDRA = 0xC0; //test();の内容をここに書くと、正常に処理して通過する。 PORTB = 0xFF; //B出力レジスタ DDRB = 0xF7; //B方向レジスタ PORTC = 0xFF; DDRC = 0xDB; while(1) { //TODO:: Please write your application code LEDを点滅させるプログラム <略> } } ------------------------------------------------------- 何方か心当たりのある方は居ないでしょうか?

  • AVRマイコンのdelayコマンド

    最近C言語からAVRに変更して、delay_ms(1000);のようなコマンドを入力したいのですがどのようなプログラムなのですか?1秒ちょっきり計れるプログラムで良いです。

  • AVRでサーボモータの制御プログラム

    ATmega168を購入してWinAVRでプログラムを書いています。GWServoのS03T 2BBMGと書かれているサーボモーターを動かそうとしています。パルスを送ればいいのかなと思ってdelayと出力を使ってPWMしているのですがまったく制御できません。どういうプログラムを組めばいいのでしょうか?AVRに外部の発信子はつけていません。ATmega168に内蔵されている発振子でしています。というかそれでいいのでしょうか?ごちゃごちゃですが、何か動かすためのアドバイスをください。お願いします。

  • AVR StudioのEEPROMのhexファイル

    いままでAVR Studio4というAtmelマイコンの開発環境をwindows 7のPCで使用していました。最近、PCを買い換えてwindows8になってからマイコンの書き込みで使っていたUSB接続のAVRICEデバッガがwindows8のドライバで対応していないなどがあり、AVR Studio6をインストールしたらこれらのデバッガが使えるようになったので使っていました。 しかし、複数のAtmega88のEEPROM領域に初期値として書き込んでいたhexファイルがあったのですが、なぜかAVR Studio6でダウンロード使用とすると書き込みがエラーしたりします。 まったく同じファイルをAVR Stuio4でダウンロード使用とするとこれは可能でした。 このEEPROMへのファイルのダウンロードに関してVer4とVer6ではなにか仕様に変化がありましたでしょうか? ご存じの方いらっしゃいましたらご教授頂きますようお願い致します。

  • AVR Studio 6.2で書き込みができない

    現在AVR Studio6.2でATmega88Pマイコンのプログラミングを行っています。JTAGICE3を使用してリアルタイムデバッグをおこなっていました。一旦Device Programming機能でファームウェアをATmega88に書き込もうと思ったのですが、ATmega88とJTAGICE3の接続を確認するため、Device signatureを読み取ろうとしたのですが、次のようなエラーが出てきます。 Unable to enter programming mode. Please verify device selection,interface settings,target power and connections to the target device. Look in the details section for more information. たぶんなんですが、今までデバッグを行っていたので、デバッグのヒューズビットがONの状態になっているため、書き込みモードに移行できていないと思われるのですが、 AVR Studio4の場合はデバッグモード時にデバッグモードを無効にする機能があったと思うのですが、Atmel Studio6.2ではこの機能はありますでしょうか? http://d.hatena.ne.jp/oibore_shinsuke/20130421/1366530168 こちらのサイトの方も同じような症状を言っているように思うのですが、こちらの方法をやってみましたが、私の場合は解決できていません。 どうぞ、ご教示頂きますようよろしくお願い致します。

  • avr studioのビルドエラーについて

    avr studio 6にてプログラミングしようとしている超初心者です 書き込み機器をmkII、atmega328pに書き込もうとしております しかし、エラーが出てしまい、どうしてもビルドが成功できません。 質問なのですが、こちらのサイト(http://www.diotown.com/creative/2011/05/arduino-de-pwm-controller.h...)にて行っているものを そのままプログラミングしてみようと リンクについていたソース(http://www006.upp.so-net.ne.jp/neueziel/pp/powerpack_r.txt) を #include <avr/io.h>からコピーしてビルドしてみました。 ですが、ビルドがエラー15個、警告5個出てしまいました。 そのうちの数か所を記載しますのでどうすればよいかアドバイスよろしくお願いします。 説明 行 列 プロジェクト (1)エラー 1 unknown type name 'byte' 190 1 VVVF (2)エラー 5 'OUTPUT' undeclared (first use in this function) 291 17 VVVF (3)エラー 9 'HIGH' undeclared (first use in this function) 330 20 VVVF (4)エラー 12 'word' undeclared (first use in this function) 582 26 VVVF (5)エラー 13 expected ';' before 'light' 582 31 VVVF (6)エラー 14 'B00010001' undeclared (first use in this function) 583 14 VVVF (7)警告 4 implicit declaration of function 'pinMode' [-Wimplicit-function-declaration]291 2 VVVF (8)警告 7 implicit declaration of function 'swrite' [-Wimplicit-function-declaration]327 4 VVVF (9)警告 8 implicit declaration of function 'digitalWrite' [-Wimplicit-function-declaration]330 3 VVVF (10)警告 10 implicit declaration of function 'delay' [-Wimplicit-function-declaration] 332 3 VVVF (11)警告 11 implicit declaration of function 'analogRead' [-Wimplicit-function-declaration]344 4 VVVF 以上ですよろしくお願いします

  • AVRマイコン ビルドエラー

    AVRマイコンを #include <avr/io.h> int main(void) { DDRD =0b11111111; PORTD=0b11111111; } で、ビルドしようとしているのですが、 ../test3.c:0: error: MCU `atmega88p' supported for assembler only と、その後に ../test3.c:5: error: `DDRD' undeclared (first use in this function) 等と、エラーが出てビルド出来ません。 どうすればいいのでしょうか? 回答お願いします。

  • Win10 Avr Build エラー

    Win10 AvrStudio4.19 で ASM は Build Run Enter で 正常ですが GCC を Build Run Enter とすると " AVRStudio MFC Application は動作を停止しました。{プログラムの終了}" と表示が でる HEX ファイルは一応できているがシミレーションに移れない。アプリは AvrStudio4.19 をインストール してから-toolchain-3.4.1 を インストール してあります。Web で ビルドエラーで検索すると 結果はStudio4をインストしtoolchain-3.4.1 をインストすれば GCC を 正常にコンパイルできました。の内容で 終わっているもの ばかりです。AVRStudio MFC Application は動作を停止しました。ここの異常を修復する方法はないでしょうか。 試した GCC ファイル 下記 //**TI2313 #include <avr/io.h> int main() { DDRD = 0b00000001; while(1) { PORTD = 0b00000001; } return 0; }

  • apache make時のエラーで困っています

    お世話になります。 apache をソースからインストールしなければならないのですが、以下のエラーが出ており、解決できません。お力をお借りできますでしょうか。 ■エラー内容------------------------------------------------- In file included from /usr/include/apr-1/apr_ldap.h:120, from /home/***/httpd-2.2.6/include/util_ldap.h:31, from exports.c:38: /usr/include/apr-1/apr_ldap_init.h:112: error: expected declaration specifiers or '...' before 'LDAP' In file included from /usr/include/apr-1/apr_ldap.h:121, from /home/***/httpd-2.2.6/include/util_ldap.h:31, from exports.c:38: /usr/include/apr-1/apr_ldap_option.h:204: error: expected declaration specifiers or '...' before 'LDAP' /usr/include/apr-1/apr_ldap_option.h:226: error: expected declaration specifiers or '...' before 'LDAP' In file included from exports.c:38: /home/***/httpd-2.2.6/include/util_ldap.h:82: error: 'LDAP_DEREF_NEVER' undeclared here (not in a function) /home/***/httpd-2.2.6/include/util_ldap.h:83: error: 'LDAP_DEREF_SEARCHING' undeclared here (not in a function) /home/***/httpd-2.2.6/include/util_ldap.h:84: error: 'LDAP_DEREF_FINDING' undeclared here (not in a function) /home/***/httpd-2.2.6/include/util_ldap.h:85: error: 'LDAP_DEREF_ALWAYS' undeclared here (not in a function) /home/***/httpd-2.2.6/include/util_ldap.h:90: error: expected specifier-qualifier-list before 'LDAP' make[2]: *** [exports.lo] エラー 1 make[2]: ディレクトリ `/home/***/httpd-2.2.6/server' から出ます make[1]: *** [all-recursive] エラー 1 make[1]: ディレクトリ `/home/***/httpd-2.2.6/server' から出ます make: *** [all-recursive] エラー 1 ------------------------------------------------------------------ OS:openSUSE 10.2 apacheのソース:httpd-2.2.6 ディレクトリ /home/***/下にソースを展開&makeしています。 openldapのインストールが必要かと思い、openldap2 2.3.27をインストールしてみましたが、変化がありませんでした。 また、configureオプションが問題かと思い、オプションを何もつけない状態で試しましたが、やはり同じエラーになります。 別環境のopenSUSE 10.0では、同じソースを使って問題なく、make、installができます。 原因として何が考えられますでしょうか。 よろしくお願いいたします。