[Embedded] Từ Khóa Volatile Trong C
embedded
15
C
29
C++
38
White

binhphuong viết ngày 10/06/2018

Trong lập trình nhúng (embedded system) chúng ta hay bắt gặp từ khóa volatile được khai báo kèm theo biến. Vậy ý nghĩa của nó thế nào?
Việc khai báo biến có thuộc tính volatile là rất cần thiết nhằm tránh các lỗi phát sinh ngoài ý muốn khi tính năng optimization của compiler được bật. Volatile để chỉ một biến có thể bị thay đổi giá trị một cách "bất thường". Có nghĩa là giá trị của biến có thể bị thay đổi mà không được báo trước. Ví dụ sau sẽ cho thấy điều đó

#include <stdio.h>

bool receiveDone = false;

int main(void)
{
  if(receiveDone)
  {
    printf("Interrupt");
  }
}

interrupt void rx_isr(void)
{
  receiveDone = true;
}

Biến receivedDone được khai báo là một biến bình thường(không có thuộc tính volatile) nên compiler sẽ không biết được rằng nó sẽ bị thay đổi một cách bất thường, do đó khi một ngắt xảy ra, bên trong ngắt đã thay đổi giá trị của biến này thành true, nhưng bên trong hàm main biến receivedDone không được làm mới(refresh) nên vẫn giữ giá trị là false, do đó đoạn code bên trong if(receivedDone) không được thực hiện. Để khắc phục vấn đề trên chúng ta chỉ việc thêm thuộc tính volatile cho biến receivedDone. Khai báo sẽ là:

volatile bool receiveDone = false;

Khi có thuộc tính volatile cho biến thì cho dù optimization của compiler có bật lên thì compiler vẫn bị buộc phải check biến có thuộc tính volatile để đảm bảo cập nhật được giá trị mới nhất của biến trước khi tính toán.

binhphuong 09-06-2018

Bình luận


White
{{ comment.user.name }}
Bỏ hay Hay
{{comment.like_count}}
Male avatar
{{ comment_error }}
Hủy
   

Hiển thị thử

Chỉnh sửa

White

binhphuong

1 bài viết.
0 người follow
Kipalog
{{userFollowed ? 'Following' : 'Follow'}}
Bài viết liên quan
White
7 2
Device Tree trong Linux Device Tree (DT) là một file mô tả phần cứng, có kiểu định dạng giống JSON, nó mô tả một cấu trúc cây, ở đó thì các device...
Khó viết 1 năm trước
7 2
White
1 2
Những công cụ và hàm hay dùng trong Linux Device Driver (Phần 3) _Tham khảo từ Linux Device Drivers Development_ Chào mừng các bạn đã đến với phầ...
Khó viết 1 năm trước
1 2
{{like_count}}

kipalog

{{ comment_count }}

bình luận

{{liked ? "Đã kipalog" : "Kipalog"}}


White
{{userFollowed ? 'Following' : 'Follow'}}
1 bài viết.
0 người follow

 Đầu mục bài viết

Vẫn còn nữa! x

Kipalog vẫn còn rất nhiều bài viết hay và chủ đề thú vị chờ bạn khám phá!