![]() |
![]() |
#4 |
...Damned...
Tham gia ngày: Apr 2006
Nơi Cư Ngụ: Hồ Chí Minh
Bài gửi: 522
: |
Enabling the PIC18 instruction set extension may cause legacy applications to behave erratically or fail entirely
Một số bản rất cũ của USB stack ko hoạt động khi cho phép extended mode, còn lý do thì mình cũng ko rõ tại sao???? Các lệnh mở rộng là các lệnh liên quan đến truy xuất bộ nhớ. Các lệnh này tăng hiệu năng cho các thao tác đánh địa chỉ gián tiếp (trong C là de-reference con trỏ, vd *ptr++) và chỉ số (trong C là truy xuất mảng, vd a[i]) Trình dịch C18 tận dụng các lệnh này cho software stack. Sử dụng các lệnh mới này, các thao tác dynamic allocate biến cục bộ sẽ nhanh hơn. Dynamic allocate biến cục bộ có tác dụng gì?? Khi 1 hàm có khả năng re-entrant tức là nhiều instance của 1 hàm có thể chạy đồng thời. Trường hợp này xảy ra khi xử lý đa luồng, với PIC là 1 hàm vừa được gọi trong ngắt vừa được gọi trong chương trình chính, hoặc được gọi trong nhiều hàm phục vụ ngắt. Khi đó mỗi instance của hàm này phải có 1 không gian nhớ riêng cho các biến cục bộ của nó. Trình dịch C thực hiện bằng cách allocate các biến này trong software stack. Vì các biến này được tạo ra khi chương trình chạy, chứ ko phải khi biên dịch, nên thao tác này được gọi là dynamic allocate. C30, C32 luôn luôn dùng software stack để dynamic allocate các biến cục bộ. C18 thì mình chưa rõ, vì rất ít khi dùng. Trường hợp trình dịch C ko hỗ trợ, ví dụ HTPIC cho PIC16 hoặc CCS C, nó sẽ allocate các biến cục bộ trong vùng overlay và disable ngắt khi gọi hàm này. thay đổi nội dung bởi: bien_van_khat, 27-03-2010 lúc 11:03 AM. |
![]() |
![]() |
|
|