嵌入式系統 - 術語



程式計數器

程式計數器是一個 16 位或 32 位暫存器,它包含下一個要執行指令的地址。每次取指令時,程式計數器都會自動遞增到下一個連續的記憶體位置。分支、跳轉和中斷操作會將程式計數器載入到下一個連續位置以外的地址。

啟用上電覆位將導致暫存器中的所有值丟失。這意味著復位後程序計數器 (PC) 的值為 0,強制 CPU 從 ROM 記憶體位置 0000 獲取第一個操作碼。這意味著我們必須將第一個操作碼位元組放在 ROM 位置 0000,因為那是 CPU 期望找到第一條指令的地方。

復位向量

復位向量的意義在於它指向包含韌體第一條指令的記憶體地址。如果沒有復位向量,處理器將不知道從哪裡開始執行。復位時,處理器會從預定義的記憶體位置載入程式計數器 (PC) 與復位向量值。在 CPU08 架構中,此位置位於 $FFFE:$FFFF。

當不需要復位向量時,開發人員通常認為它理所當然,並且不會將其程式設計到最終映象中。結果,處理器不會在最終產品上啟動。這是除錯階段常犯的一個錯誤。

堆疊指標

堆疊在 RAM 中實現,並且使用稱為 SP(堆疊指標)暫存器的 CPU 暫存器來訪問它。SP 暫存器是一個 8 位暫存器,可以定址範圍為 00h 到 FFh 的記憶體地址。最初,SP 暫存器包含值 07,指向位置 08 作為 8051 使用的第一個堆疊位置。

當 CPU 暫存器的內容儲存在堆疊中時,稱為 PUSH 操作。當堆疊的內容儲存在 CPU 暫存器中時,稱為 POP 操作。換句話說,將暫存器壓入堆疊以儲存它,並從堆疊中彈出它以檢索它。

無限迴圈

無限迴圈或無休止迴圈可以識別為計算機程式中的一系列指令,由於以下原因,這些指令會在迴圈中無休止地執行:

  • 沒有終止條件的迴圈。
  • 終止條件永遠無法滿足的迴圈。
  • 終止條件導致迴圈重新開始的迴圈。

這種無限迴圈通常會導致舊的作業系統無響應,因為無限迴圈會消耗所有可用的處理器時間。等待使用者輸入的 I/O 操作也稱為“無限迴圈”。計算機“凍結”的一個可能原因是無限迴圈;其他原因包括**死鎖**和**訪問衝突**。

與 PC 不同,嵌入式系統永遠不會“退出”應用程式。它們透過無限迴圈空閒,等待以中斷或**預定任務**的形式發生的事件。為了節省電力,一些處理器會進入特殊的**睡眠**或**等待模式**,而不是透過無限迴圈空閒,但它們將在計時器或外部中斷後退出此模式。

中斷

中斷大多是硬體機制,用於指示程式已發生事件。它們可能隨時發生,因此與程式流程是非同步的。它們需要處理器進行特殊處理,最終由相應的中斷服務例程 (ISR) 處理。中斷需要快速處理。如果處理中斷花費的時間太長,則可能會錯過另一箇中斷。

小端序與大端序

雖然數字始終以相同的方式顯示,但它們在記憶體中的儲存方式並不相同。大端序機器將資料的最高有效位元組儲存在最低記憶體地址中。大端序機器將 0x12345678 儲存為:

ADD+0: 0x12 
ADD+1: 0x34 
ADD+2: 0x56 
ADD+3: 0x78

另一方面,小端序機器將資料的最低有效位元組儲存在最低記憶體地址中。小端序機器將 0x12345678 儲存為:

ADD+0: 0x78 
ADD+1: 0x56 
ADD+2: 0x34 
ADD+3: 0x12
廣告