吴忠躺衫网络科技有限公司

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

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

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

怎么解決MCU RAM空間不夠用的問(wèn)題?

TopSemic嵌入式 ? 來(lái)源:TopSemic嵌入式 ? 2024-05-01 09:57 ? 次閱讀

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

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

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

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

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

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

CH573 RAM起始地址為0x20003800

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

通過(guò)map文件可以清楚的看到RAM的實(shí)際占用情況:

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];

這個(gè)和藍(lán)牙協(xié)議棧相關(guān),不可隨意修改。

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

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

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

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

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

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

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


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

    關(guān)注

    10

    文章

    1642

    瀏覽量

    148663
  • RAM
    RAM
    +關(guān)注

    關(guān)注

    8

    文章

    1369

    瀏覽量

    115002
  • BLE
    BLE
    +關(guān)注

    關(guān)注

    12

    文章

    670

    瀏覽量

    59593
  • USB通信
    +關(guān)注

    關(guān)注

    0

    文章

    22

    瀏覽量

    10955
  • OLED顯示
    +關(guān)注

    關(guān)注

    1

    文章

    56

    瀏覽量

    17055

原文標(biāo)題:MCU RAM空間不夠用了怎么辦?

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

收藏 人收藏

    評(píng)論

    相關(guān)推薦

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

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

    單片機(jī)RAM不夠用怎么解決?

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

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

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

    esp32c2同時(shí)開(kāi)啟wifi藍(lán)牙內(nèi)存ram會(huì)有點(diǎn)不夠用,如何能夠多節(jié)省點(diǎn)ram空間出來(lái)嗎?

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

    E幣不夠用

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

    1452的延時(shí)不夠用,外掛ram做延時(shí),請(qǐng)問(wèn)硬件應(yīng)該怎么連接,sigmastudio應(yīng)該怎么設(shè)置?

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

    請(qǐng)問(wèn)DSP中的.ebss文件能否映射到Flash上,SARAM空間有點(diǎn)不夠用

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

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

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

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

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

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

    辦法把reserved的那部分也用起來(lái),我現(xiàn)在因?yàn)橛玫酱罅康膌ong double數(shù)據(jù),malloc申請(qǐng)的內(nèi)存不夠用.問(wèn)題2:想請(qǐng)教下,關(guān)于long double的數(shù)據(jù)類型的計(jì)算,有沒(méi)有什么辦法可以提高
    發(fā)表于 07-22 10:05

    串口不夠用的解決辦法?

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

    IO口不夠用怎么辦?

    C51單片機(jī)————總線與系統(tǒng)擴(kuò)展Created with Rapha?l 2.1.2張三張三李四李四四哥,IO口不夠用怎么辦?你可以進(jìn)行系統(tǒng)擴(kuò)展!什么鬼?那是什么東西?。。。看書去1.引文前面說(shuō)過(guò)
    發(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é),感覺(jué)應(yīng)該是malloc的問(wèn)題,但又不知道怎么改
    發(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)存不夠用是許多計(jì)算機(jī)用戶普遍面臨的問(wèn)題。當(dāng)我們的計(jì)算機(jī)內(nèi)存不足時(shí),會(huì)導(dǎo)致系統(tǒng)運(yùn)行緩慢,應(yīng)用程序無(wú)法正常運(yùn)行,甚至直接導(dǎo)致計(jì)算機(jī)崩潰。然而,幸運(yùn)的是,我們有很多
    的頭像 發(fā)表于 12-28 11:15 ?1205次閱讀
    百家乐赌的技巧| 桌上游戏| 手机百家乐官网能兑换现金棋牌游戏 | 百家乐的庄闲概率| 娱乐城注册送18| 风水做生意店铺的门| 鸿宝娱乐| 网上百家乐哪家最好| 百家乐官网免费是玩| 百家乐技巧-百家乐开户指定代理网址 | 世界顶级赌场酒店| 百家乐官网园试玩| 千亿国际娱乐城| 百家乐微笑投注| 现场百家乐官网百家乐官网| 伯爵百家乐赌场娱乐网规则| 澳门玩百家乐官网赢1000万| 大发888真人真钱| 金皇冠娱乐城| 百家乐赌博娱乐城| 真人百家乐官网澳门娱乐城| 大发888刮刮了下载| 免费百家乐官网统计工具| 察雅县| 老人头百家乐的玩法技巧和规则| 誉博百家乐官网327589| 博彩现金开户| 百家乐视频造假| 网上百家乐官网必赢玩| 千亿娱乐网| 摩纳哥百家乐的玩法技巧和规则| 乐天堂百家乐官网娱乐网| 瑞博网站| 百家乐赌场怎么玩| 百家乐官网游戏机技| 必胜娱乐场| 百家乐皇室百家乐的玩法技巧和规则 | 金木棉百家乐网络破解| 百家乐官网菲律宾| 含山县| 大发888娱乐城存款|