2013-03-19 77 views

回答

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中的向量表。

+0

當使用GNU v5.3.0.219(SOMNIUM Technologies Limited)作爲CCS附件安裝時,這在CCS 6.2.0中對我無效。錯誤:'內部編譯器錯誤:在msp430_attr,at'處。如果我找不到答案,可能會開始一個新問題。 – 2016-10-17 13:30:32

+1

手冊中說:「要使用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

+0

此原始信息適用於MSPGCC端口,然後由Ti/Redhat重新實施,但在2013年不存在:) – 2016-10-18 07:08:13

相關問題