ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Четверг
28 ноября
270899 Топик полностью
rezident (09.09.2011 02:07 - 02:10, просмотров: 182) ответил Алексей_Ш на Я про модель как-то подзабыл. Но попробую. Только не сейчас. А ругается он не на adda, а на &TAIV, типа адрес плохой.
Дык опять же см. определения в хедере msp430f2418.h. Там есть макросы, зависящие от выбранной модели памяти #ifdef __IAR_SYSTEMS_ICC__ #include "in430.h" #pragma language=extended #define DEFC(name, address) __no_init volatile unsigned char name @ address; #define DEFW(name, address) __no_init volatile unsigned short name @ address; #if __REGISTER_MODEL__ == __REGISTER_MODEL_REG20__ #define DEFA(name, address) __no_init void __data20 * volatile name @ address; #else #define DEFA(name, address) __no_init volatile unsigned short name @ address; /* only short access is allowed from C in small memory model */ #endif #define DEFXC volatile unsigned char #define DEFXW volatile unsigned short #if __REGISTER_MODEL__ == __REGISTER_MODEL_REG20__ #define DEFXA void __data20 * volatile #else #define DEFXA volatile unsigned short /* only short access is allowed from C in small memory model */ #endif Но поскольку TAIV расположен в нижней части Flash, то он определен как #define TAIV_ (0x012Eu) /* Timer A Interrupt Vector Word */ READ_ONLY DEFW( TAIV , TAIV_) То бишь после (макро)подстановки получается __no_init volatile unsigned short TAIV @ (0x012Eu); Поэтому компилятор Си должен обязан разместить тело обработчика прерывания, в котором идет обращение к TAIV, в "нижней" части Flash. Но поскольку вы пишете на ASM, то видимо это уже становится вашей собственной заботой. Либо переопределяйте тип самостоятельно, либо размещайте обработчик прерывания ниже границы 64к.