Phương thức ưu tiên khai báo trình xử lý ngắt trong mspgcc là gì?Làm thế nào để khai báo một trình xử lý ngắt (ISR) trong Mspgcc?
Trả lời
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ý.
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.
- 1. Lập trình AVR, xử lý ngắt
- 2. Làm thế nào tôi có thể tạo ra một mảng biên dịch các trình xử lý ngắt trong C++?
- 3. Trình xử lý ngắt có thể được xử lý bởi cùng một trình xử lý ngắt không?
- 4. Làm thế nào để bạn kiểm tra mô-đun xử lý ngắt của bạn?
- 5. Làm thế nào để xử lý một dòng mới như ngắt dòng thực trong PHP Markdown?
- 6. Trình xử lý ngắt i2c stm32
- 7. Làm thế nào để xử lý một BÁO CÁO NẾU trong một mẫu Mustache?
- 8. Xử lý ngắt trong Windows
- 9. Làm thế nào để xử lý 'undefined' trong javascript
- 10. Các ngắt được xử lý như thế nào trên SMP?
- 11. Các ngắt bị xử lý bởi các máy xử lý kép như thế nào?
- 12. Làm thế nào để khai báo một biến trong MySQL?
- 13. tín hiệu xử lý trong C - ngắt trong ngắt
- 14. Làm thế nào để hệ thống xử lý Java ngắt như Ctrl + C
- 15. Làm thế nào để báo cho trình gỡ lỗi LLDB không xử lý SIGBUS?
- 16. Vấn đề với xử lý tín hiệu, xử lý ngắt
- 17. Làm thế nào để xử lý các nhiệm vụ triển khai một lần với capistrano?
- 18. Lỗi trình xử lý khi triển khai
- 19. Làm thế nào để xử lý lambdas trong một trình biên dịch trước lambda
- 20. Làm thế nào để kết hợp khai thác gỗ với một chuỗi xử lý ngoại lệ?
- 21. Làm thế nào để xử lý iPhone 'Low Battery' bật lên trong một trò chơi
- 22. Làm cách nào để đặt trình xử lý nhấp chuột để thông báo?
- 23. Làm thế nào để bạn ngắt JS trong trình duyệt?
- 24. Cách xử lý ngắt Inter Interor
- 25. Làm thế nào để xử lý DataIntegrityViolationException trong mùa xuân?
- 26. Làm thế nào để khai báo một hội bạn bè?
- 27. Làm cách nào để triển khai trình xử lý cảm ứng trên hình ảnh?
- 28. Làm thế nào để xử lý một phản ứng 204 trong jquery ajax?
- 29. Làm thế nào để xử lý một waithandle chính xác
- 30. Làm thế nào để bạn xây dựng một danh sách hiệu quả trong một trình xử lý trong AppleScript?
Đ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. –
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 –
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 :) –