Регистры портов Arduino в Eclipse не работают

Я создаю приложение Arduino на C с Eclipse и плагином 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
}
}

2

Решение

Это многоуровневые макросы, которые кодируют прямой изменчивый доступ к местоположениям SFR.

Они индивидуально определены в одном из ассортимента заголовочных файлов для микросхем, которые будут включены в avr / io.h, когда будут проинформированы о конкретном варианте процессора, который вы используете.

Обычно это делается с -mmcu например, флаг для avr-gcc

-mmcu=atmega328p

Однако, если плагин Eclipse самостоятельно проходит по источникам проекта, пытаясь выдать вам консультативные ошибки, он может оказаться недостаточно умен, чтобы превратить это в определение (вы можете получить Eclipse, утверждающий ошибки, даже когда gcc доволен). Чтобы обойти это, вам может понадобиться явно определить тип процессора над включением в вашем коде или в некоторой конфигурации для Eclipse. Например:

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

Обратите внимание, что это может вызвать проблемы, если вы позже измените тип процессора! И даже как есть, это немного сомнительно, поскольку есть два потенциальных имени для каждого процессора.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]