0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內(nèi)不再提示

怎么解決MCU RAM空間不夠用的問題?

TopSemic嵌入式 ? 來源:TopSemic嵌入式 ? 2024-05-01 09:57 ? 次閱讀

之前使用沁恒公司的一款BLE芯片CH573,隨著代碼量的增多,開發(fā)到后期時遇到了RAM空間不夠用的問題,當時嚇了我一跳,以為需要重新?lián)Q更大RAM的芯片。后來經(jīng)過一番分析,優(yōu)化之后省出來一部分空間,解決了RAM危機。

30fba576-0049-11ef-a297-92fbcf53809c.png

CH573的Flash挺大,但是RAM只有18K。只跑一個BLE的HID_Keyboard例子就會占用接近14K,留給用戶真正能使用的RAM空間只有約4K。

310efbbc-0049-11ef-a297-92fbcf53809c.png

項目里除了用到BLE還用到了USB通信OLED顯示等功能,所以一不小心RAM就緊張了。

在優(yōu)化RAM空間之前,首先要利用好map文件,查看RAM空間的實際占用情況,這樣才好針對性去優(yōu)化。

CH573 RAM起始地址為0x20003800

311a49d6-0049-11ef-a297-92fbcf53809c.png

通過map文件可以清楚的看到RAM的實際占用情況:

3125862a-0049-11ef-a297-92fbcf53809c.png

31364dde-0049-11ef-a297-92fbcf53809c.png

比如上述MEM_BUF就占用了6K空間,它在程序中定義如下:

#define BLE_MEMHEAP_SIZE          (1024*6)
attribute((aligned(4))) uint32_t MEM_BUF[BLE_MEMHEAP_SIZE / 4];

這個和藍牙協(xié)議棧相關,不可隨意修改。

我當時主要優(yōu)化了一個地方:中斷服務函數(shù)。CH573要求中斷服務函數(shù)放到RAM里(猜測可能是為了提高響應速度),我之前沒注意把所有的中斷處理代碼全部都寫在了中斷服務函數(shù)里,導致占用了很多RAM空間,

其實只需要按照如下的寫法就會節(jié)約很多空間:

/*********************************************************************
 * @fn      USB_IRQHandler
 *
 * @brief   USB中斷函數(shù)
 *
 * @return  none
 */
__attribute__((interrupt("WCH-Interrupt-fast")))
__attribute__((section(".highcode")))
void USB_IRQHandler(void) /* USB中斷服務程序,使用寄存器組1 */
{
    USB_DevTransProcess();
}

即將USB_DevTransProcess()函數(shù)的具體實現(xiàn)寫在外面。

除此之外,還有比如靈活使用const關鍵字、使用union等方法,不在此詳細介紹了。

重要的是利用好map文件,找到占空RAM大的地方,對應去優(yōu)化。

在成本允許的情況下,當然是一開始就選擇一款RAM空間足夠大的MCU最好。


審核編輯:劉清
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • FlaSh
    +關注

    關注

    10

    文章

    1635

    瀏覽量

    148016
  • RAM
    RAM
    +關注

    關注

    8

    文章

    1368

    瀏覽量

    114681
  • BLE
    BLE
    +關注

    關注

    12

    文章

    660

    瀏覽量

    59406
  • USB通信
    +關注

    關注

    0

    文章

    22

    瀏覽量

    10912
  • OLED顯示
    +關注

    關注

    1

    文章

    55

    瀏覽量

    17001

原文標題:MCU RAM空間不夠用了怎么辦?

