を検索するようにしてください教えてどのように、私は単純に行くだろう。しかし、私が上記のコマンドをMakefileに入れるとすぐに、DDRC
、PC2
、およびPORTC
というコンパイルエラーが返されます(下のエラーチャンクを参照)。これらの定数はavr/io.hで定義されているので、ヘッダファイルを指すように-Iパラメータを設定しようとしましたが、成功しませんでした。ここに私のMakefileは次のとおりです。は、私はシンプルなAVRのCプログラムをコンパイルしたい場合はヘッダファイル
CC=avr-gcc
INCLUDE=-I/usr/avr/include
CCFLAGS+=$(INCLUDE)
build: avr.o
$(CC) -mmcu=atmega2560 -Os avr.c -o avr.o
私は同様の問題hereを見つけましたが、私は解決策を適用する幸運ではなかったです。私は問題がavr-gcc
にあり、必要なライブラリが見つからないと思っています。私は-I
ディレクティブがそれを並べ替えると思いました。しかし、私は見つけることができない愚かな間違いをしているようです。ヘッダーファイルのあるMakefileを伝える正しい方法は何でしょうか?
make build
を呼び出したときにのみ起こるエラーメッセージ:
avr.c: In function 'main':
avr.c:17:5: error: 'DDRC' undeclared (first use in this function)
DDRC |= 1<<PC2; /* PC2 will now be the output pin */
^~~~
avr.c:17:5: note: each undeclared identifier is reported only once for each function it appears in
avr.c:17:16: error: 'PC2' undeclared (first use in this function)
DDRC |= 1<<PC2; /* PC2 will now be the output pin */
^~~
avr.c:19:9: error: 'PORTC' undeclared (first use in this function)
PORTC &= ~(1<<PC2);/* PC2 LOW */
^~~~~
make: *** [<builtin>: avr.o] Error 1
*** Failure: Exit code 2 ***
avr.c
私はmake
を使用してコンパイルしようとしています:あなたのメイクファイルで
#define F_CPU 100000000
#include <avr/io.h>
#include <util/delay.h>
void sleep(uint8_t millisec)
{
while (millisec) {
_delay_ms(1);/* 1 ms delay */
millisec--;
}
}
int main()
{
DDRC |= 1<<PC2; /* PC2 will now be the output pin */
while (1) {
PORTC &= ~(1<<PC2);/* PC2 LOW */
sleep(100);/* 100 ms delay */
PORTC |=(1<<PC2); /* PC2 HIGH */
sleep(100);/* 100 ms delay */
}
return 0;
}
は、注:ledblink.cとavr.cは同じではありません(少なくとも名前は異なります)。私はあなたの声明を信じていません、それは同じコマンドがMakefileで使われるとき、それはコンパイルされません。 Makefile(CC、INCLUDE、CCFLAGSはありません)と同じコマンドを使用して、それが動作するかどうかを教えてください。 – Jens
ledblink.c/avr.cが私のコピー貼り間違いでした - 質問でそれを修正しました。 2番目のビット、はい、そうです。それは問題であったCCではなく、むしろ 'build:avr.o'でした。私はそれを 'build:'に置き換えました。そして今コンパイルされます。私はちょうどこの場合は私に無関係と思われるエラーメッセージでうんざりしています。助けてくれてありがとう! – chao