嵌入式與韌體
在8位元微控制器上,計時器中斷每次將32位元變數ticks加1,主程式讀取ticks來計算經過時間。偶爾會讀到偏差很大的值,其原因下列何者正確?
- A因為8位元微控制器無法使用32位元的變數
- B因為計時器中斷的週期每次都隨機改變
- C因為32位元的讀取分成4次,在途中插入中斷,可能使只有部分位元組變成新值
查看答案與解析
正確答案:C. 因為32位元的讀取分成4次,在途中插入中斷,可能使只有部分位元組變成新值
8位元微控制器一次只能讀取1個位元組,因此32位元的值要分4次讀取。例如在0x000000FF變成0x00000100的瞬間,若在讀取低位位元組之後插入中斷,就會得到舊的低位(0xFF)與新的高位(0x01)組合而成的0x000001FF這樣的值。只要在讀取期間禁止中斷,或是讀取兩次直到值相同為止,就能防止。
- A. 可以使用,但無法一次讀完。
- B. 週期是固定的。
- C. 正確。可藉由在讀取期間禁止中斷等方式防止。