開源 RT Thread Studio,用於晶片的韌體開發
簡介
早期在開發韌體時,電腦環境需要自己架設 cross-compile 環境,並將編譯器的 tool chain 工具設定好路徑才能使用,參考前文 漫談 ARM cross compiler 環境。不過,現在的開發環境人性化多了,市面上有 KEIL、IAR...等 IDE 商業工具,我們編譯 ARM 核心晶片變得很便利。前陣子發現一套開源的 IDE 工具,稱為 RT-Thread Studio,它支援 ARM 和 RISC-V 晶片的韌體編譯,號稱是開發物聯網的 IDE。下載並安裝 RT-Thread Studio 之後,這套工具外觀看起來就是一套類似 eclipse 的工具,對軟體開發者不會陌生。最後說一點,RT Thread Studio 吸引到我的原因,除了開源之外,主要還是使用 KEIL 和 IAR 這些 IDE 工具的開發成本越來越高,不得不找尋新的工具。
套件說明
圖一是創建一個新的項目,我們選用 STM32F103 的晶片來試試看。首先,在創建項目時,可以選定這是 RT-Thread 項目、BSP 項目或者無 RT-Thread 架構的項目。甚麼是 RT-Thread 架構?簡單說,把它想像成是作業系統 (OS) 的架構,底層各類 ARM 或 RISC-V 晶片的 BSP (Board Support Package) 當作驅動程式。此外,這架構還有一個 nano 版本,屬於相對精簡的版本,適合開發資源有限且運算量低的晶片。
圖一:創建一個新項目 |
下圖二是下載資源的視窗,也像 eclipse IDE 一樣,我們可以下載開發時所需要的資源,圖中顯示目前支援的交叉編譯工具有哪些,支援的除錯器又有哪些。一般來說 ARM 的編譯工具市面上已經很常見,不過近期 RISC-V 晶片開始火熱起來 (Intel 加入該領域),因此這套 IDE 非常適合拿來玩一玩 RISC-V 板子。
圖二:編譯的 tool chain 和除錯器 |
圖三:列出支援的板卡 |
下圖四是目前 RT-Thread 架構版本,包含 nano 版本和 LTS 長期支持的版本。此外,可下載晶片的安裝包 (CSP - Chip Support Package),CSP 的內容通常包括晶片 reset 後的初始化,如:設定 clock、中斷向量表、核心暫存器...等相關原始碼。如果晶片原廠有支援 RT-Thread 的話,就能在這兒下載了,目前看起來 STM32 是 RT-Thread Studio 的主力。
圖四:支援的晶片安裝包 |
實際操作一下,新建 nano 項目,以 STM32F103 開發板來做驗證,如下圖五所示,按下 Finish 鍵後,會自動生成所有相關的代碼,呈現如下圖六。圖的最左邊是這個 nano 項目所包含的程式檔案,中間區塊是程式的編寫區,下方是結果輸出區域。我們開啟 main.c 後,加上 GPIO pin 腳的控制程式碼(如下),點亮板子上的 LED 燈號。如果編譯並下載後,能點亮燈號,代表成功了。
__HAL_RCC_GPIOC_CLK_ENABLE();
pinDef.Pin = GPIO_PIN_13;
pinDef.Mode = GPIO_MODE_OUTPUT_PP;
pinDef.Pull = GPIO_NOPULL;
pinDef.Speed = GPIO_SPEED_FREQ_LOW;
HAL_GPIO_Init(GPIOC, &pinDef);
while (count++)
{
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13, bOn ? GPIO_PIN_RESET : GPIO_PIN_SET);
bOn = !bOn;
LOG_D("Hello RT-Thread!");
rt_thread_mdelay(1000);
}
圖五:新建一個 nano 項目 |
圖六:RT-Thread 項目的布局圖 |
Debug 調試
開發板接上 ST-Link debugger 就能在 RT-Thread 開始除錯調試了,如下圖所示。當我們按下 debug 鍵時,卻跳出錯誤視窗,此時不用慌張!到系統的\repo\Extract\Debugger_Support_Packages\STMicroelectronics\ST-LINK_Debugger 目錄下找到 debug.log 檔案,看一看內文的錯誤訊息是怎麼一回事,可能是 ST-Link 除錯器的韌體版本沒更新,或者將 ST-Link debugger v1.6 版本降級來解決。
圖七:ST-Link V2 接上開發板 |
圖八:ST-Link Debug 錯誤視窗 |
最後,成功的情況,我們能看到下圖的畫面。我們可以設 break point,讓程式停在斷點處,右邊小視窗呈現各個變數的數值,左邊則顯示目前的線程。
留言