在mspgcc中声明中断处理程序的首选方法是什么?如何在Mspgcc中声明一个中断处理程序(ISR)?
8
A
回答
3
只是为了澄清,因为这是谷歌早期的结果。
__attribute__((__interrupt__(TIMER0_A0_VECTOR)))
void __isr_5(void)
{
...
}
目前GCC还(我相信这是arvindpdmn评论有关)使用上述语法,则引发错误。
internal compiler error: in msp430_attr, at config/msp430/msp430.c:1835
{
^
一个问题有人提出了这样的report of this in the TI E2E community后,但他说的问题仍处于“计划中”状态,目前还不清楚谁跟踪,甚至属于。 (您可以通过上面的链接访问该问题。)
看看代码,显然会引发错误,因为唯一可能有参数的属性是interrupt
属性。
事实上,如果省略了前导和下面的下划线,汇编就可以正常工作。
这是正确的语法!
__attribute__((interrupt(TIMER0_A0_VECTOR)))
void name_does_not_matter(void)
{
...
}
而事实上,这个属性是documented in the official GNU GCC documentation。回想起来,第一个地方的下划线来自哪里还不清楚。所以,基本上,这里唯一的问题是错误信息是非常不明确的。
5
请注意,此信息适用于MSPGCC v4.6.3,该版本在MSPGCC的Ti/Redhat/SOMNIUM端口之前进行日期,该端口现在与代码作曲工作室一起分发。
非常感谢Mspgcc-users邮件列表的Peter Bigot为此答案。
有两种可能性:
一个。使用的Code Composer Studio风格的语法(有被移植到CCS的额外好处):
#pragma vector=TIMER0_A0_VECTOR
__interrupt void
ta0cc0_isr (void)
(请注意,这是地方出台各地MSPGCC的20120406版本)。
B。使用原生的gcc语法:
static void
__attribute__((__interrupt__(TIMER0_A0_VECTOR)))
isr_cc0_TA0 (void)
Ç。正确命名该功能,以便将其包含在矢量表中(对ASM功能有用)。
中断属性导致该函数被命名为__isr_X
其中X是中断与向量表开始的字偏移量(等于中断属性参数的值除以2)。
这些__isr_X
符号用于初始化crt0ivtbl.o中的向量表。
相关问题
- 1. ISR和中断处理程序有区别吗?
- 2. IF声明中断批处理脚本
- 3. 如何为ON_COMMAND处理程序声明一个ID?
- 4. 在中断处理程序
- 5. 如何在ControlTemplate中声明事件处理程序?
- 6. 如何在循环中声明事件处理程序?
- 7. 如何处理saml:在WCF中声明?
- 8. 如何中断事件处理程序
- 9. 多个中断处理程序共享地址如何多个中断处理程序共享地址0x00000018
- 10. 处理中断的程序,即中断处理程序存储在哪里?
- 11. 在Linux中断处理程序中创建一个小延迟
- 12. 当中断处理程序被另一个中断中断时,中断上下文如何“恢复”?
- 13. 声明处理程序错误
- 14. 查找完成声明处理程序
- 15. 在单独的事件处理程序中声明队列
- 16. HapiJS在处理程序中声明请求
- 17. 如何在nodejs程序中声明一个sequelize-auto?
- 18. 处理程序是否可以在程序(MySql)之外声明?
- 19. 如何在ARM Cortex-M3的中断处理程序中重新启用中断?
- 20. 在信号处理程序中,如何知道程序在哪里中断?
- 21. 如何声明和处理在C#1.1
- 22. 程序集编程和中断处理
- 23. 如何使用C启用/禁用mspgcc中的中断?
- 24. 如何在C程序(AVR)中编写程序集ISR?
- 25. 如何处理线程中的继续声明
- 26. 设计:如何声明专用的内存处理程序类
- 27. 在SystemVerilog声明中处理重置
- 28. ISR(中断服务程序)中的信号量同步
- 29. 如何在一个处理程序中处理多个主干模型更改
- 30. 如何在一个处理程序中处理多个更改事件?
当使用GNU v5.3.0.219(SOMNIUM Technologies Limited)作为CCS附件安装时,这在CCS 6.2.0中对我无效。错误:'内部编译器错误:在msp430_attr,at'处。如果我找不到答案,可能会开始一个新问题。 – 2016-10-17 13:30:32
手册中说:“要使用MSP430 GCC定义中断,请使用以下语法: 'void __attribute__((interrupt(INTERRUPT_VECTOR)))INTERRUPT_ISR(void)' static关键字不应用于ISR定义。 PDF:http://www.ti.com/lit/pdf/slau646 – 2016-10-17 13:37:10
此原始信息适用于MSPGCC端口,然后由Ti/Redhat重新实施,但在2013年不存在:) – 2016-10-18 07:08:13