為何微控制器程式不用載入到RAM

2022-07-25 08:45:11 字數 1565 閱讀 6545

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...