嵌入式系統/存儲
在嵌入式系統中,存儲資源是非常寶貴的。一些晶片,尤其是超大規模集成電路(VLSI)和低端微處理器可能僅有很少的板載內存(On-board RAM)。RAM直接建於晶片內部,因此無法擴展。除了RAM之外,嵌入式系統還有非易失性存儲,如小型磁盤,閃存(Flash),或者額外的存儲卡。
一旦系統構建完成,存儲的硬件更改將極為困難。嵌入式系統存儲升級的成本,可能遠遠超出系統的構建成本。例如,為增加系統內存和Flash,將微控制器由Mega8改為Mega128,則晶片成本從4¥上升到18¥;同時,印刷電路板也要根據新的封裝而大規模調整;供電等相關系統也不得不隨之做出調整;程序也需要部分重寫。因此,工程師必須清楚系統擁有的存儲資源是否能夠應對其承擔的任務,並在程序開發過程中,將存儲資源作為重要的參考。
存儲通常被分成不同的幾部分,以執行不同的功能。
尋址
編輯存儲的每個字節,處理器的每個輸入輸出位,都有一個唯一的地址。通過地址,處理器可以從存儲中讀取、寫入數據,能夠控制輸入輸出。
嵌入式系統中共有4種典型的尋址區域(Addressable area),每一種都用不同的技術實現:
- EEPROM程序存儲,也就是晶片的ROM部分。這部分存儲着編寫的程序,即使在掉電的情況下,也不會丟失。當程序運行時,存儲數據可以被修改;而在無斷電狀態下,數據會一直保持。ROM中的數據很少修改,甚至不變。
- Flash程序存儲,另一種ROM,採用與EEPROM不同的技術原理。
- RAM,存放正在運行的程序和數據。初始數據從ROM中讀取;在掉電之後,所有內容都會消失。
- 輸入輸出,控制着微處理器/微控制器的端口輸入輸出。
這裏我們重點討論存儲的尋址。
很多流行的微控制器,比如8051,AVR,PIC,均採用「哈佛結構」。這和通用計算機所採用的「馮·諾伊曼結構」是不同的。
分頁和隊列
編輯通常,應用軟件會不斷地增長。古老的處理器,例如火星漫遊者Sojourner搭載的具有16位地址寄存器的8085處理器,能直接訪問的位置為65 536個。若全部用做內存尋址,處理器也僅僅能訪問65KB內存;事實上還有很多地址被分配給其它物理設備,因此可用內存非常少。為此,必須利用「分頁」(Paging)硬件使不可直接訪問內存的數據與可直接訪問內存進行交換,這樣實際使用內存範圍便擴展了,處理器就可以使用更多的內存。早期的PIC處理器有兩組完全獨立的寄存器,一個用來交換ROM中的數據,一個用來交換RAM中的數據。