文章目錄
- 概述
- LiteOS Studio
- 不推薦?
- 安裝和使用手冊呢?
- HCIP實驗的源碼呢?
- 軟件和依賴安裝
- 軟件下載
- 軟件安裝
- 插件安裝
- 依賴工具-方案2
- 依賴工具-方案1
- 工程配置
- 打開或新建工程
- 板卡配置
- 組件配置
- 編譯器配置-gcc工具鏈
- 編譯器配置-Makefile腳本
- 其他配置
- 編譯完成
- 編譯和燒錄
- 可執行文件
- STLink轉JLink
- 燒錄器配置
- 燒錄步驟
- 驗證和調試
- 程序運行
- 若無打印輸出
- 源代碼分析
- elf 文件
- 調試器配置
- 單步調試
- 再見
概述
本文詳細介紹了華為云物聯網專用集成開發環境 LiteOS Studio 的搭建過程和使用方法。可基于此環境完成HCIP-IOT實驗。
@HISTORY
為了更好的完成基于小熊派開發板的HCIP實驗,我的大多實踐并沒選用 LiteOS Studio IDE,而是用小熊派社區推薦的 VSCode + Gitbash+GCC 工具模式,也嘗試使用過 VSCode+IoT Link 插件模式。在不少地方提到,若聚焦華為硬件與云服務,LiteOS Studio 會更高效,經不住誘導,且HCIP實驗指導手冊中使用的是 Studio 環境,故再次嘗試安裝并使用 LiteOS Studio 集成開發環境。
怎么說呢,挺煩的。在開始的差不多一個月內,我始終沒有找到 Studio 的安裝和使用手冊,無論是GitEE、GitHub、華為社區,相關鏈接都是失效的。在沒有詳細指導手冊的情況下,我只能憑借對類似開發環境的認知和依賴包等,硬強的搭建起了IoT Studio環境。但整個過程相當的不爽,耗費了很多時間,是浪費,這個過程我也簡單有所記錄。
直到后來,還是意外地發現,雖然網絡資料中的各種連接都是失效的,但 LiteOS Studio 的詳細的安裝說明、使用說明,依然還在,在Git上就有,只是我沒有留意到。有了官方保姆級的說明書后,一切就變得順當了許多,算是豁然開朗吧。
LiteOS Studio
我在這套開發環境的搭建和測試上,耗費了不少心血,推薦還是不推薦呢?
不推薦?
2個月前,我并不推薦使用該IDE環境,主要是因為它多年前就不再被維護了。后來我找到了詳細說明書,情況就不一樣了!
HUAWEI LiteOS Studio是以Visual Studio Code的社區開源代碼為基礎,根據C編程語言特點、LiteOS嵌入式系統軟件的業務場景,定制開發的一款輕量級集成開發環境解決方案。它提供了代碼編輯、編譯、燒錄、調試等能力。
相比于原始的 VSCode 工具,LiteOS Studio 專為華為 LiteOS 設計,面向物聯網嵌入式開發。一站式集成內置組件配置、燒錄、調試工具,提供系統級跟蹤調試(如內存監控、任務棧分析)。深度集成華為云 IoT 平臺(不需要額外的插件擴展云服務),包含完整工具鏈和 SDK。LiteOS Studio采用混合開源模式,其核心框架和基礎工具鏈開放源碼(BSD-3協議),但涉及華為芯片深度集成和商業服務的模塊仍為閉源。開發者可根據需求選擇開源版本或申請商業授權。
不光不建議使用,開始我是拒絕甚至厭惡此開發環境的。20250415,由于HCIP實驗3使用的是該環境,本著按部就班的原則,生怕錯過什么,于是重啟安裝并使用此環境。到最后,感覺還行,至少這個過程也促使我思考并Get到了些知識點。
安裝和使用手冊呢?
在202503期間,第一次嘗試中,光是如何下載該工具,就別扭了一番。
在華為云搜索窗口搜索 #LiteOS Studio#,可以在華為云在線文檔資源中找到 安裝LiteOS Studio、LiteOS Studio安裝指南,GitEE Liteos_studio、開發者聯盟官網 等字樣的連接,可惜它們全是失效狀態。這么不走心,所以就不想用它了。
當初我還總結了如下不想使用該環境的幾點原因:
1、官方文檔給出的連接多是失效的,無論是指向github還是gitee的。
2、軟件已經停更多年,其依賴的VSCode版本也相當的陳舊。上述GitEE項目雖然還在,但是早已沒有人維護,項目相關的安裝文檔、使用文檔等全部缺失(在一些老舊的網絡文章中,是提及曾經有這些文檔的),即使有連接但也都打不開,ISSUE也有人提問,始終無人應答。
3、擔心會和新版本的VSCode存在安裝沖突不!實踐證明,這個現象沒有出現。
4、在插件安裝界面,不能聯網。實踐表明,這可能是工具開發者有意為之,直接從代碼層級上關閉了軟件的聯網功能。因為,即使我開著軟件自動更新配置,也不會彈更新提示。
時間到了5月4號,我在查看某篇文章的參考鏈接時,才意外訪問到了LiteOS Studio 使用手冊,它就在已經被我訪問了多次的,GittEE/開源項目 > 開發工具/Huawei LiteOS/LiteOS_Studio項目之下。該項目docs目錄下,包含studio的介紹、安裝、配置等,非常詳細。也就是說,LiteOS Studio 使用手冊還在,只是項目主頁的連接不對了。
我在 GitEE開源項目 > 開發工具/Huawei LiteOS/LiteOS_Studio 上提交了修改,不過該項目沒有人維護,可能不會通過申請。所以我Fork了該項目。可參見 qugx0528 HUAWEI LiteOS Studio 簡介,該頁面中的跳轉鏈接,我已修改提交,
HCIP實驗的源碼呢?
參照HCIP-IOT實驗手冊,應該使用名為 LiteOS_Lab_HCIP 的源碼,配置LiteOS Studio環境的使用和學習。
可惜,我在 GitHub 和 GitEE 上都搜不到LiteOS_Lab_HCIP源碼項目,只能找到 LiteOS_Lab 項目,但沒有實驗手冊中的案例。在華為云論壇也沒搞到下載鏈接。好在,實驗手冊中的案例,我是見過的,在小熊派社區提供的資料中。BearPi-IoT_Std開發板案例代碼下載,GitEE地址,BearPi-IoT_Std_LiteOS 源碼,GitEE下載地址。HCIP實驗手冊提及的helloword,在BearPi-IoT_Std_LiteOS項目下,
順嘴也說一些 LiteOS_Lab 項目,其本質上是開發實驗框架與工具鏈。它是圍繞LiteOS內核構建的開發環境,提供針對具體硬件平臺(如STM32系列)的示例代碼、編譯工具鏈和配置工具,幫助開發者快速上手LiteOS開發。實際上,這里頭沒有看到小熊派的案例程序,也沒看見工具鏈,但卻有許多非常有用的文檔,如 IoT SDK 架構,各種開發指南,LiteOS使用說明等。
后續在華為云社區也找到了下載鏈接,已合并上傳到CSDN
https://bbs.huaweicloud.com/forum/thread-68066-1-1.html
軟件和依賴安裝
本章節從簡介紹軟件和依賴包的安裝,詳情請參見 HUAWEI LiteOS Studio安裝。
軟件下載
從 Huawei LiteOS/LiteOS_Studio 或 LiteOS Studio 下載發行版。或從CSDN資源下載。
202503 來看,項目最后發行版 HUAWEI-LiteOS-Studio V1.45.9 Beta 更新于4年前的2021年8月4號。GitHub的訪問由于各種原因不太穩定,可通過 如下地址 也能訪問到LiteOS Studio項目,并沒有任何軟件release發布版,只有源碼,最后更新時間6年前,同樣已停更。
軟件安裝
IDE主體安裝過程很簡單,順著走就行,
插件安裝
如上,相關插件也被自動安裝了。插件市場無法聯網不能使用,你可從本地安裝。以中文包為例,簡單嘮嘮。
首先參考 HUAWEI LiteOS Studio安裝 中提到的 擴展自動下載程序腳本 得到一個下載中文語言包擴展的地址,克隆到本地目錄,并按照VSCODE離線插件安裝方式操作即可。
參考使用說明書,通過 Configure Display Language 切換為中文模式。
依賴工具-方案2
我先嘗試的是下一節的方案1,那個時候,我還沒有發現正規的LiteOS Studio安裝說明書,因此借用了小熊派物聯網網開發工具集合包。HUAWEI LiteOS Studio安裝 文檔中提到,HUAWEI LiteOS Studio不提供常用工具、常用擴展的預置,需要用戶自行下載,如用戶本地已安裝,可忽略此步驟。文檔中提到的工具和擴展包含,
上述工具中,除了JLink仿真器軟件外,在 小熊派 developTools.zip 工具集下都是存在的。下文,燒錄配置章節,會進一步講解如何將ST-LINK刷成J-LINK,并基于JLINK在LiteOS Studio中完成燒錄和調試。
依賴工具-方案1
在寫此文前,我已經完成了#<IDE/IoT/搭建物聯網(LiteOS)集成開發環境,基于 VSCode + GitBash + GCC工具>#,文中環境搭建過程中使用了小熊派社區下載的構建和編譯工具鏈集合。下載 developTools.zip ,將安裝包解壓到任意目錄,運行 developTools.exe,按提示安裝。
后文在工程配置階段,會用到上述目錄下工具,不要找不到。
工程配置
在該實驗中,配置步驟是最關鍵和最復雜的。
點擊如上紅框標記處的設置按鈕,進入工程設置主界面。本章節主要講述板卡配置和編譯配置。后續章節將講述燒錄配置和調試過程。
打開或新建工程
如下測試過程我是打開的bearpi-iot_std_liteos-master根文件夾。這里還有個坑讓我比較蒙圈,有一次我打開的是 bearpi-iot_std_liteos-master\targets\STM32L431_BearPi 目錄,重新配置構建器、編譯器等,竟然無法執行編譯過程,編譯就卡在那里,也沒有任何的報錯或告警。
下文的測試過程是基于最簡單的helloworld進行的,
bearpi-iot_std_liteos-master\targets\STM32L431_BearPi\Demos\hello_world_demo
板卡配置
選取當前工程對應的開發板,主芯片型號,
@Note,改變板卡配置,最導致編譯器、調試器等配置都恢復到默認配置。
組件配置
早期的時候,沒有說明書,我不知道這是個什么。當我直接打開小熊派helloworld程序,
內容是空的,我更納悶啦。后來采用新建工程,component是有內容的,
這里我沒大搞明白,但也沒有影響到我,實驗手冊上也沒提到。再后來從官方使用說明說中了解到,
如需對LiteOS開放可配置的組件與屬性進行使能,而不是僅使用默認的配置,用戶可以點擊工程配置界面上的組件配置,在左側的選擇組件中點擊想要使能或修改的組件,在右側的組件屬性欄勾選需要使能的組件,或更改組件屬性值。
編譯器配置-gcc工具鏈
編譯器路徑,
…\developTools\GNU Tools Arm Embedded\7 2018-q2-update\bin
Make構建器路徑,
…\developTools\GNU MCU Eclipse\Build Tools\2.11-20180428-1604\bin\make.exe
Makefile 腳本路徑, 上圖中顯示的是基于VSCode打開目錄的相對路徑,
…\bearpi-iot_std_liteos-master\targets\STM32L431_BearPi\Makefile
關于Makefile腳本的配置,我是耗費了些時間的,它指的就是Makefile構建文件所在的路徑。
編譯器配置-Makefile腳本
剛開始,由于沒有直接下載到HCIP-IoT實驗手冊中的LiteOS_Lab_HCIP源碼,
而只能使用小熊派 bearpi-iot_std_liteos-master\targets\STM32L431_BearPi 源碼,
使得配置過程復雜了那么丟丟。你可能需要對Makefile構建系統有基本的了解,能使用 menuconfig 和 genconfig 系統構建工具鏈中的配置管理工具。關于 menuconfig 和 genconfig 工具與 Makefile之間的互動關系,請參閱 #<IDE/用構建工具 menuconfig和genconfig 驅動Makefile構建流程,基于STM32L431_BearPi源碼構建過程的分析>#,這里不再贅述。
我們簡化描述配置過程,基礎目錄 …bearpi-iot_std_liteos-master\targets\STM32L431_BearPi
0、上述根目錄下的 Makefile 文件 include 包含使用 .config 和 project.mk 文件,驅動Makefile下的構建流程。
1、將 Demos\hello_world_demo 目錄下的defaults.sdkconfig 文件內容,拷貝覆蓋到 STM32L431_BearPi目錄下的 .config 文件中。
2、隨便打開個終端窗口,執行 genconfig.exe,以更新生成 iot_config.h 頭文件。
3、上述配置后,就可以放心使用Makefile文件啦。
其他配置
在示例程序中找不到 osal.h 頭文件,
…\bearpi-iot_std_liteos-master\targets\STM32L431_BearPi\Demos\hello_world_demo.vscode\c_cpp_properties.json
{"configurations": [..."compilerPath": "..GNU Tools Arm Embedded\\7 2018-q2-update\\bin\\arm-none-eabi-gcc.exe","cStandard": "c11","cppStandard": "c++11","intelliSenseMode": "gcc-x64"}],"version": 4
編譯完成
按照前文配置,即使不配置燒錄和調試卡,編譯helloword示例程序,
編譯和燒錄
上一節的工作,已完成編譯過程。接下來我們看看編譯結果以及如何下載程序。
可執行文件
編譯完成后會生成3種類型的同名文件,
上述三類文件的一個基礎對比如下,
文件生成關系
LiteOS通過 Makefile 調用GCC生成 .elf 文件(含完整調試信息)。隨后使用 objcopy 工具轉換 .elf 為 .bin 或 .hex 文件。
轉換邏輯:
.elf → .bin:去除符號表和調試信息,保留純二進制代碼。
.elf → .hex:將二進制代碼轉換為Intel HEX標準格式,添加地址和校驗信息。
逆向不可行:.bin/.hex 無法還原為完整 .elf,因調試信息已丟失
STLink轉JLink
為什么多出來這么個步驟呢?在LiteOS Studio燒錄配置中沒有ST-Link選項。
參考 STM32工程示例/ST-Link仿真器單步調測,章節中的描述,對于板載ST-Link仿真器的STM32開發板,如STM23L431RC、STM32F769NI,為了更加穩定的調測體驗,建議刷成JLInk進行調測。在開始之前,需要先確保已安裝ST-LINK USB Drivers和J-Link軟件。
參見 安裝JLink仿真器軟件,訪問Jlink官網, 選擇J-Link Software and Documentation Pack后再選擇J-Link Software and Documentation pack for Windows下載JLink軟件,如我們經常使用的6.70e版本。Windows版本,針對傳統x86/x64架構的Windows系統設計,適用于Intel/AMD平臺的PC或工作站。Windows ARM版本,專門為ARM64架構的Windows設備(如Surface Pro X、樹莓派Windows IoT版)開發,適配基于ARM的處理器。舊版本一般只有32bit,也可在64bitWin10可靠運行。
上述驅動選擇默認安裝即可,對于驅動,一般習慣保持默認安裝在C盤中。
使用 JLink官網提供的STLink_Reflash工具 ,
第一次嘗試失敗了,通過deepseek查詢,可能是供電不足導致的。我將開發板的USB從集線器上拔下來,直接接到電腦的USB口上,重新執行<1> 固件轉換操作,還真成功了。
后來我試圖將外置ST-LINK刷成J-LINK失敗,文檔中提到的是板載的STLink,外置ST-LINK可能就是不可以。
燒錄器配置
ST-Link刷成Jlink后,按照上圖進行配置。燒錄器目錄選擇JLink驅動的安裝目錄(不是bin目錄哈)。燒錄文件可以使用.bin或.hex類型,就是前文提到的編譯生成的執行文件。
燒錄步驟
首次執行燒錄操作,有如下警示,
燒錄完成后,顯示,
驗證和調試
程序運行
以下是程序燒錄后的運行結果(非調試狀態)(燒錄后記得按復位鍵重啟板子),
對打印過程的補充說明,
printf依賴的底層函數,實現在 STM32L431_BearPi\Src\uart_debug.c
若無打印輸出
燒錄成功后,如果沒有信息輸出,首先確認AT模式開關是否在MCU側。如下做簡單原因描述,詳情參見開發板原理圖。
將撥碼開關撥至PC側,通信模組(如NB-IoT、WiFi模塊)的串口直接與PC端的USB虛擬串口連接,繞過主控MCU。此時MCU處于斷電或空閑狀態,僅通信模組工作。
將撥碼開關撥至MCU側,通信模組與主控MCU(STM32L431)的串口(如LPUART1)直連。MCU通過串口發送AT指令控制通信模組,實現數據采集、協議封裝及云端交互。如調用HAL_UART_Transmit發送AT指令。
源代碼分析
bearpi-iot_std_liteos-master\targets\STM32L431_BearPi\Src\main.c
int main(void) {UINT32 uwRet = LOS_OK;HardWare_Init();uwRet = LOS_KernelInit();if (uwRet != LOS_OK) {return LOS_NOK;}extern void shell_uart_init(int baud);shell_uart_init(115200);link_test(); //PROGRESS-TAG-1(void)LOS_Start();return 0;
}static int link_test() {int ret = -1;UINT32 uwRet = LOS_OK;UINT32 handle;TSK_INIT_PARAM_S task_init_param;memset (&task_init_param, 0, sizeof (TSK_INIT_PARAM_S));task_init_param.uwArg = (unsigned int)NULL;task_init_param.usTaskPrio = 2;task_init_param.pcName =(char *) "link_main";task_init_param.pfnTaskEntry = (TSK_ENTRY_FUNC)link_main; //PROGRESS-TAG-2task_init_param.uwStackSize = 0x1000;uwRet = LOS_TaskCreate(&handle, &task_init_param);if(LOS_OK == uwRet){ret = 0;}return ret;
}
bearpi-iot_std_liteos-master\iot_link\link_main.c
int link_main(void *args) {...#ifdef CONFIG_LINKDEMO_ENABLEextern int standard_app_demo_main(void);(void) standard_app_demo_main(); //PROGRESS-TAG-3
#endif
}
bearpi-iot_std_liteos-master\targets\STM32L431_BearPi\Demos\hello_world_demo\hello_world_demo.c
static int app_hello_world_entry() {while (1) {printf("Hello World! This is BearPi!\r\n");osal_task_sleep(4*1000);}
}//PROGRESS-TAG-4
int standard_app_demo_main() {osal_task_create("helloworld",app_hello_world_entry,NULL,0x400,NULL,2);return 0;
}
elf 文件
Huawei_LiteOS.elf 是華為 LiteOS 操作系統在編譯過程中生成的一種可執行文件格式,主要用于調試、仿真和程序分析。通過 objcopy 工具可將 .elf 轉換為 .bin 或 .hex,燒錄至硬件運行。
該文件遵循 ELF(Executable and Linkable Format) 標準,其特點包括:
復合結構:不僅包含二進制機器碼,還記錄了程序的內存布局、符號表、調試信息等元數據。
內存地址映射:通過程序頭表指定代碼段、數據段的加載地址,適應嵌入式系統的內存管理需求。
調試支持:包含源代碼與匯編指令的對應關系,支持斷點設置、變量監視等調試操。
調試器配置
調試器配置如上圖,注意以下幾點:
1、GDB目錄與編譯器目錄一致。
如 d:\Program Files\IoT_developTools\GNU Tools Arm Embedded\7 2018-q2-update\bin
該目錄含arm-none-eabi-gcc/gdb 等工具。
2、執行文件路徑,選擇工程編譯后生成的*.elf文件。
3、調試配置類型,選擇復位調試。
單步調試
查看變量值,監視表達式值、查看調用堆棧、斷點等。
再見
在完成HCIP-IoT實驗的過程中,還會穿插一些關于IDE構建和使用的文章或內容片段。此文不再多說什么!