PDA

View Full Version : hàm disable_interrupt có dùng trong ISR kg??


hongquyen
24-08-2009, 10:39 PM
em có vấn đề chưa hiểu về ngắt trong ccs c mong đc giải thích: thắc mắc về hàm disable_interrupts(level) level là : int_xxx hoặc global

-----theo như tài liệu sử dụng CCS tiếng việt (nguyên văn tựa đề) của tác giả TRẦN XUÂN TRƯỜNG thì tại trang số 29 của cuốn sách này tác giả có viết( tại dòng thứ 4 từ dưới đếm lên):
(nguyên văn) "không dùng hàm này trong hàm phục vụ ngắt vì không có tác dụng,..."

-----nhưng theo 1 code khác trên điễn đàn(và chính anh NAM cg đã đọc qua) thì hàm disable_interrupts(level) này lại có thể dùng đc trong ISR. sau đây là code(nguyên văn):

ngat_1()
{
//code: disable ngat 1,2,3 <<<<< mâu thâu ở dòng này
// gie=1
// isp của 1
}
..... các dòng khác tuơng tự

vậy đâu là sự thật, kính mong mọi nguời giúp em

em cảm ơn.

hongquyen
25-08-2009, 10:23 PM
ôi, các cao thủ ơi, trả lời giúp em với, có phải tại câu hỏi của em quá "dốt" hay vì vấn đề nào khác mà các cao thủ kg giúp e ạ.....

cskiller
25-08-2009, 10:26 PM
Mình không rõ các nguồn tài liệu kia, tuy nhiên theo mình thấy thì việc disable 1 interrupt khác hoặc global interrupt trong khi thực thi trong hàm phục vụ ngắt hiện hành là chuyện rất bình thường, sử dụng để đảm bảo việc xử lý không bị gián đoạn do khi đang xử lý trong ngắt hiện hành thì các ngắt có độ ưu tiên khác cao hơn xảy ra làm ngắt quảng(vì ngắt có độ ưu tiên cao hơn sẽ được phục vụ trước). Chú ý việc cấm các ngắt chứ không xóa cờ ngắt của nó nên sau khi enable lại các ngắt thì các ngắt sẽ được gọi phục vụ ngay sau đó.

Regards

cskiller
25-08-2009, 10:30 PM
ôi, các cao thủ ơi, trả lời giúp em với, có phải tại câu hỏi của em quá "dốt" hay vì vấn đề nào khác mà các cao thủ kg giúp e ạ.....

Chả mấy ai dám nhận mình là cao thủ đâu bạn ah, fiền lắm, chỉ dám nhận là ... trung bình thủ thôi http://www.updatesofts.com/forums/images/smilies/014.gif

hongquyen
25-08-2009, 10:51 PM
Chả mấy ai dám nhận mình là cao thủ đâu bạn ah, fiền lắm, chỉ dám nhận là ... trung bình thủ thôi http://www.updatesofts.com/forums/images/smilies/014.gif


anh khiêm tốn quá rồi, nhờ các anh thì bọn em mới biết dc chứ ạ (nên gọi vậy cg đâu có gì là phiền đâu anh.)
một lần nữa xin cảm ơn anh

mocdailam
25-08-2009, 11:28 PM
Mình cũng chua thử nữa cái disable_interrupts(global) người bảo được người bảo không!
còn mấy cái timer, RDA, RB ... mình nghi là được, bữa trước có làm trình dùng nhiều ngắt cũng làm như thế có thấy lỗi gì đâu. mà bạn test thu cái thi biết liền chứ có gì đâu.

hopeman
27-08-2009, 11:53 AM
bản chất của nó chỉ là xóa hay set 1 bit thôi mà, có gì đâu mà ko được? mình nghĩ là không vấn đề gì hết, miễn là bạn phải đảm bảo các vấn đề về thuật toán để không ảnh hưởng đến việc khác thôi.