gpt4 book ai didi

gcc - 使用 msp-gcc 的 MSP430 中断例程无法编译

转载 作者:行者123 更新时间:2023-12-01 21:58:48 26 4
gpt4 key购买 nike

我正在使用带有 MSP-GCC 编译器的最新 CCS。代码如下

#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 文件。它实际上旨在与市场上的所有编译器一起使用。如果您的编译器套件中没有类似的东西,也许将其借用到您的项目中是个好主意。

关于gcc - 使用 msp-gcc 的 MSP430 中断例程无法编译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26288075/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com