volatile

Nếu bạn cần tìm hiểu về biến volatile, hãy tham khảo ở bài viết tại Wikipedia

Sơ lược

Một biến được nên khai báo với từ khóa volatile nếu giá trị của nó có thể bị tác động bởi các yếu tố nằm ngoài sự kiểm soát của chương trình đang chạy, nói đơn giản hơn là giá trị của biến thay đổi một cách không xác định. Các biến kiểu volatile thường là:

  1. Memory-mapped peripheral registers (thanh ghi ngoại vi có ánh xạ đến ô nhớ)
  2. Biến toàn cục được truy xuất từ các tiến trình con xử lý ngắt (Interrupt Service Routine - ISR)
  3. Biến toàn cục được truy xuất từ nhiều tác vụ trong một ứng dụng thực thi đa luồng (Concurrently Executing Thread).

Trong lập trình Arduino mà cụ thể hơn là trong việc giao tiếp với các chip Atmega, nơi duy nhất xảy ra sự tác động không dự báo trước đến giá trị các biến là những phần chương trình có sự giao tiếp với các ngắt (interrupts). Người ta ngăn sự thay đổi bất thường này bằng cách khai báo từ khóa volatile khi khai báo biến - cách mà sẽ đưa biến lên lưu trữ ở RAM để xử lí tạm thời thay vì lưu trữ ở các thanh ghi (register) bị ảnh hưởng bởi interrupts. Những biến này thuộc kiểu số 2 kể trên.

Khai báo ví dụ

volatile int state;

Chương trình mẫu

Chương trình sau sẽ thực hiện bật tắt đèn LED ở chân Digital 13 khi chân Interrupt 0 trên Arduino thay đổi trạng thái

int pin = 13;
volatile int state = LOW;

void setup() {
  pinMode(pin, OUTPUT);
  attachInterrupt(0, blink, CHANGE);
}

void loop() {
  digitalWrite(pin, state);
}

void blink() {
  state = !state;
}
lên
8 thành viên đã đánh giá bài viết này hữu ích.
Các bài viết cùng tác giả

Cơ hội cho các bạn học sinh THPT đam mê Arduino tại TPHCM

Thực hiện chương trình Tuổi trẻ Thành phố xung kích sáng tạo, làm chủ khoa học công nghệ giai đoạn 2013 - 2017; Chương trình công tác Đoàn và phong trào Thanh thiếu nhi thành phố năm 2014; Nhằm thúc đẩy và phát triển phong trào học tập, sáng tạo và ứng dụng tin học trong thanh thiếu nhi thành phố; Trung tâm Phát triển Khoa học và Công nghệ Trẻ phối hợp với Tổ chức giáo dục Everest Education và Công ty Intel Việt Nam tổ chức Cuộc thi “Young Makers Challenge 2014 - Intel Galileo

lên
4 thành viên đã đánh giá bài viết này hữu ích.

Các rắc rối thường gặp khi làm việc với Arduino

Trong bài viết này, mình sẽ giới thiệu cho các bạn các rắc rối thường gặp khi làm việc với Arduino. Mặc dù tôi đã nghiên cứu Arduino được khá lâu nhưng thỉnh thoảng tôi cũng hay gặp phải chúng. Bài viết có thể sẽ được cập nhật dần để bao quát hết được các xu hướng mắc lỗi thường gặp cũng như những lỗi hay hiện tượng "từ trên trời rơi xuống" của người mới nghiên cứu Arduino.

lên
9 thành viên đã đánh giá bài viết này hữu ích.