View Single Post
Old 26-03-2006, 12:56 AM   #59
ngohaibac
Đệ tử 9 túi
 
ngohaibac's Avatar
 
Tham gia ngày: Oct 2005
Nơi Cư Ngụ: BKHN
Bài gửi: 231
:
Send a message via Yahoo to ngohaibac
Trích:
Nguyên văn bởi pb1
Nhà mình có bác nào dảnh thì giải thích giúp em cái này cái:
static volatile bit flag=0;
static volatile unsigned int t1=0,t2=0;
Khai báo biến kiểu này là kiểu gì thế?
Theo tài liệu tại: \HT-PIC\manual\manual.pdf trang 153 . Bọn nó viết thế này: (tạm dịch)

Kiểu dữ liệu volatile được dùng để báo cho trình dịch biết rằng đối tượng được khai báo kiểu volatile có thể không cần lưu trữ lại giá trị giữa các lần truy cập liên tiếp. Điều đó làm cho chương trình có sự tối ưu hoá từ việc là những dư thừa rõ ràng đang được loại ra khi sử dụng một đối tượng có kiểu volatile bởi ví đối tượng đó có thể thay đổi tuỳ theo chương trình hoạt động như thế nào.

Tất cả các port I/O và tất cả các biến mà bị thay đổi giá trị trong trình phục vụ ngắt nên khai báo kiểu volatile.

Ví dụ:
Code:
volatile static near unsigned char PORTA @ 0xF80;
Đối tượng volatile được truy nhập theo một cách khác so với một đối tượng không có khai báo volatile. Khi gán giá trị của một đối tượng không có khai báo volatile = 1 thì đối tượng này sẽ bị xoá và địa chỉ của đối tượng sẽ tăng lên. Nhưng với biến có khai báo violatile thì cách hoạt động như sau: đầu tiên là gán giá trị của thanh ghi W = 1 và sau đó là lưu giá trị đó vào địa chỉ của ban đầu của đối tượng đó.

Kết luận: như vậy là khai báo volatile được dùng với biến phải sử dụng liên tục. Khi khai báo như thế thì tiết kiệm được địa chỉ của RAM.

Khi các bạn mở các file include ra sẽ thấy được rằng bọn nó khai báo địa chỉ cho các port đều theo kiểu này
ngohaibac vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn