MCU記憶體分配

2021-09-05 11:48:29 字數 886 閱讀 6248

首先微控制器的記憶體可以大小分為ram(即sram)和rom(即flash),其中根據flash和sram的定義可得,flash裡面的資料掉電可儲存,sram中的並不可以,但是sram的執行速度要快於flash,可以將微控制器的程式分為code(**儲存區)、ro-data(唯讀資料儲存區)、rw-data(讀寫資料儲存區)和zi-data(零初始化資料區)。其中code和ro-data儲存在flash中,所以兩者之和為微控制器中flash需要分配給它們的空間大小(並且等於**所生成的.bin檔案大小),另外rw-data和zi-data儲存在sram中,同樣兩者之和為微控制器中sram需要分配給它們的空間大小。

棧區(stack)、堆區(heap)、全域性區(靜態區)(static)、文字常量區和程式**區和上面所介紹的code、ro-data等的關係:

1、棧區(stack):由編譯器自動分配釋放 ,存放函式的引數值,區域性變數的值等。其操作方式類似於資料結構中的棧。 這些值是可讀寫的,那麼stack應該被包含在rw-data(讀寫資料儲存區),也就是微控制器的sram中。

2、堆區(heap):一般由程式設計師分配釋放, 若程式設計師不釋放,程式結束時可能由os** 。可以理解,這些也是被包含在微控制器的sram中的。

3、全域性區(靜態區)(static):全域性變數和靜態變數的儲存是放在一塊的,初始化的全域性變數和靜態變數在一塊區域, 未初始化的全域性變數和未初始化的靜態變數在相鄰的另一塊區域,程式結束後由系統釋放。這些資料也是可讀可寫的,和stack、heap一樣,被包含在sram中。

4、文字常量區:常量字串就是放在這裡的。這些資料是唯讀的,分配在ro-data(唯讀資料儲存區),則被包含在flash中。

5、程式**區:存放函式體的二進位制**,可以想象也是被包含在flash,因為對於mcu來說,當其重新上電,**還會繼續執行,並不會消失,所以儲存在flash中。

MCU記憶體分配

lskybs的部落格 談到記憶體,我們都會想到pc,對於微控制器或者arm來說也是存在記憶體的,簡單的理解是 記憶體嘛 就是存放東西的地方,只不過這個東西是資料而已,好了,還是把重點放在mcu上面,對於一款mcu來說,在效能描述的時候都會告訴sram,flash的容量大小,對於初學者來說,也不會去考...

MCU的記憶體簡單介紹

1 棧區 stack 由編譯器自動分配釋放 存放函式的引數值,區域性變數的值等。其操作方式類似於資料結構中的棧。這些值是可讀寫的,那麼stack應該被包含在rw data 讀寫資料儲存區 也就是微控制器的sram中。2 堆區 heap 一般由程式設計師分配釋放,若程式設計師不釋放,程式結束時可能由o...

記憶體分配 Go記憶體管理 記憶體分配一

go作為乙個比較新晚 新 的語言,自然借鑑前輩們的優點,比如說語言本身負責記憶體管理 對協程和高併發的高優支援 簡單高效的語法等。本篇及後續的幾篇要講的就是還沒提到的比較複雜的記憶體管理。學習記憶體管理 分配 前,如果有jvm的記憶體管理的基礎,會變得非常簡單,如果是第一次接觸記憶體管理,在看完go...