1、mcu不同變數的儲存位置
區域性變數:棧區(stack)—— 由編譯器自動分配和釋放
區域性靜態變數:靜態區 —— 程式結束後由系統釋放
全域性變數:靜態區的常量區
全域性靜態變數:靜態區
堆區(heap)—— 一般由程式設計師自行分配和釋放,分配malloc和new申請的區域
2、cortex-m0系列微控制器中斷向量表分布情況
0x00000000
棧頂位址(_inital_stack)
0x00000004
reset_handler位址
0x00000008
nmi_handler位址
....
hardfault_handler
...svc_handler
...pendsv_handler
...systick_handler
...外部中斷
其中reset_handler裡面進行了systeminit工作以及跳轉到_main函式
在.map檔案可檢視實際的_inital_stack位址,是編譯器自動分配的,檢視後可發現其被分配在mcu的2kb的sram區中
mcu中能存放資料的位置主要有:register、ram和rom
iar的預定義說明:
section.txt段:存放**,一般在rom中
section.rodata段:存放唯讀資料,一般在rom中
section.noinit段:存放不需初始化資料,一般在ram中
section.bss段:存放預設初始化資料,一般在ram中
section.data段:存放已初始化資料嗎,一般在ram中
cstack段:棧,一般在ram中
heap段:堆,一般在ram中
各型別變數的在mcu中的實際儲存位置
巨集變數 #define 變數名 數值
——在預編譯時彙編進section.txt段,一般存放在rom中,執行時已經不存在
常量 const 變數名 數值
——直接存放在section.rodata段,一般存放在rom中,訪問時從rom中取出
未初始化全域性變數 _no_init 變數型別 變數名
——存放在section.noinit段,一般在ram裡,執行期間可訪問
預設0初始化全域性變數 變數型別 變數名
——存放在section.bss段,一般在ram中,啟動時.bss段會被清零
已初始化全域性變數 變數型別 變數名 值
——初始化值一般存放在section.data_init段,一般在rom中,變數本身在section.data段,啟動時將初值從.data_init段複製到section.data段
已初始化暫存器變數 register 變數型別 變數名 初始值
——初始化值存放在.section.txt段,變數本身存放在cpu的暫存器中
已初始化區域性變數 變數型別 變數名 初始化值
——初始化值存放在section.rodata段(rom)中,變數本身存放在棧中(一般在ram裡)
動態記憶體申請 malloc和new函式
——賦值存放在section.txt段,申請的記憶體區在堆裡(一般在ram中)
Cortex M3儲存器對映
cortexm3儲存器系統 宗旨 技術的學習是有限的,分享的精神是無限的。cm3 只有乙個單一固定的儲存器對映。這一點極大地方便了軟體在各種 cm3 微控制器間的移植。儲存空間的一些位置用於除錯元件等私有外設,這個位址段被稱為 私有外設區 私有外設區的元件包括 快閃儲存器位址過載及斷點單元 fpb ...
LPC2000系列學習筆記4 儲存器對映控制
對於一般的處理器,系統啟動後是從0x00000000 位址開始讀取中斷向量表並引導程式的。但利用lpc2000 的儲存器重對映功能,我們可以將中斷向量表轉移至其它儲存器,而不一定要從0x00000000 這個位址讀取。lpc2000 的這個功能是通過儲存器對映控制暫存器memmap 和boot 管腳...
s3c6410儲存器對映
1.引導映象區 0x0000 0000 0x07ff ffff 2.內部儲存區 1 內部rom 0x0800 0000 0x0bff ffff 2 內部sram 0x0c00 0000 0x0fff ffff 3.靜態儲存區 0x1000 0000 0x3fff ffff 4.動態儲存區 0x400...