hga*_*abe 2 gcc interrupt msp430
我正在使用最新的CCS和MSP-GCC编译器.以下代码
#pragma vector=USCI_A1_VECTOR
__interrupt void USCI_A1_ISR(void)
{...isr}
这是TI宣布ISR-s的最新官方支持的方法不起作用,我得到以下编译器消息:
warning: ignoring #pragma vector  [-Wunknown-pragmas]
#pragma vector=USCI_A1_VECTOR
^
error: expected '=', ',', ';', 'asm' or '__attribute__' before 'void'
__interrupt void USCI_A1_ISR(void)
我也尝试过不同的方法,比如:
interrupt(USCI_A1_VECTOR) USCI_A1_ISR(void) {  //code goes here}
这给出了错误:
c:/ti/ccsv6/ccs_base/msp430/include_gcc/msp430f5529.h:5328:33: error: expected declaration specifiers or '...' before '(' token
#define USCI_A1_VECTOR          (47)                     /* 0xFFDC USCI A1 Receive/Transmit */
                                ^
../uart_printf.c:40:11: note: in expansion of macro 'USCI_A1_VECTOR'
interrupt(USCI_A1_VECTOR) USCI_A1_ISR(void)
          ^
这似乎工作:
__attribute__((interrupt(USCI_A1_VECTOR)))
void USCI_A1_ISR(void){ //code goes here }
我在这里错过了什么?
中断例程声明没有C标准(真正的坑).每个编译器都有自己的方法来完成它.
TI上个月重新推出了RedHat MSP430 GCC,没有时间对其进行调查.但对于旧的MSPGCC分支,您的最后一个示例应该是有效的.
MSPGCC还提供了一个包含文件,用于更好的编译器互操作:
#include <isr_compat.h>
ISR(USCI_A1, USCI_A1_ISR)
{
    // Code goes here
}
重要提示:从ISR名称中删除"_VECTOR"尾部
看一下isr_compat.h文件.它实际上是为了与市场上的所有编译器一起工作.如果您的编译器套件上没有任何类似内容,也许将它借入您的项目是个好主意.
| 归档时间: | 
 | 
| 查看次数: | 2470 次 | 
| 最近记录: |