View Single Post
Old 30-08-2006, 04:55 PM   #29
pham_v_quang3i
Đệ tử 1 túi
 
Tham gia ngày: Aug 2005
Bài gửi: 12
:
Đôi lời về ngắt
Cú pháp của ngắt :
- Khi khai báo sử dụng một ngắt, cú pháp khai báo đơn giản
void _ISR _INT0Interrupt(void); // ngăt ngoài
void _ISR _U1TXInterrupt(void) // ngắt UART
void _ISR _U1RXInterrupt(void)
- Trang 94 của C30_Users_Guide có định nghĩa cách khai báo đầy đủ :
__attribute__((interrupt [(
[ save(symbol-list)]
[, irq(irqid)]
[, altirq(altirqid)]
[, preprologue(asm)]
)]
))
Trong đấy :
Save : Lưu giữ biến vào của chương trình ngắt
Irq : cho phép đặt vector ngắt
altirq : cho phép đặt vector ngắt thay thế
preprologue : cho phép insert hợp ngữ
Em chỉ dịch Word - by - Word chứ chưa hiểu ý nghĩa thật sự của các mục

* Trong các tài liệu hướng dẫn của microchip có một số khai báo dùng ngắt, sử dụng cú pháp trên ( trong dsPIC® Language Tools Getting Started có nhiều ví dụ về khai báo ngắt kiểu này)
void __attribute__((__interrupt__(__save__(variable1,va riable2)))) _INT0Interrupt(void)
/* interrupt routine code */
{
/* Interrupt Service Routine code goes here */
}

void __attribute__((__interrupt__)) _ADCInterrupt(void);
void __attribute__((__interrupt__, __shadow__)) _T1Interrupt(void);

Các đại ca ai hiểu giải thích cụ thể cho em nhé
+ Giải thích cụ thể về từ khóa __attribute__ , __shadow__vì em thấy nó dùng rất nhiều.
+ Khi nào thì mình cần dùng đầy đủ cú pháp của ngắt, em thấy dùng cú pháp đơn giản như trên cũng chẳng sao.
Thanks

thay đổi nội dung bởi: pham_v_quang3i, 30-08-2006 lúc 05:00 PM.
pham_v_quang3i vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn