STM32學習 儲存器組織

2021-08-29 02:13:38 字數 2193 閱讀 3119

stm32f1有四種儲存單元,依次是sram、flash、fsmc和ahb到apb橋(掛載各種外設)。

程式儲存器、資料儲存器、暫存器和輸入輸出埠被組織在同乙個4gb的線性位址空間內。資料位元組以小端格式存放在儲存器中。乙個字裡的最低位址位元組被認為是該字的最低有效位元組,而最高位址位元組是最高有效位元組。

可訪問的儲存器空間被分成8個主要塊,每個塊為512mb。其他所有沒有分配給片上儲存器和外設的儲存器空間都是保留的位址空間。

其詳細儲存分配如下,

以上儲存器對映的對應位址,使用者不可更改。使用者的外設、擴充套件flash和擴充套件ram只能掛在外部裝置區和外部ram區。

flash儲存段劃分
stm32f10***內建64k位元組的靜態sram。它可以以位元組、半字(16位)或全字(32位)訪問。sram的起始位址是0x2000 0000。

sram就是微控制器的記憶體空間,內部非堆即棧。堆由低位址向上增長,位址從0x2000 0000開始,棧由高位址向下增長。堆中包括靜態區和使用者分配空間(malloc分配的空間),靜態區包括全域性變數(zi、rw) 和靜態變數,棧中儲存區域性變數。

; amount of memory (in bytes) allocated for stack

; stack configuration

; stack size (in bytes) <0x0-0xffffffff:8>

; stack_size equ 0x00000400

area stack, noinit, readwrite, align=3

stack_mem space stack_size

__initial_sp

; heap configuration

; heap size (in bytes) <0x0-0xffffffff:8>

; heap_size equ 0x00000200

area heap, noinit, readwrite, align=3

__heap_base

heap_mem space heap_size

__heap_limit

preserve8

thumb

從啟動檔案startup_stm32f10x_hd.s的定義中可以看出,這裡定義了堆疊各自大小,堆:512bytes ,棧:1k。

上面提到,stm32程式在mdk中編譯完成後,會生成幾個段code、ro-data、rw-data、zi-data,其中rw和zi段儲存的是可讀寫的資料變數。程式啟動後,stm32會將可讀寫變數從zi、rw資料段中搬到ram中,為了區分管理記憶體資料,ram也分了幾個區(段)來儲存不同型別的變數。

乙個經典的例子如下:

main.cpp 

int a =0;

//全域性初始化區

char

*p1;

//全域性未初始化區

main()

不同於馮·諾依曼架構的pc機,cortex-m3核心的stm32採用的是哈佛架構,也就是程式和資料分開儲存。在主快閃儲存器儲存器啟動模式下,核心直接從flash中取指令,而無需將flash中的程式挪到ram中執行,所以,該模式下,ram從低位址到高位址依次分為靜態儲存區、堆區、棧區。

全域性區(靜態區)(static):全域性變數和靜態變數的儲存是放在一塊的,初始化的全域性變數和靜態變數在一塊區域,未初始化的全域性變數和未初始化的靜態變數在相鄰的另一塊區域。程式啟動時,stm32根據flash中寫入的rw、zi區資訊,在ram中建立相應變數,程式結束後由系統自動釋放。

棧區(stack):由編譯器自動分配和釋放,存放函式的引數值、區域性變數的值等,其操作方式類似於資料結構中的棧。

堆區(heap):一般由程式設計師分配和釋放,若程式設計師不釋放,程式結束時可能由作業系統**。分配方式類似於資料結構中的鍊錶。

STM32儲存器對映

stm32儲存器對映 1 cortex m3儲存器對映cm3的位址空間有4g,但它只對這4g空間作了預先的定義,把4g空間分成8個塊,每塊大小為512m,並指出各段該分給哪些裝置。具體的實現由晶元廠商決定,廠商可以設計出具有自己特色的產品。下圖是cm3的儲存器對映圖 來自cm3權威指南 1.1 st...

STM32儲存器結構 儲存器對映

問題 1 什麼是儲存器對映?是怎麼乙個運作過程?2 stm32總體架構 3 cm3核心結構 以下 1 stm32系統結構 要想深刻理解stm32的儲存器,需要首先知道stm32的系統結構。如figure 1,是stm32系統結構框圖。根據stm32 reference manual rm0008 中...

stm32儲存結構 儲存器對映

問題 1 什麼是儲存器對映?是怎麼乙個運作過程?2 stm32總體架構 3 cm3核心結構 1 stm32系統結構 要想深刻理解stm32的儲存器,需要首先知道stm32的系統結構。如figure 1,是stm32系統結構框圖。根據stm32 reference manual rm0008 中的描述...