Эта проблема кажется из-за того, что внутри файла io.h
нет никакого конкретного включения файла для данного типа MCU __AVR_ATmega164PA__
; есть только: __AVR_ATmega164P__
и __AVR_ATmega164A__
. Я думаю, что код для 164PA должен быть скомпилирован как 164P.
Это часть кода внутри файла io.h
#elif defined (__AVR_ATmega163__)
# include <avr/iom163.h>
//------------------------------------------------------------ To note
#elif defined (__AVR_ATmega164P__) || defined (__AVR_ATmega164A__)
# include <avr/iom164.h>
//--------------------------------------------------------------------
#elif defined (__AVR_ATmega165__) || defined (__AVR_ATmega165A__)
# include <avr/iom165.h>
Если вы видите вывод компилятора, вы можете отметить несколько предупреждений:
In file included from avr164.c:3:0:
--------------------------------------------> To note
/usr/lib/avr/include/avr/io.h:428:6: warning: #warning "device type not defined" [-Wcpp]
# warning "device type not defined"
^
To note <---------------------------------------------
avr164.c: In function ‘main’:
avr164.c:8:1: error: ‘DDRC’ undeclared (first use in this function)
DDRC = 255;
^
avr164.c:8:1: note: each undeclared identifier is reported only once for each function it appears in
avr164.c:28:1: error: ‘PORTC’ undeclared (first use in this function)
PORTC=255;
^
Первое предупреждение: io.h:428:6: warning: #warning "device type not defined"
указывает вам, что препроцессор проанализировал файл io.h
до строки, которая испускает предупреждение.
В следующих строках файла io.h
вы можете увидеть, где выдается предупреждение.
#elif defined (__AVR_M3000__)
# include <avr/iom3000.h>
#else // <<<---------------------- To note!
// To note -------------------------------
# if !defined(__COMPILING_AVR_LIBC__)
# warning "device type not defined"
# endif
// To note -------------------------------
#endif
Излучаемое предупреждение означает, что вы что, вероятно, не будет ни одной библиотеки для указанной цели (и «к счастью» для моей отладки цели указует также конец секции интереса).
Если вы пытаетесь скомпилировать SW без управления PORTC
и DDRC
(комментируя их использование), вы должны иметь результат, как этот:
In file included from avr164.c:3:0:
/usr/lib/avr/include/avr/io.h:428:6: warning: #warning "device type not defined" [-Wcpp]
# warning "device type not defined"
^
---------------------------> Note
/usr/lib/gcc/avr/4.8.2/../../../avr/bin/ld: cannot find crtm164pa.o: No such file or directory
collect2: error: ld returned 1 exit status
Note <---------------------------
Результат означает, что вы там не crtm164pa.o файл в среде компоновщика. (И это еще одна проблема!)
Я использовал: АРН-GCC (GCC) 4.8.2
Выглядит просто как Avr-Libc выпуска (в моей копии, m164pa отличается от других 164s , но объявляет эти порты). Убедитесь, что ваша версия обновлена, и если она все еще не работает, сообщите об ошибке на http://www.nongnu.org/avr-libc/ - или просто используйте рабочие заголовки, Atmel даже не перечисляет разницу между A и ПА. –