0
我用C寫一個程序PIC32的uC與多箇中斷服務程序的全局變量,有一個全局變量(uint32_t的類型),可以讀/從多箇中斷服務程序,並從主修改。
我知道這是不安全的,所以我想知道如何使它安全?有沒有一個例子說明如何使它安全?共享使用C
編輯1:
中斷可以互相中斷嗎?是
ISR是否更新變量?是 主要更新變量嗎?是 是寫入和讀取的變量原子,你怎麼知道?不確定
是否存在RTOS?沒有
我用C寫一個程序PIC32的uC與多箇中斷服務程序的全局變量,有一個全局變量(uint32_t的類型),可以讀/從多箇中斷服務程序,並從主修改。
我知道這是不安全的,所以我想知道如何使它安全?有沒有一個例子說明如何使它安全?共享使用C
編輯1:
中斷可以互相中斷嗎?是
ISR是否更新變量?是 主要更新變量嗎?是 是寫入和讀取的變量原子,你怎麼知道?不確定
是否存在RTOS?沒有
如果你真的需要保留可以在多箇中斷的服務,可以互相中斷期間進行修改全局變量,我建議你下面的方法做:
我喜歡你的建議,謝謝 –
最安全的方法是:不這樣做!順便說一句,我希望你把var定義爲volatile。 – LPs
好吧,這聽起來像你在使用獨立環境,所以C沒有強制許可,但是如果你想編寫可移植代碼,你可以看看C11標準草案n1570:* 5.1.2.3程序執行5當抽象機器的處理由於接收到一個信號而中斷,既沒有鎖定自由原子對象,也沒有指定類型易失性sig_atomic_t的對象的值沒有被指定[...]。任何對象的該處理程序修改的值既不是無鎖原子對象也不類型的當處理程序退出[...] * – EOF
如果您設置揮發性sig_atomic_t變得不確定,使得中斷被禁止時你」重新服務中斷,那麼你所需要做的就是在你讀取或修改main中全局的任何地方禁用中斷。 – Ross