PIC Vietnam

Go Back   PIC Vietnam > Microchip PIC > Cơ bản về vi điều khiển và PIC

Tài trợ cho PIC Vietnam
Trang chủ Đăng Kí Hỏi/Ðáp Thành Viên Lịch Bài Trong Ngày Vi điều khiển

Cơ bản về vi điều khiển và PIC Những bài hướng dẫn cơ bản nhất để làm quen với vi điều khiển PIC

Trả lời
 
Ðiều Chỉnh Xếp Bài
Old 29-09-2007, 03:05 AM   #1
david
Đệ tử 4 túi
 
david's Avatar
 
Tham gia ngày: Aug 2006
Bài gửi: 81
:
Cho em hỏi về quản lý stack

Pic 16f877a có 8 stack để chứa PC khi chương trình thực hiện ngắt,hay lệnh call,lệnh goto,và trong chương trình có nhiều vòng lệnh call,goto lồng nhau có thể dẫn đế tràn stack,em nói thế không sai chứ ạ
Có bác nào có thể nói cho em những qui tắc để không xay ra tràn không ?
Thank!
david vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 29-09-2007, 03:19 PM   #2
falleaf
PIC Bang chủ
 
falleaf's Avatar
 
Tham gia ngày: May 2005
Bài gửi: 2,631
:
Send a message via Yahoo to falleaf
Lệnh goto không lưu vào stack (TOS = Top Of Stack). Lệnh goto chỉ ảnh hưởng tới PC.

Quản lý TOS chỉ ảnh hưởng khi mà bạn viết bằng MPASM, còn nếu bạn viết bằng C thì tự động giải thuật sẽ xử lý các vòng lặp cho bạn, và gần như các vòng lặp trong ngôn ngữ cấp cao chỉ là vòng lặp về mặt thuật toán, nó không ảnh hưởng tới TOS vì những nhà lập trình đã phải xử lý vấn đề này. Họ xử lý như thế nào thì F cũng không rõ, vì mỗi trình dịch và ngôn ngữ đều khác nhau.

Còn trong MPASM, thực chất khi nhảy vào ngắt thì khi có ngắt chúng ta sẽ lập tức khoá ngắt, không cho ngắt xảy ra đồng thời, vào trước ra trước, nếu ngắt đồng thời thì xử lý ưu tiên. Đó là cách xử lý thông dụng nhất. Do vậy, ngắt chỉ tốn 1 ngăn. Như vậy trong chương trình, còn lại 7 ngăn. Nguyên tắc của 7 ngăn chỉ ảnh hưởng bởi lệnh Call. Như vậy nếu bạn viết lệnh Call, thì bạn nhớ ghi chú vào đó là Call cấp mấy. Nếu bạn dùng tới Call cấp 7 lồng nhau, thì như vậy bạn rất có nguy cơ bị tràn stack.

Ngoài ra, không thể lường trước hết mọi tình huống như vòng lặp xoay vòng, tràn TOS, hoặc các ảnh hưởng nhiễu, chúng ta có công cụ WDT (Watch Dog Timer) để quản lý các trường hợp này.

Chúc vui.
falleaf vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 30-09-2007, 11:05 AM   #3
plain
Đệ tử 1 túi
 
Tham gia ngày: Dec 2006
Bài gửi: 17
:
theo tôi biết, với 16F877A, ta không có lệnh can thiệp vào stack, vậy bác F có cách nào làm một chương trình reset bằng phần mềm (đưa con trỏ lệnh về đầu chương trình) không? Ví dụ như khi xảy ra ngắt -> thực hiện ngắt -> nhảy về đầu chương trình và lờ đi chương trình con đang thực hiện. Kiểu như clr ACC, push ACC, Push ACC trong 8051 ý
plain vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 30-09-2007, 02:32 PM   #4
falleaf
PIC Bang chủ
 
falleaf's Avatar
 
Tham gia ngày: May 2005
Bài gửi: 2,631
:
Send a message via Yahoo to falleaf
Trích:
Nguyên văn bởi plain View Post
theo tôi biết, với 16F877A, ta không có lệnh can thiệp vào stack, vậy bác F có cách nào làm một chương trình reset bằng phần mềm (đưa con trỏ lệnh về đầu chương trình) không? Ví dụ như khi xảy ra ngắt -> thực hiện ngắt -> nhảy về đầu chương trình và lờ đi chương trình con đang thực hiện. Kiểu như clr ACC, push ACC, Push ACC trong 8051 ý
877, 887, dòng Midrange nói chung, có các mức reset khác nhau. Hoạt động reset mà bạn nói là chủ động hay bị động? Chủ động có nghĩa là khi nào bạn muốn reset thì nhấn một nút nó sẽ reset, vậy tại sao bạn không dùng ngay nút reset. Bị động nghĩa là chương trình đang chạy bạn muốn reset. Tới một điểm nào bạn muốn reset thì bạn nhớ là có WDT đấy. WDT có thể làm khá nhiều việc, nếu bạn chỉ đặt thời gian reset cho WDT rất ngắn thì sẽ thế nào nhỉ? Hoặc nếu tới chỗ bạn cần mà bạn không reset WDT thì nó thế nào?

Chúc vui.
falleaf vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 04-10-2007, 07:12 PM   #5
plain
Đệ tử 1 túi
 
Tham gia ngày: Dec 2006
Bài gửi: 17
:
có thế mà em không nghĩ ra. Cám ơn bác F nhiều nhé
plain vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 13-10-2007, 09:56 PM   #6
david
Đệ tử 4 túi
 
david's Avatar
 
Tham gia ngày: Aug 2006
Bài gửi: 81
:
Có cách nào mở rộng stack của Pic không các bác ?
david vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Trả lời


Quyền Sử Dụng Ở Diễn Ðàn
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is Mở
Smilies đang Mở
[IMG] đang Mở
HTML đang Tắt

Chuyển đến


Múi giờ GMT. Hiện tại là 05:20 AM.


Được sáng lập bởi Đoàn Hiệp
Powered by vBulletin®
Page copy protected against web site content infringement by Copyscape
Copyright © PIC Vietnam