MCU并沒有DDR,所以他把代碼存儲在flash上,臨時變量和棧運行在SRAM上。之所以這么做是因為MCU的cpu頻率很低,都是幾十MHZ到一二百MHZ,flash的讀取速度能夠滿足cpu 的取指需求,但flash 的寫入速度很慢,所以引入了SRAM 作為臨時變量和棧的運行空間。
-
關于flash的存儲結構
中斷向量表放置在flash的起始地址,privileged functions 特權模式下執行的指令
.isr_vector section的目的是把中斷向量表放在 0x08000000 這個特定的內存位置,確保中斷向量表占用的內存空間大小是 0x298 字節,將所有包含中斷向量表的目標文件(*(.isr_vector))鏈接到這個 section。
?*(.text section*)中定義的是中斷服務的應用代碼
FreeRTOS系統調用被放置在起始地址0x08008000的flash地址,也就接著特權指令后的地址
FreeRTOS是如何被寫到flash地址的,通過.ld文件鏈接腳本(Linker Script)文件實現的,實現了內存映射,定義目標中不同類型的內存區域,如 Flash、RAM、外設,指定每個內存區域的起始地址和大小。以及實現MPU內存保護。不同芯片文件不一樣,TC397用的vLinkGen.lsl文件實現。
-
關于MCU的內存分配結構:
對于MCU來說,棧區和bss段和data段一般是放在MCU的SRAM區
下面這些都是從RAM里獲取的
常量rodata和代碼存放在MCU的內部flash里
下面都是從flash里獲取的
關于MCU的寄存器地址
寄存器用于暫存CPU內部的數據和狀態。
SRAM用于存儲程序運行時的臨時數據。
FLASH用于存儲程序代碼和持久性配置數據。