文章

顯示從 1月, 2022 起發佈的文章

ESP32 內置記憶體的分區表 (partition table)

圖片
分區表 # ESP32 flash 內置分區表 (Partition Table)         ESP32 內建 flash,這個 flash 被規劃成數個區塊,稱為分區表(partition table)。ESP32 將分區表分成三類:第一為單一應用程式且無 OTA 區塊(single factory app, no OTA),圖一所示。第二為具有 OTA 定義的區塊(factory app, two OTA definitions),圖二所示,這被規劃做為韌體更新的分區表,可以更新應用程式區塊。第三為客戶自行定義的分區表。 圖一:單一應用程式的分區表 圖二:具有 OTA 的分區表         底下的影片詳細描述內建的分區表,表上有幾個部分是不會變動的,如:Bootloader 、 分區表 、 NVS資料區 、 硬體資料區 、 應用程式區...等。Bootloader 程式的大小約莫小於 0x7000 (28672 Bytes),開機後執行 Bootloader,然後跳到應用程式運行。到應用程式,可以存取 NVS 資料區,這是一塊非揮發性記憶空間,適合做為 config 之用。 函數         ESP-IDF component 提供 NVS 相關的函數,在範例程式中,有 C 語法調用的方式,也有 C++ 語法的調用。C 語法的做法,先透過 nvs_open / nvs_close 這對函數取得 NVS 的控制權杖,然後才能調用存取的函數,如:nvs_get_i8 、 nvs_get_i16 、 nvs_set_i8 、 nvs_set_i16...等,依據資料的大小來調用適合的存取函數。而 C++ 語法的做法,也是透過 open_nvs_handle 取得控制權,再來調用 get_item 、 set_item...等存取函數。

ESP-IDF 在 Visual Studio Code 教學 (不同於 ESP32 Arduino IDE)

# ESP32 在 VS Code 開發環境的編譯與除錯         距離上次寫關於 ESP-IDF 文章已經一年了,參考上面的連結,這期間 Espressif IDF 版本升了不少級數,在程式開發上又新增了一些便利的功能。首先在 Visual Studio Code 先安裝插件 Espressif IDF Configuration,如下圖影片所展示。現階段並沒有安裝最新的插件 v1.3.0,因為 VS Code 和 Espressif 之間似乎有不相容的問題,網上有人也提到遇到版本問題,所以我們現階段就安裝前一版本,等待一段時間後,問題解決了,再升級到最新版。         在 v1.2.0 Espressif 新增一個功能,創建新項目 (New Project),如下面影片所展示。我們從配置中能設定項目名稱,選定路徑,選擇使用的開發板型號,最後可以選擇由系統的 template 範例來創建新項目,或者自行手動添加項目所需的 Components 來創建。         創建項目後,我們可以在 VS Code 環境進行編譯,當然也可以在 Command Line 的終端機環境下編譯。在終端機環境下,我們必須先設定環境變數,執行 export.bat ,參考底下影片的操作。接著,我們就能以指令方式執行編譯," idf.py  build ",然後燒錄上傳也是用指令執行。使用時,可先查看 idf.py 這個程式的說明。         終端機方式並不是我們首選的環境,回到 VS Code 環境上。有關編譯項目的參數,我們要打開 SDK Configuration,請參考下面影片所展示。SDK Configuration 畫面裡所有的配置是來自 sdkconfig 這個文件,可以用一般的文件方式打開來看看,裡面的參數主要定義 ESP32 系統層級的配置。除了這個文件之外,每個子項目或路徑底下還有個別的參數,檔名為 Kconfig.projbuild ,這文件檔採用結構式的編排,當 SDK 配置時會將這個檔案也一起載入,我們可以比對 Kconfig 檔案內容與 SDK 呈現的欄位之間的關係。         最後談到編譯項目的內容,編譯的配置是由 CMake 工具來執行的,在每個項目底下有一個 CMakeLists.txt 文件,而在項