Thông báo

Collapse
No announcement yet.

Ý nghĩa từ khóa volatile

Collapse
X
 
  • Lọc
  • Giờ
  • Show
Clear All
new posts

  • Ý nghĩa từ khóa volatile

    -Mọi ngườ cho mình hỏi ý nghĩa từ khóa volatile trong lập trình C cho vi điều khiển là gì?

    -hai dòng này thì khác nhau gì?
    + volatile int EnableFlag = 0;
    + int EnableFlag = 0;
    Bạn nào biết thì giải thích giúp mình nhé. Thanks!

  • #2
    cái này được gọi là lớp lưu trữ của biến. Có 5 lớp tất cả: auto, register, static, extern, và volatile.
    - auto : kiểu mặc định của các biến được khai báo, biến khai báo kiểu auto trong hàm sẽ bị hủy giá trị khi thoát khỏi hàm.
    - static : biến được khai báo trong lớp này thì chỉ có thể truy xuất từ hàm mà nó khai báo, giá trị của biến sẽ được lưu giữ lại khi thoát khỏi hàm.
    - register : các biến được khai báo trong lớp này sẽ được lưu trữ ở vùng thanh ghi mà có tốc độ truy xuất cao nhất ( vd như 8051 thì sẽ được lưu ở các bank thanh ghi thay vì lưu ở Ram), biến sẽ bị hủy khi ra khỏi hàm.
    - extern : dùng để khai báo các biến nằm ở các source file khác.
    - volatile : ngược lại với kiểu register, biến được khai báo trong lớp này sẽ được lưu trữ ở những vùng nhớ bình thường (Ram)

    Comment


    • #3
      Trong C++, từ khóa volatile dùng để khai báo các biến có thể bị thay đổi bởi các tác nhân bên ngoài code mà ta đang viết, ví dụ như hệ điều hành, hardware, hay các tiến trình khác thực thi đồng thời.

      Ví dụ: hai cách khai báo trên:
      volatile int EnableFlag = 0;
      int EnableFlag = 0;

      Nếu không có từ khóa volatile, giả sử ta có đoạn code:
      int EnableFlag = 0;
      ...
      EnableFlag = 1; //dong 1
      nop(); //dong 2
      EnableFlag = 0; //dong 3
      Nhiều trình biên dịch, ví dụ như AVRstudio-gcc, sẽ tự động lược bỏ dòng 1, vì cho rằng dòng này không có tác dụng, giá biến EnableFlag đằng nào cũng là 0.

      Nhưng nếu ta khai báo với từ khóa volatile, trình biên dịch hiểu là giá trị của biến này có thể bị can thiệp bởi các tác nhân khác đồng thời, chứ không chỉ đoạn code đang thực thi, nên nó sẽ biên dịch đầy đủ các lệnh.
      Ta thường dùng từ khóa này khi khai báo các biến liên quan đến hardware.

      Comment


      • #4
        Nguyên văn bởi tronghv Xem bài viết
        cái này được gọi là lớp lưu trữ của biến. Có 5 lớp tất cả: auto, register, static, extern, và volatile.
        - auto : kiểu mặc định của các biến được khai báo, biến khai báo kiểu auto trong hàm sẽ bị hủy giá trị khi thoát khỏi hàm.
        - static : biến được khai báo trong lớp này thì chỉ có thể truy xuất từ hàm mà nó khai báo, giá trị của biến sẽ được lưu giữ lại khi thoát khỏi hàm.
        - register : các biến được khai báo trong lớp này sẽ được lưu trữ ở vùng thanh ghi mà có tốc độ truy xuất cao nhất ( vd như 8051 thì sẽ được lưu ở các bank thanh ghi thay vì lưu ở Ram), biến sẽ bị hủy khi ra khỏi hàm.
        - extern : dùng để khai báo các biến nằm ở các source file khác.
        - volatile : ngược lại với kiểu register, biến được khai báo trong lớp này sẽ được lưu trữ ở những vùng nhớ bình thường (Ram)
        thânks anh ạ

        Comment


        • #5
          Thank chú!

          Comment

          Về tác giả

          Collapse

          forever074 Tìm hiểu thêm về forever074

          Bài viết mới nhất

          Collapse

          Đang tải...
          X