在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

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

3天內不再提示

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

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

之前使用沁恒公司的一款BLE芯片CH573,隨著代碼量的增多,開發到后期時遇到了RAM空間不夠用的問題,當時嚇了我一跳,以為需要重新換更大RAM的芯片。后來經過一番分析,優化之后省出來一部分空間,解決了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就緊張了。

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

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

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

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

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

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

即將USB_DevTransProcess()函數的具體實現寫在外面。

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

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

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


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

    關注

    10

    文章

    1635

    瀏覽量

    148023
  • RAM
    RAM
    +關注

    關注

    8

    文章

    1368

    瀏覽量

    114697
  • BLE
    BLE
    +關注

    關注

    12

    文章

    660

    瀏覽量

    59410
  • USB通信
    +關注

    關注

    0

    文章

    22

    瀏覽量

    10912
  • OLED顯示
    +關注

    關注

    1

    文章

    55

    瀏覽量

    17001

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

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

收藏 人收藏

    評論

    相關推薦

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

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

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

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

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

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

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

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

    E幣不夠用

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

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

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

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

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

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

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

    DSP匯編程序用軟件仿真時,寫文本段發現RAM不夠用怎么解決?

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

    malloc申請的內存不夠用怎么解決?

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

    串口不夠用的解決辦法?

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

    IO口不夠用怎么辦?

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

    stm32出現ram、rom不夠用怎么解決?

    stm32出現ram、rom不夠用怎么解決?
    發表于 02-16 06:00

    stm32出現ram、rom不夠用,調試方法

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

    內存不夠用的處理方法

    內存不夠用的處理方法 內存不夠用是許多計算機用戶普遍面臨的問題。當我們的計算機內存不足時,會導致系統運行緩慢,應用程序無法正常運行,甚至直接導致計算機崩潰。然而,幸運的是,我們有很多
    的頭像 發表于 12-28 11:15 ?1066次閱讀
    主站蜘蛛池模板: 久久免费视频2| 午夜 在线播放| 国产精品资源手机在线播放| 丁香婷婷久久大综合| 午夜影剧| 国产伦精品一区二区免费| 欧美xxxxxxxxx| 香蕉成人国产精品免费看网站| 国模于子涵啪啪大胆| 奇米色影院| 天天干人人干| 欧美亚洲啪啪| 色香视频在线| a理论片| 免费观看在线视频| 四虎传媒| 国产色视频一区| 大黄蕉| 婷婷激情亚洲| 亚洲第一区视频在线观看| 国产午夜精品久久久久九九| 亚洲天堂视频一区| 天堂网成人| 狠狠色丁香婷婷久久| 国产精品免费久久| 我想看一级黄色片| 亚洲爱爱图| 激情五月社区| 国产精品四虎在线观看免费| 欧美最猛黑人xxxxwww| 亚洲色图在线观看视频| 欧美成人免费| 久久久久久国产精品mv| 新激情五月| 亚洲午夜一区| 成 人 在 线 免费 8888 www| 黄 色 片免费观看| 巨骚综合网| 老色99久久九九精品尤物| 999精品国产| 欧美有码视频|