嵌入式與韌體

主程式正以「reg |= mask;」(讀取、修改、寫回)操作暫存器的位元時,中斷處理常式改寫了同一暫存器的另一個位元,可能發生的問題與對策的組合,下列何者正確?

  1. A中斷所做的變更會被主程式的寫回覆蓋而消失。在操作期間禁止中斷,或使用各位元專用的設定、清除暫存器
  2. B暫存器損壞而再也無法使用。更換微控制器
  3. C什麼事都不會發生。不需要對策
查看答案與解析

正確答案:A. 中斷所做的變更會被主程式的寫回覆蓋而消失。在操作期間禁止中斷,或使用各位元專用的設定、清除暫存器

「reg |= mask」是讀取暫存器、做OR運算、再寫回的三個動作。若在讀取之後立刻發生中斷,處理常式改變了另一個位元,主程式仍會依據中斷前讀到的舊值寫回,使處理常式的變更消失。只要在操作期間禁止中斷,或使用只有寫入1的位元才會改變的設定用、清除用暫存器,一次寫入即可完成,就不會發生這個問題。

  • A. 正確。原因在於讀取到寫入之間被中斷插入。
  • B. 電路並不會損壞,只是數值遺失。
  • C. 數值有可能遺失。
練習這個領域 前往領域頁面

嵌入式與韌體的其他題目

  1. 在微控制器的輸入腳位只接了開關,沒有加上上拉或下拉電阻。開關斷開時可能發生下列何種情況?
  2. 使用微控制器的GPIO(通用輸入輸出)腳位時,首先必須設定的是下列何者?
  3. 按下機械式開關時,接點細微彈跳,在短時間內反覆多次導通與斷開的現象稱為什麼?
  4. 以軟體消除開關彈跳的方法,下列何者最為適當?
  5. 將16 MHz的時脈經預除器除以16後供計時器計數,設定每計數1000次產生一次中斷。中斷的間隔是多少?

這個領域的比較