2

Eclipse と Arduino プラグインを使用して、C で Arduino アプリケーションを構築しています。古いコードでは、pinMode と digitalWrite を使用していました。しかし、ご存知のように、これはより多くのスペースを使用します。そのため、ポート操作を使用してコードを再構築しています。それが何かわからない場合は、ここで確認できます: http://www.arduino.cc/en/Reference/PortManipulation

私がしたことを説明します。

pinMode が立っているところを、次のように変更しました。DDRD = 0b11111111; そして、digitalWrite が立っているところを PORTD = 0b10000000 に変更しました。以下の私のコードでそれを見ることができます。

Eclipse で、DDRD と PORTD の解決されていないシンボルのエラー (DDRD と PORTD という単語を赤い線で強調表示) が表示されますが、プログラムは正常にビルドおよび実行されています。これを解決するにはどうすればよいですか?

#include <avr/io.h>
#include <util/delay.h>

int main()
{
    UCSR0B = 0;         // disconnect pins 0 and 1 from USART (Serial)
    DDRD = 0b11111111;  // all pins of port D as output

    for(;;)
    {
        PORTD = 0b10000000; // Pin 7 on
        _delay_ms(500);     // Wait
    }
}
4

2 に答える 2

0

これらは、SFR ロケーションへの直接の揮発性アクセスをエンコードするマルチレベル マクロです。

これらは、使用している特定の CPU バリアントが通知されたときに avr/io.h が含めるチップ固有のヘッダー ファイルの組み合わせの 1 つで個別に定義されます。

通常、これは-mmcuavr-gcc へのフラグで行われます。たとえば、

-mmcu=atmega328p

ただし、Eclipse プラグインがプロジェクト ソースを介して独自のパスを実行し、アドバイザリ エラーを表示しようとする場合、それを定義に変換するほどスマートではない可能性があります (gcc が正常な場合でも、Eclipse がエラーを要求する可能性があります)。これを回避するには、コードまたは Eclipse の構成で、インクルードの上に cpu タイプを明示的に定義する必要がある場合があります。例えば:

#ifndef __AVR_ATmega328P__ 
#define __AVR_ATmega328P__ 
#endif
#include <avr/io.h>

後でプロセッサの種類を変更すると、問題が発生する可能性があることに注意してください。そのままでも、各プロセッサには 2 つの潜在的な名前があるため、少し不確かです。

于 2013-09-12T14:44:21.067 に答える