山姆的編程實作分享。。。

Sam Blog, Sam Sharing, Sam Studio

2020年7月19日

[Arduino][ESP32] Out of Program Storage Space


之前也有同好和我反映以下問題,當時只是覺得同好加入太多的函式庫,不以為意,
如今自己也遇到了!
我的程式碼不大,只是單純在原本的 WiFi Switch 程式碼,想再加入 Bluetooth Serial Port Profile
 ( SPP ),來實作 Bluetooth Remote Debug,就碰到這樣的問題,真的是 Orz !

以過去曾經是 WiFi / Bluetooth 研發主管的我,再回到專業的思維後,其實,就可以理解問題所在了。
因為加入 SP profile,並非只是一個 Profile,因為像 SPP,A2DP...這些上層的 profile,都是
架構在 Bluetooth Link Manager Protocol (LMP) / Layer 2 以及 Service Discovery Profile (SDP);
所以,雖然表面上只是單純加入一個 SPP ,但是 LMP 以及 SDP 也都會一併被加入到你的程式碼。

對於預設 (Default Partition Scheme)只有 1.2MB Program Memory (App Partition)  空間的 ESP32 而言 ,若你的程式碼同時使用到 Bluetooth 以及 WiFi 時,遇到此情況想必也是必然的。

你是否也碰過這樣的狀況 ? 你是如何解決?
官方給的這建議 (http://www.arduino.cc/en/Guide/Troubleshooting#size),真的是 "官方語言",唉~

因為程式碼只是會愈長愈大,刪除法只能救急,增加記憶體空間才是長遠之計。

但在硬體配置已經固定的前提下,此時最佳的解決方法就是 " Change Partition Size "了。
因為市面能輕易拿到的 ESP32 板子,都是 4MB 的版本,而我這1345462 bytes 的程式碼
則是遠遠小於 4 MB,絕對可以塞的下,只是需要把App Partition 增大而已,Let's Go !!!




Sketch uses 1345462 bytes (102%) of program storage space. Maximum is 1310720 bytes.
text section exceeds available space in board
Sketch too big; see http://www.arduino.cc/en/Guide/Troubleshooting#size for tips on reducing it.

熱門文章