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ả

So sánh giữa Intel Galileo và Raspberry Pi

Intel Galileo và Raspberry Pi (RPi) là 2 bo mạch chủ yếu dành cho đối tượng người dùng DIY (Do It Yourself) – tức là những người muốn tự tay làm các sản phẩm sáng tạo cho mình. Ở đây, chúng ta sẽ xét 2 phiên bản là Intel Galileo (thế hệ 1) và Raspberry Pi (bản B).

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

Bài 7: Nâng cấp phiên bản Linux trên Intel Galileo

Phiên bản Linux mặc định trên Galileo bị thiếu nhiều chức năng do đã được Intel tinh giảm bớt đi. Một số câu lệnh hay các phần hỗ trợ thường có trên các bản Linux cũng có thể bị lược bỏ ít nhiều. Do đó, để có thể tận dụng được tối đa sức mạnh của Intel Galileo mà phần lõi là hệ điều hành Linux, bạn phải nâng cấp hệ điều hành này.

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