stm32存儲資源詳解

戰艦STM32F103ZET6開發板

ZET6芯片

 

該芯片內部自帶了64k字節的SRAM,以及512K的內部FLASH

IROM1=0x80000=512K 和IRAM1=0X10000=64k的大小

同時開發板外置了1M字節外部SRAM芯片(IS62WV51216)

1M字節(即512K*16位)其中512K是由19根地址線決定,219=512K; 16位是由16根數據線決定的

64k字節內部SRAM程序相關

my_mem_init(SRAMIN);	//初始化內部內存池
#define SRAMIN	0    //定義內部內存池
//mem1內存參數設定.mem1完全處於內部sram
#define MEM1_BLOCK_SIZE			32  	  						//一個內存塊大小爲32字節
#define MEM1_MAX_SIZE			40*1024  						//最大管理內存40K字節,可以自己根據需要調整
#define MEM1_ALLOC_TABLE_SIZE	MEM1_MAX_SIZE/MEM1_BLOCK_SIZE 	//內存表的大小
//內存池(32字節對齊)
__align(32) u8 mem1base[MEM1_MAX_SIZE];					//內部sram內存池,數組的起始地址由編譯器自動分配
//內存管理表
u16 mem1mapbase[MEM1_ALLOC_TABLE_SIZE];				//內部sram內存池MAP

1M字節外部SRAM程序相關

my_mem_init(SRAMEX);	//初始化外部內存池
#define SRAMEX	1    //定義外部內存池
//mem2內存參數設定.mem2完全處於外部sram
#define MEM2_BLOCK_SIZE			32  	  						//一個內存塊大小爲32字節
#define MEM2_MAX_SIZE			960*1024  						//最大管理內存960K字節,可以根據自己需要調整
#define MEM2_ALLOC_TABLE_SIZE	MEM2_MAX_SIZE/MEM2_BLOCK_SIZE 	//內存表的大小
//內存池(32字節對齊)
__align(32) u8 mem2base[MEM2_MAX_SIZE] __attribute__((at(0X68000000)));//外部sram內存池,數組的起始地址爲0X68000000
//內存管理表
u16 mem2mapbase[MEM2_ALLOC_TABLE_SIZE] __attribute__((at(0X68000000+MEM2_MAX_SIZE)));//外部sram內存池MAP

分塊式內存管理

   分塊式內存管理由內存池內存管理表兩部分組成。內存池被等分爲 n塊,對應的內存管理表,大小也爲 n,內存管理表的每一個項對應內存池的一塊內存。

   內存管理表的項值代表的意義爲:當該項值爲 0 的時候,代表對應的內存塊未被佔用,當該項值非零的時候,代表該項對應的內存塊已經被佔用,其數值則代表被連續佔用的內存塊數。比如某項值爲 10,那麼說明包括本項對應的內存塊在內,總共分配了 10 個內存塊給外部的某個指針。

   內存分配方向是從頂->底的分配方向。即首先從最末端開始找空內存。當內存管理剛初始化的時候,內存表全部清零,表示沒有任何內存塊被佔用

注:

當涉及到跑算法,GUI應用等內置的內存不夠用時,就用外部的SRAM來擴充內存

程序數據的存儲區域

下載到flash的有:Code: 代碼

                             RO-data:程序定義的常量

                             RW-data:已初始化的非0全局變量,當程序初始化時會拷貝到RAM中去

下載到RAM的有:RW-data:已初始化的全局變量

                              ZI-data:未初始化的全局變量,以及初始化爲0 的變量

STM32F103ZET6的flash資源詳解

  ZET6芯片內部內置了512K字節的flash,用於存放代碼和數據常量,是主存儲塊,起始地址爲0x08000000,這是程序執行的起始地址,此時的BOOT0和BOOT1都接GND.被劃分爲256頁,每頁2K字節

同時開發板外置了16M字節的外部flash芯片,即爲W25Q128

採用spi通信傳輸,分成256個塊(BLOCK),每塊64k字節,每塊又分成16個扇區(sector),每扇區4K字節

相當於stm32外接了一個硬盤,雖調用速度慢,但數據不分丟失,一般用於存放FATFS文件系統,字庫,圖像,日誌

#define FLASH_SECTOR_SIZE 	512			  
//對於W25Q128
//前12M字節給fatfs用,12字節後,用於存放字庫,字庫佔用3.09M,剩餘部分,用戶自定義使用		    
u16	    FLASH_SECTOR_COUNT=2048*12;	//W25Q1218
#define FLASH_BLOCK_SIZE   	8     	//每個BLOCK分配8個扇區
//字庫佔用的總扇區數
#define FONTSECSIZE	 	791
//字庫存放的起始地址
#define FONTINFOADDR 	1024*1024*12 	

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章