При компилировании проекта AVR Studio в логе Build появляются сообщения наподобие:
c:\program files\atmel\avr tools\avr toolchain\bin\../lib/gcc/avr/4.6.2/../../../../
avr/include/stdint.h: Assembler messages:
c:\program files\atmel\avr tools\avr toolchain\bin\../lib/gcc/avr/4.6.2/../../../../
avr/include/stdint.h:121: Error: unknown opcode `typedef'
../types.h:12: Error: unknown opcode `typedef'
../types.h:13: Error: junk at end of line, first unrecognized character is `{'
../types.h:14: Error: unknown opcode `unsigned'
...
../types.h:18: Error: junk at end of line, first unrecognized character is `}'
../vars.h:29: Error: unknown opcode `extern'
...
make: *** [uart-asm.o] Ошибка 1
Build failed with 1 errors and 0 warnings...
Причина в том, что в ассемблерный код случайно подключен код на языке C. Чаще всего это какой-то заголовочный файл, в котором определены не допустимые с точки зрения ассемблера выражения.
Что можно сделать:
1. Отследить цепочку включений заголовочных файлов до компилируемого файла ассемблера, где проявляется ошибка, и исключить включение кода, который при компилировании ассемблером дает ошибку.
2. В тех заголовочных файлах, которые нельзя исключить из компиляции ассемблера, любой код на C должен быть обрамлен оператором условной компиляции препроцессора #ifndef __ASSEMBLER__/#endif, например:
#ifndef __TYPES__
#define __TYPES__
#ifndef __ASSEMBLER__
// Код дальше не попадет компилятору ассемблера,
// и будет обработан только компилятором языка C.
#include < inttypes.h >
#define u8 unsigned char
#define u16 unsigned int
#define u32 uint32_t
#define false 0
#define true 1
typedef struct _eeparam
{
u8 seedAA;
u8 relaystate; //состояние выводов порта реле
// .. тут можно добавить свои параметры
u16 crc;
}Teeparam;
#endif //__ASSEMBLER__
#endif //__TYPES__
|