跳到主要內容

ISR/主程式共享變數情況需設定成volatile

  ISR/主程式共享變數情況需設定成volatile,計時器一定要設成volatile.

原因如下:

編譯器不一定知道 ISR 會在任意時間修改它,因此可能將值暫存在 CPU 暫存器。

所以在其它地方還是讀取變數,而ISR的修改卻存在CPU暫存器沒存回變數,

會因此造成錯誤。(編譯器不最佳化可能不會出問題,但最佳化後可能會出問題)

因為使用免費的編譯器沒有最佳化功能所以不會有問題 >"<


volatile 不代表執行緒安全

volatile 只保證編譯器不要省略或快取存取,不提供:

  • 原子操作保證
  • 互斥鎖
  • 防止 ISR 在操作中間插入
  • 多個變數的一致性

留言

這個網誌中的熱門文章

AD9 SCH尋找相同net

 ALT+滑鼠左鍵點net 不容易找到相同的net 加上這個設定 會有紅線 很容易找到相同的net 取消選取  在空白處點一下滑鼠左鍵   再 Shift+C AD快捷鍵列表

VScode-json-debug&compiler

  {     // Use IntelliSense to learn about possible attributes.     // Hover to view descriptions of existing attributes.     // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387     "version" : "0.2.0" ,     "configurations" : [         {             // Note: Properties here can override MPLAB project settings             "name" : "Debug" ,             "type" : "mplab-core-da" ,             "request" : "launch" ,             "project" : "My_Project" ,             "configuration" : "default" ,             "stopOnEntry" : true ,         },         {             "name" : "Program" ,         ...

MPLAB X IDE 不能在.h檔裡宣告變數,否則debug mode時會出問題,找不函數.

  MPLAB X IDE 不能在.h檔裡宣告變數,否則debug mode時會出問題,找不函數. 但編輯和燒錄時功能都正常.