文章出處:【微信號:TopSemic,微信公眾號:TopSemic嵌入式】歡迎添加關注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關推薦

    PCB面積總是不夠用?試試這個方案唄~

    PCB面積總是不夠用?試試這個方案唄~
    的頭像 發(fā)表于 10-17 15:14 ?930次閱讀
    PCB面積總是<b class='flag-5'>不夠用</b>?試試這個方案唄~

    單片機RAM不夠用怎么解決?

    來自一位用戶的咨詢,麻煩幫忙解答。越詳細越好,有圖有真相。如有相關的視頻、文檔也可以輔助說明,謝謝。 單片機RAM不夠用怎么辦? 單片機都有RAM,如果我們一下子定義了一大堆的變量,使得變量占的
    發(fā)表于 02-02 07:35

    stm32f103rbt6加上exfuns_init()函數(shù)就空間不夠用了,有什么好的建議?

    主芯片用的stm32f103rbt6 加上exfuns_init()函數(shù)就空間不夠用了,有什么好的建議? 板子已實現(xiàn)u盤功能。我想通過串口使用mf_scan_files(\"0:\")之類的命令。但主函數(shù)中加入初始化語句就已經(jīng)容量不夠
    發(fā)表于 05-17 07:23

    esp32c2同時開啟wifi藍牙內(nèi)存ram會有點不夠用,如何能夠多節(jié)省點ram空間出來嗎?

    如題 esp32c2 同時開啟wifi藍牙 內(nèi)存ram會有點不夠用,有大佬知道如何能夠多節(jié)省點ram空間出來嗎
    發(fā)表于 06-05 06:48

    E幣不夠用

    E幣不夠用,{:1:}{:16:}
    發(fā)表于 04-29 18:12

    1452的延時不夠用,外掛ram做延時,請問硬件應該怎么連接,sigmastudio應該怎么設置?

    1452的延時不夠用,打算外掛ram做延時。。。請問硬件應該怎么連接,sigmastudio應該怎么設置呢?
    發(fā)表于 08-03 06:41

    請問DSP中的.ebss文件能否映射到Flash上,SARAM空間有點不夠用?

    DSP中的.ebss文件能否映射到Flash上,SARAM空間有點不夠用?請高手指點,不勝感激!
    發(fā)表于 12-03 16:01

    mini板上lwip+ucosii移植ram不夠用該怎么辦?

    板子只有48k的ram,而且mini沒有外置ram,為什么???如果在103r8上跑lwip和ucosii可以嗎,感覺可以rom和ram不夠用,這個配置應該怎么搞呢?十分感謝~~~
    發(fā)表于 08-20 04:35

    DSP匯編程序用軟件仿真時,寫文本段發(fā)現(xiàn)RAM不夠用怎么解決?

    原來有一套可以直接燒錄到flash的程序,現(xiàn)在想改成用硬件仿真器XDS510可以在線單步測試的程序,修改CMD文件,把原來在flash的段改成在RAM段,發(fā)現(xiàn)RAM不夠用,怎么辦?
    發(fā)表于 07-13 06:31

    malloc申請的內(nèi)存不夠用怎么解決?

    辦法把reserved的那部分也用起來,我現(xiàn)在因為用到大量的long double數(shù)據(jù),malloc申請的內(nèi)存不夠用.問題2:想請教下,關于long double的數(shù)據(jù)類型的計算,有沒有什么辦法可以提高
    發(fā)表于 07-22 10:05

    串口不夠用的解決辦法?

    我要用好我個串口,但是單片機上就必個,串口不夠用,怎么辦?
    發(fā)表于 08-04 00:56

    IO口不夠用怎么辦?

    C51單片機————總線與系統(tǒng)擴展Created with Rapha?l 2.1.2張三張三李四李四四哥,IO口不夠用怎么辦?你可以進行系統(tǒng)擴展!什么鬼?那是什么東西?。。??磿?.引文前面說過
    發(fā)表于 07-19 07:21

    stm32出現(xiàn)ram、rom不夠用怎么解決?

    stm32出現(xiàn)ram、rom不夠用怎么解決?
    發(fā)表于 02-16 06:00

    stm32出現(xiàn)ram、rom不夠用,調(diào)試方法

    手里有一塊stm32f103r8ct的板子,想移植ucosii+lwip,使用原子mini的源代碼提示ram、rom不夠用,一直很糾結(jié),感覺應該是malloc的問題,但又不知道怎么改
    發(fā)表于 12-20 19:15 ?3次下載
    stm32出現(xiàn)<b class='flag-5'>ram</b>、rom<b class='flag-5'>不夠用</b>,調(diào)試方法

    內(nèi)存不夠用的處理方法

    內(nèi)存不夠用的處理方法 內(nèi)存不夠用是許多計算機用戶普遍面臨的問題。當我們的計算機內(nèi)存不足時,會導致系統(tǒng)運行緩慢,應用程序無法正常運行,甚至直接導致計算機崩潰。然而,幸運的是,我們有很多
    的頭像 發(fā)表于 12-28 11:15 ?1066次閱讀