首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Mspgcc中声明中断处理程序(ISR)?

如何在Mspgcc中声明中断处理程序(ISR)?
EN

Stack Overflow用户
提问于 2013-03-19 21:27:41
回答 2查看 7.9K关注 0票数 10

在mspgcc中声明中断处理程序的首选方法是什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-11-17 18:01:17

只是为了澄清一下,因为这是Google的早期结果。

代码语言:javascript
复制
__attribute__((__interrupt__(TIMER0_A0_VECTOR)))
void __isr_5(void)
{
        ...
}

目前的GCC (我相信这就是arvindpdmn评论的)在使用上述语法时仍然出现错误。

代码语言:javascript
复制
internal compiler error: in msp430_attr, at config/msp430/msp430.c:1835
 {
 ^

report of this in the TI E2E community之后提出了一个问题,但表示问题仍处于“计划”状态,甚至不清楚跟踪器属于谁。(您可以通过上述链接中的帖子访问该问题。)

查看代码,显然会引发错误,因为唯一可能具有参数的属性是interrupt属性。

事实上,如果省略了前导和后面的下划线,编译就可以正常工作。

这里是正确的语法!

代码语言:javascript
复制
__attribute__((interrupt(TIMER0_A0_VECTOR)))
void name_does_not_matter(void)
{
        ...
}

实际上,这个属性是documented in the official GNU GCC documentation。回想起来,很不清楚下划线最初是从哪里来的。因此,基本上,这里唯一的问题是错误消息非常缺乏信息性。

票数 5
EN

Stack Overflow用户

发布于 2013-03-19 21:27:41

请注意,此信息适用于MSPGCC v4.6.3,该版本早于MSPGCC的Ti/Redhat/SOMNIUM端口,该端口现在随code composer studio一起分发。

感谢Mspgcc-users邮件列表的Peter Bigot回答这个问题。

有两种可能性:

A.使用Code composer studio样式语法(具有可移植到CCS的额外好处):

代码语言:javascript
复制
#pragma vector=TIMER0_A0_VECTOR    
__interrupt void
ta0cc0_isr (void)

(请注意,这是在Mspgcc版本20120406左右引入的)。

B。使用原生的gcc语法:

代码语言:javascript
复制
static void
__attribute__((__interrupt__(TIMER0_A0_VECTOR)))
isr_cc0_TA0 (void)

C.正确命名函数,以便将其包含在向量表中(对于ASM函数很有用)。

interrupt属性将函数命名为__isr_X,其中X是中断与向量表start之间的字偏移量(等于中断属性参数的值除以2)。

这些__isr_X符号用于初始化crt0ivtbl.o中的矢量表。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15500826

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档