stdint.h Assembler messages: Error: unknown opcode 'typedef' Печать
Добавил(а) microsin   

При компилировании проекта 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__