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__
|