日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

2.2 STM32 RAM溢出分析(KEIL在Build的时候提示Error:L6406E:No space in execution)

發布時間:2023/12/14 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 2.2 STM32 RAM溢出分析(KEIL在Build的时候提示Error:L6406E:No space in execution) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

科普:
先請問大家一個問題:keil5編譯后生成 Program Size: Code RO-data RW-data ZI-data是什么?
Program Size: Code=x RO-data=x RW-data=x ZI-data=x 的含義
Code(代碼): 程序所占用的FLASH大小,存儲在FLASH.
RO-data(只讀的數據): Read-only-data,程序定義的常量,如const型,存儲在FLASH中。
RW-data(有初始值要求的、可讀可寫的數據):
Read-write-data,已經被初始化的變量,存儲在FLASH中。初始化時RW-data從flash拷貝到SRAM。
ZI-data:Zero-Init-data,未被初始化的可讀寫變量,存儲在SRAM中。ZI-data不會被算做代碼里因為不會被初始化。
ROM(Flash) size = Code + RO-data + RW-data;
RAM size = RW-data + ZI-data
簡單的說就是在燒寫的時候是FLASH中的被占用的空間為:Code+RO Data+RW Data
程序運行的時候,芯片內部RAM使用的空間為: RW Data + ZI Data

==================================================
要想知道RAM溢出分析,對內存需要比較了解。實際上:

====================================================

**Total RO Size (Code + RO Data) Total RW Size (RW Data + ZI Data) Total ROM Size (Code + RO Data + RW Data)**

====================================================
ZI-data: 已定義未初始化或者初始化為0的變量大小
RW-data:已經初始化的變量大小

Total RW Size 就是STM32中的RAM內存空間。

個人做了一個實驗論證了一下:
參考代碼,使用全局變量來占用RAM

#define KB_BYTE 1 uint8_t fft1_output[1024*KB_BYTE]; void StartTask06(void const * argument) {BaseType_t xReturn = pdPASS;int AI_Result[3]={0};for(;;){xReturn=xSemaphoreTake(xBSem_AI_Start_Flag,portMAX_DELAY); //if(xReturn==pdTRUE){ for(uint32_t i;i<1024*KB_BYTE;i++){fft1_output[i]=fft1_output[i]+fft1_output[i];}}} }

測試條件:STM32F4,RAM為128K。編譯器為level 0,數組定義為全局變量,代碼路上。Program Size如下

從上面可以看出,當數組為56K(56*1024)大小時,RAM為128.5K溢出。報錯
Error: L6406E: No space in execution regions with .ANY selector matching xxx.o(.data).

為了更為精確的測試,我們利用數組,湊齊128K,代碼同上


圖一:

圖二:

另外測試過程中發現,定義的全局變量數組必須在函數中使用到。不然會被keil編譯優化掉。使得數據一直不會變。

總結

以上是生活随笔為你收集整理的2.2 STM32 RAM溢出分析(KEIL在Build的时候提示Error:L6406E:No space in execution)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。