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

Sam Blog, Sam Sharing, Sam Studio

2020年8月4日

[Arduino][ESP32] Change Partition - By 懶人改法


下面是 ESP32 Dev Module 在 Boards.txt 的描述
Line 29 ~ 61 就描述了 ESP32 Dev Module 支援那些 Partition CSV

以 Line 29,30 為例,就描述支援的 Partition Scheme ,
名稱為 " Default 4MB with spiffs"
對應的Partition CSV File 為 "default.csv"

2020年8月2日

[Arduino][ESP32] Change Partition


[Arduino][ESP32]

Change Partition

Out of Program Memory

在這篇心得筆記 ([Arduino][ESP32] Out of Program Storage Space) 裡,

我說明 ESP32 了,為何同時開啟 WiFi 以及 Bluetooth 就會觸發

Out of  Program Memory 這問題,在文章的結尾也點出這問題的解法,

就是 “Change Partition Size” 或是說 “ 選擇適合你應用的Partition Table”,

因為ESP32 的開發環境已經提供各式各樣的 Partition Tables,

只是沒被有效的引用而已。

3 Ways for Changing Partition

更改 Partition Size 或 Partition Table,並非只有3種途徑,例如透過 ESPRESSIF

原廠提供的 IDF 開發來更改,不是更正式更適合嗎?不推薦,是因為使用 IDF 開發

環境的人,應該不用看我的文章吧!哈哈 😅😅

以下我推薦這3種改法

  1. 修改Boards.txt 以及創建或修改既有的 Partition CSV

透過修改Boards.txt,此方法是正規做法,但創建或修改既有的 Partition CSV

必需具備一些預備知識;若你清楚Partition Type,Partition SubType 的定義,

這方法絕對是更改Partition Size 或 Partition Table 的最佳途徑。

若不清楚Partition Type,Partition SubType 的定義,真的只能用第二種懶人改法 ?

     不是的!以下我的另一篇文章就是教你不改又不創建Partition的情況下,讓你目前的

Board Type 也擁有幾個 Partition Schemes 可用。

([Arduino][ESP32] 如何快速簡單的引用 Arduino 內建的Partition Tables)

  1. 懶人改法 (懶人改法步驟說明)

此方法是直接更改 Board Type 為 “ESP32 Dev Module”,這樣ESP32既有的

Partition Tables 就會出現在Arduino IDE Board Manager 的選單內,

供你選用了;此方法可謂是暴力改法,不須具備任何預備知識,唯一要注意的是

你手上的ESP32板子,和在Boards.txt描述的ESP32 Dev Module 的差異不可太大。

  1. By GUI

此方法,個人並未使用過,只是在搜尋最便利更改Partition的方法時,路過發覺的;

此方法是在Arduino IDE下,再外掛軟體,安裝完外掛軟體後,在 Arduino IDE 的選單下

就會多出一個 “ESP32 Partition Manager”的選單,供你創建或修改既有的

Partition CSV。

以下是這外掛軟體的連結。

ESP32 Partition Manager


教學影片也在 YouTube上架了喔 !

Arduino 教學 : Out of Program Memory | Change Partition



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.

熱門文章