加入星計(jì)劃,您可以享受以下權(quán)益:

  • 創(chuàng)作內(nèi)容快速變現(xiàn)
  • 行業(yè)影響力擴(kuò)散
  • 作品版權(quán)保護(hù)
  • 300W+ 專(zhuān)業(yè)用戶
  • 1.5W+ 優(yōu)質(zhì)創(chuàng)作者
  • 5000+ 長(zhǎng)期合作伙伴
立即加入
  • 正文
  • 推薦器件
  • 相關(guān)推薦
  • 電子產(chǎn)業(yè)圖譜
申請(qǐng)入駐 產(chǎn)業(yè)圖譜

MCU RAM空間不夠用了怎么辦?

04/22 13:41
2427
閱讀需 4 分鐘
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點(diǎn)資訊討論

之前使用沁恒公司的一款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ī)。

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

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

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

CH573 RAM起始地址為0x20003800

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

比如上述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)注意把所有的中斷處理代碼全部都寫(xiě)在了中斷服務(wù)函數(shù)里,導(dǎo)致占用了很多RAM空間,

其實(shí)只需要按照如下的寫(xiě)法就會(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)寫(xiě)在外面。

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

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

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

關(guān)注公眾號(hào),掃碼加入嵌入式交流群:

推薦器件

更多器件
器件型號(hào) 數(shù)量 器件廠商 器件描述 數(shù)據(jù)手冊(cè) ECAD模型 風(fēng)險(xiǎn)等級(jí) 參考價(jià)格 更多信息
SME2470-021 1 Honeywell Microelectronics & Precision Sensors Photo Transistor Detector, Surface Mount, 3.81 X 2.54 X 2.10 MM, CERAMIC PACKAGE-SME2470
$7.64 查看
SY89831UMG 1 Microchip Technology Inc 89831 SERIES, LOW SKEW CLOCK DRIVER, 4 TRUE OUTPUT(S), 0 INVERTED OUTPUT(S), QCC16
$8.59 查看
CPC1510GSTR 1 IXYS Corporation Transistor Output SSR, 1-Channel, 3750V Isolation, SURFACE MOUNT PACKAGE-6
$2.3 查看

相關(guān)推薦

電子產(chǎn)業(yè)圖譜

TopSemic,讓芯片使用更簡(jiǎn)單。 專(zhuān)注分享:嵌入式,單片機(jī),STM32,ARM,RTOS,Linux, 軟硬件,半導(dǎo)體,電子技術(shù)等相關(guān)內(nèi)容。