2013-03-19 51 views

Trả lời

3

Chỉ cần làm rõ vì đây là kết quả đầu tiên của Google.

__attribute__((__interrupt__(TIMER0_A0_VECTOR))) 
void __isr_5(void) 
{ 
     ... 
} 

GCC hiện tại vẫn còn (tôi tin đây là điều arvindpdmn đã nhận xét) gây ra lỗi khi sử dụng cú pháp trên.

internal compiler error: in msp430_attr, at config/msp430/msp430.c:1835 
{ 
^ 

Một vấn đề được nêu ra cho việc này sau một report of this in the TI E2E community, nhưng nói rằng vấn đề vẫn là trong "kế hoạch" nhà nước và không rõ ai là người theo dõi thậm chí thuộc về. (Bạn có thể truy cập vấn đề thông qua chuỗi trong liên kết ở trên.)

Nhìn vào mã, lỗi rõ ràng là được nâng lên, vì thuộc tính duy nhất có thể có đối số, là thuộc tính interrupt.

Thực tế, quá trình biên dịch hoạt động tốt, nếu dấu gạch dưới hàng đầu và sau bị bỏ qua.

Đây là cú pháp chính xác ở đây!

__attribute__((interrupt(TIMER0_A0_VECTOR))) 
void name_does_not_matter(void) 
{ 
     ... 
} 

Và trên thực tế, thuộc tính này là documented in the official GNU GCC documentation. Nhìn lại, nó là khá rõ ràng, nơi các dấu gạch dưới đến từ nơi đầu tiên. Vì vậy, về cơ bản, vấn đề duy nhất ở đây là thông báo lỗi quá không hợp lý.

5

Lưu ý rằng thông tin này áp dụng cho MSPGCC v4.6.3 được đặt trước cổng Ti/Redhat/SOMNIUM của MSPGCC hiện được phân phối với xưởng soạn mã.

Cảm ơn bạn đã đến Peter Bigot trong danh sách gửi thư của người dùng Mspgcc cho câu trả lời này.

Có hai khả năng:

Một. Sử dụng mã phong cách nhà soạn nhạc phòng thu cú pháp (có thêm lợi ích của bị cầm tay để CCS):

#pragma vector=TIMER0_A0_VECTOR  
__interrupt void 
ta0cc0_isr (void) 

(Lưu ý rằng đây đã được giới thiệu ở đâu đó xung quanh phiên bản 20.120.406 của Mspgcc).

B. Sử dụng cú pháp gcc gốc:

static void 
__attribute__((__interrupt__(TIMER0_A0_VECTOR))) 
isr_cc0_TA0 (void) 

C. Đặt tên cho hàm đúng để nó được đưa vào bảng vectơ (hữu ích cho các hàm ASM).

Thuộc tính ngắt làm cho hàm được đặt tên __isr_X trong đó X là độ lệch từ của ngắt từ khởi đầu bảng vectơ (bằng giá trị của tham số của thuộc tính ngắt chia cho 2). Các biểu tượng __isr_X được sử dụng để khởi tạo bảng vectơ trong crt0ivtbl.o.

+0

Điều này không hiệu quả đối với tôi trong CCS 6.2.0 khi sử dụng GNU v5.3.0.219 (SOMNIUM Technologies Limited), được cài đặt dưới dạng phần bổ trợ cho CCS. Lỗi: 'lỗi trình biên dịch nội bộ: trong msp430_attr, tại'.Có thể bắt đầu một câu hỏi mới nếu tôi không tìm thấy câu trả lời. –

+1

Hướng dẫn sử dụng nói: "Để xác định ngắt bằng MSP430 GCC, hãy sử dụng cú pháp sau: ' void __attribute__ ((ngắt (INTERRUPT_VECTOR))) INTERRUPT_ISR (void) ' Không nên sử dụng từ khóa tĩnh trên định nghĩa ISR." PDF: http://www.ti.com/lit/pdf/slau646 –

+0

Thông tin ban đầu này được áp dụng cho cổng MSPGCC trước khi nó được Ti/Redhat thực hiện lại, không tồn tại vào năm 2013 :) –

Các vấn đề liên quan