在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