程式寫超了(記憶體不夠了)

2021-09-02 22:54:58 字數 2153 閱讀 1265

這裡僅將嵌入式寫程式中遇到的**全域性變數過多(做的是雷射雷達的資料處理,資料量有些大),導致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檔案,具體這裡的區別我還沒有細究,具體可參考

燒寫的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

f103rb

t6b***12

3456

7896.封裝資訊;

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:帶捲

***:盤裝

d:電壓範圍1.65v – 3.6v且bor無使能

無特性:電壓範圍1.8v – 3.6v且bor使能

(stm32晶元命名規則來自:

可見自己使用的晶元屬於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的系統架構就簡單很多:

大概梳理了一下,後面估計要換板子了~

電腦記憶體又不夠了?六個方法拯救你的C盤!

使用電腦的人可以說已經非常多了,但真正懂電腦的人,真正懂得愛護電腦的人確是少數!一台電腦使用得好,使用十年以上是不成問題的,當然很有可能在這期間你忍不住換了新的電腦,哎呀真香!畢竟一台好幾千的東西也不是隨隨便便就能換的,今天就來說說電腦使用時間長了之後,c盤占用太多的問題!標題所說的 記憶體 指的是...

寫程式不慎,變成病毒了

昨天寫了這個方法,在父目錄下建立惟一的子目錄。寫錯了一點點,變成了病毒程式。code 在父目錄下建立惟一的子目錄。param fathercategorypath 要求fathercategory是帶有file.seperator的。return 返回的是子目錄的名稱。public static s...

專業寫程式一年了

最近很忙,好不容易養成的寫日記習慣又丟了。回想起來,正式寫程式有一年了,也該將自己的一些心得體會總結一下了。申請個空間,當作日記也好。園子裡的老趙,隔一兩天就有作品,而且是精品。向人家學習,忙不應該成為藉口。簡單回顧一下這一年的學習。第1月 學.net是有那麼點程式設計基礎了,所以開始進步飛快。認識...