這裡僅将嵌入式寫程式中遇到的代碼全局變量過多(做的是雷射雷達的資料處理,資料量有些大),導緻SRAM不夠用的情況簡單分析如下:
SRAM用超之後(多加了個函數),keil編譯器報錯如下:
大意就是No space,之前程式可以有效編譯的結果如下:
代碼占用了多少空間:
Code是代碼占用的空間,RO-data是 Read Only 程式中的指令和隻讀常量的大小,如const型,RW-data是(Read Write) 初始化後為非0的可讀寫變量的大小,ZI-data是(Zero Initialize) 未被初始化或初始化為0的變量的大小。
一個ARM程式包含3部分:RO,RW和ZI(“ARM程式”是指在ARM系統中正在執行的程式,而非儲存在ROM中的bin映像(image)檔案,ARM映像檔案就是指燒錄到ROM中的bin檔案,具體這裡的差別我還沒有細究,具體可參考http://blog.sina.com.cn/s/blog_a189aca10101u1f1.html)
燒寫的FLASH被占用的空間為:Code+RO Data+RW Data=39158+1898+128=41184 Bytes目前是40.22KB
程式運作的時候,晶片内部SRAM使用的空間為: RW Data + ZI Data=128+48312=48440 Byte目前是47.3KB
目前調試用的闆子晶片是stm32f103RCT6,關于stm32晶片命名規則:
STM32 | F | 103 | R | B | T | 6 | B | xxx |
---|---|---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
-
1.産品系列;
STM32代表ST品牌Cortex-Mx系列核心(ARM)的32位MCU
-
2.産品類型;
F:通用快閃(Flash Memory)
L:低電壓(1.65~3.6V)
F類型中F0xx和 F1xx系列為2.0~3.6V
F2xx和F4xx系列為1.8~3.6V
W:無線系統晶片,開發版.
-
3.産品子系列;
050:ARM Cortex-M0核心
051:ARM Cortex-M0核心
100:ARM Cortex-M3核心,超值型
101:ARM Cortex-M3核心,基本型
102:ARM Cortex-M3核心,USB基本型
103:ARM Cortex-M3核心,增強型
105:ARM Cortex-M3核心,USB網際網路型
107:ARM Cortex-M3核心,USB網際網路型、以太網型
108:ARM Cortex-M3核心,IEEE802.15.4标準
151:ARM Cortex-M3核心,不帶LCD
152/162:ARM Cortex-M3核心,帶LCD
205/207:ARM Cortex-M3核心,不加密子產品.(備注:150DMIPS,高達1MB閃存/128+4KB RAM,USB OTG HS/FS,以太網,17個TIM,3個ADC,15個通信外設接口和攝像頭;)
215/217:ARM Cortex-M3核心,加密子產品。(備注:150DMIPS,高達1MB閃存/128+4KB RAM,USB OTG HS/FS,以太網,17個TIM,3個ADC,15個通信外設接口和攝像頭;)
405/407:ARM Cortex-M4核心,不加密子產品。(備注:MCU+FPU,210DMIPS,高達1MB閃存/192+4KB RAM,USB OTG HS/FS,以太網,17個TIM,3個ADC,15個通信外設接口和攝像頭)
415/417:ARM Cortex-M4核心,加密子產品。(備注:MCU+FPU,210DMIPS,高達1MB閃存/192+4KB RAM,USB OTG HS/FS,以太網,17個TIM,3個ADC,15個通信外設接口和攝像頭)
-
4.管腳數目;
F=TSSOP 20腳
E=WLCSP 25腳
G=QFN 28腳
K=QFN 32腳 or WLCSP 36腳
T=LQFP/QFN 36腳 or WLCSP 32腳
C=LQFP/QFN 48腳 or WLCSP 49腳
R=LQFP/BGA/WLCSP 64腳
V=LQFP/BGA 100腳
Z=LQFP/BGA 144腳 or WLCSP 143腳
O=WLCSP 90腳
I=LQFP/BGA 176腳
B=LQFP 208腳
N=BGA 216腳
- 5.閃存存儲器容量:
-
小容量
4=16KB
6=32KB
-
中容量
8=64KB
B=128KB
-
大容量
C=256KB
D=384KB
E=512KB
G=1024KB
I=2048KB
-
-
6.封裝資訊;
T=LQFP
H=BGA
U=VFQFPN
Y=WLCSP/ WLCSP64
-
7.工作溫度範圍;
6=工業級,-40~+85°C
7=工業級,-40~+105°C
-
8.内部代碼;
A:48/32腳封裝
Blank:28/20腳封裝
-
9.包裝方式;
TR:帶卷
XXX:盤裝
D:電壓範圍1.65V – 3.6V且BOR無使能
無特性:電壓範圍1.8V – 3.6V且BOR使能
- (stm32晶片命名規則來自:https://blog.csdn.net/tp1112/article/details/44060549)
可見自己使用的晶片屬于C系列Flash = 256K,RAM = 48K。是以晶片flash可用空間還是充足的,由于全局變量定義過多導緻
RAM不夠用了。
另外通過keil的配置界面也可以檢視晶片flash和RAM的大小,如下:
0x40000對應256KB的flash,0xC000對應48KB的RAM。
ROM主要指:NAND Flash,Nor Flash ;RAM主要指:PSRAM,SDRAM,SRAM,DDRAM
flash是用來存儲代碼的,在運作過程中不能改;EEPROM是用來儲存使用者資料,運作過程中可以改變。
闆子晶片是stm32f103RCT6,屬于大容量晶片:
對于keil中配置加載flash選擇的是512k(但實際自己使用的晶片flash是256KB,應該是按類選擇就這樣)
同樣的程式,之前使用的是stm32F4系列的晶片,這次為闆子接口友善換了一下。這裡對比一下F4和F1的差别:
F4的系統架構:
可見F4的SRAM是很夠我折騰的,而F1的系統架構就簡單很多:
大概梳理了一下,後面估計要換闆子了~
更多無人機知識分享,請關注微信公衆号:欣飛鴿
開心飛翔,靈動如鴿。願與無人機愛好者,共創一片藍天夢!