1.1.1. ram
1.1.1.1 微控制器的ram是sram.
1.1.1.2. sram特點
a.優點,速度快,不必配合記憶體重新整理電路,可提高整體的工作效率,軟體上不需要初始化sram。
b. 缺點,整合度低,功耗較大,相同的容量體積較大,而且**較高,少量用於關鍵性系統以提高效率。
c. sram使用的系統:
(1)cpu與主存之間的快取記憶體。
(2)cpu內部的l1/l2或外部的l2快取記憶體。
(3)cpu外部擴充用的coast快取記憶體。
(4)微控制器記憶體單元
1.1.2. flash
1.1.2.1. 微控制器的flash是norflash
1.1.2.1. norflash 特點
a. nor可以直接使用,並可在上面直接執行**。不需要初始化
b. nor flash帶有sram介面,有足夠的位址引腳來定址,可以很容易地訪問其內部的每乙個位元組
1.1.3. nor flash 和 nand flash對比
b.由於 nand 的資料和位址線共用,只能按「塊」來讀寫資料,假如 nand 上儲存了**指令, cpu 給 nand 位址後,它無法直接返回該位址的資料,所以不符合指令解碼要求。 即不支援立即執行的特性(execute in place),若**儲存在nand上,可以先把它載入到ram儲存器上,再由cpu執行。
1.2.1. keil編譯資訊分析
1.2.1.1. code: 表示程式**部分
1.2.1.2. ro-data: 表示程式中定義的常量(如:const ,字串)
1.2.1.3. rw-data: 表示已初始化的全域性變數
1.2.1.4. zi-data: 表示未初始化或初始化為0的全域性變數
1.2.1.5. 大小計算
a. ro size = code + ro data (程式占用flash空間)
b. rw size = rw data + zi data (執行時程式占用ram空間)
c. rom size = code + ro data + rw data (燒錄時程式占用flash 空間的大小,bin檔案)
ps: 為什麼bin檔案不包含zi data
答:因為zi 資料都是0,只要程式執行前將zi資料所在的區域(ram區域)一律清零即可,如此節省了flash儲存空間
2.1.2. 微控制器ram較小程式太多無法載入全部程式
2.1.4. 總結:雖然微控制器可以把程式載入到ram, 但真的真的沒必要這麼幹。
2.2.1. linux程式比較大,很少用norflash儲存程式,而是用nandflash或sd儲存,故這類儲存 不符合cpu 的指令解碼執行要求。
2.2.2. 執行linux系統的cpu。其執行頻率非常高,遠大於rom讀寫速度,從rom取指會嚴重影響速度。故系統會把程式拷貝到ram執行。
2.2.3. 總結:執行linux系統時程式必須載入到ram
微控制器的ROM與RAM
rom read only memory 程式儲存器 在微控制器中用來儲存程式資料及常量資料或變數資料,凡是c檔案及h檔案中所有 全域性變數 區域性變數 const 限定符定義的常量資料 startup.asm檔案中的 類似arm中的bootloader或者x86中的bios,一些低端的微控制器是沒...
微控制器中ROM和RAM
在微控制器中用來儲存程式資料及常量資料或變數資料,凡是c檔案及h檔案中所有 全域性變數 區域性變數 const 限定符定義的常量資料 startup.asm檔案中的 類似arm中的bootloader或者x86中的bios,一些低端的微控制器是沒有這個的 通通都儲存在rom中。ram randoma...
微控制器中段程式 微控制器程式的存放
1 對於燒錄在微控制器裡面的程式,程式的 段,data段,bss段,rodata段等都存放在微控制器的flash中。當微控制器上電後,初始化彙編 將data段,bss段,複製到微控制器的ram中,並建立好堆疊,開始呼叫程式的main函式。以後,便有了程式儲存器和資料儲存器之分,程式執行時從flash...