本文作者
帝王
英飛凌科技大中華區 CAE 客戶支援工程師
最近在新聞:中,大家了解到英飛凌為其AURIX™ TC3x微控制器(MCU)新增了對FreeRTOS的支援。透過即時作業系統(FreeRTOS),功能強大的微控制器得以實現更高效的運作。AURIX™ TC3xx 微控制器能夠高效管理硬體和軟體資源,確保任務的即時和可靠執行。FreeRTOS作為硬體和應用軟體之間的中介,使開發者能夠專注於應用程式碼,無需處理硬體的複雜性,從而實現應用程式碼的可移植性和可重用性,並縮短上市時間。
本文介紹了在AURIX™ TC3xx單片機上移植 FreeRTOS 即時操作系統的操作步驟,讀者可以使用 Triboard 開發板和免費的 ADS 開發平台,快速將 FreeRTOS 移植到自己使用的 TC3xx MCU上,創建任務並實現 LED 的閃燈演示。
1 前言
FreeRTOS是一款廣泛使用的開源即時作業系統(RTOS),具有輕量化、模組化和易用的特點,適用於資源受限的嵌入式系統開發。它支援多工排程、任務間的通訊與同步,並提供豐富的中介軟體支援,方便開發者快速建構高效且可靠的應用程式。
英飛凌的AURIX™ TC3x MCU採用符合ASIL-D/SIL-3標準的設計,滿足汽車和工業市場的嚴格要求。它基於高效能的TriCore™架構,具備即時能力、先進的功能安全特性以及功能可靠性。是安全關鍵應用的理想選擇FreeRTOS 的可用性使客戶能夠在成熟且功能豐富的開源環境中快速建構應用程式。將 FreeRTOS 整合到 AURIX™ TC3x MCU 中,不僅能夠協助汽車和工業市場的廣大客戶快速進行功能評估,還為在非 AUTOSAR 專案中快速遷移應用程式代碼提供了可能性。
2 參考連結
3 準備 ADS 開發環境
ADS (AURIX™ Development Studio) 是英飛凌推出的一個免費的整合開發環境,內嵌 Tasking 編譯器的免費版本,並整合大量 AURIX™ TC3xx 微控制器的範例工程。使用者可以快速上手,透過匯入不同模組的範例工程,編譯並下載到開發板中,進行功能評估和開發。下載連結)
如圖所示:
4 準備 Triboard 開發板
ADS 開發環境支援各種 AURIX™ TC3xx MCU 的開發板,比如 Lite Kit、ShieldBuddy、TFT Kit 或 Triboard。本文基於TC399 三層板其板上配有 8 個 LED 供測試使用,本文程式碼使用 P33.4 和 P33.5 引腳來控制最左側的 LED1 和 LED2,實現閃爍演示。在下載程式之前,請使用電源線為 Triboard 供電,並使用 mini USB 線將開發板連接到電腦,然後在電腦上開啟 ADS 整合開發環境。
如圖所示:
5 打開一個範例工程
安裝完成後,使用者可以打開 ADS 平台,然後在 File 菜單中選擇 Import 進行匯入,接著在範例專案的程式碼庫中找到名為 STM_Interrupt_1 的範例專案,點擊 Finish 完成,即可匯入第一個範例專案。(註:TC397的工程可以使用在TC399的開發板上)。
如圖所示:
打開專案後,可以在專案上點擊右鍵,選擇 Set Active Project,之後點擊 Build Project 進行編譯。編譯完成後,點擊 Debug 菜單進行下載調試。如果在 Debug Configurations 中沒有合適的配置,請先建立一個配置(使用預設配置在 TASKING C/C++ Debugger 中建立即可)。這裡需要注意,編譯前需修改 STM_Interrupt.c 文件中的 LED 腳位為 P33.4,以適配 TC399 Triboard 的 LED1 腳位。下載後,點擊 Resume 運行,可以看到開發板上最左側的 LED 燈會閃爍。這個專案是我們進行 FreeRTOS 移植的基礎。
6 移植過程
在準備好ADS開發環境、Triboard開發板,並成功下載STM_Interrupt_1範例工程後,即可開始我們的移植過程。
第一步:下載 FreeRTOS 版本 10.5.1 並解壓縮
使用者可以從 FreeRTOS 的官方網站下載原始碼,將解壓縮後的 FreeRTOS 資料夾複製到 STM_INTERRUPT_1 範例專案的 OS/FreeRTOS/ 路徑下。下載連結)
第二步:整理 Portable 資料夾
打開 FreeRTOS/Portable/ 目錄,刪除所有資料夾,僅保留 MemMang 和 Tasking 資料夾。
第三步:port.c 和 portmacro.h
在 Tasking 資料夾中移除 ARM_CM4F 資料夾,建立一個名為 TC3 的新資料夾,該資料夾將包含兩個檔案:port.c 和 portmacro.h。下載連結)
第四步:FreeRTOSConfig.h
將 FreeRTOSConfig.h 檔案複製到 STM_INTERRUPT_1 範例工程的 Configurations/ 路徑下。下載連結)
第五步:修改 Ifx_Cfg.h
參考後面連結中的 Ifx_Cfg.h 檔案,修改範例工程中的 Configurations/Ifx_Cfg.h 檔案。下載連結)
第六步:排除不必要的文件
打開 OS/FreeRTOS/portable/MemMang/ 目錄,右鍵點擊 heap_2.c 到 heap_5.c,選擇 Resource Configuration,然後選擇 Exclude from Build。這確保在建置過程中僅使用 heap_1.c。
第七步:修改 Cpu0_Main.c、STM_Interrupt.c 和 STM_Interrupt.h
讀者可以下載3個原始檔案並覆蓋範例工程中的相應檔案。下載連結)
講解:
在 Cpu0_Main.c 中,主要建立了兩個任務 task_app_led1 和 task_app_led2,並啟動作業系統的排程器,程式碼如下:
在 STM_Interrupt.c 中,對 LED1 和 LED2 的引腳進行初始化,設置為輸出模式,並實現了兩個任務的具體功能,主要是定時翻轉 LED1 和 LED2 的引腳,程式碼如下:
在 STM_Interrupt.h 中,已對兩個任務函數的原型進行了宣告。
第八步:重新編譯工程並下載
右鍵點擊專案,選擇「Clean Project」清除編譯檔案,之後重新「Build Project」,並在 Debug 選單中點擊 Debug,生成的程式會下載到 TC399 Triboard 開發板中並進入調試介面。在調試介面中點擊「Resume」執行,觀察開發板上的 LED1(P33.4)和 LED2(P33.5),它們將分別以 500ms 和 1000ms 的週期閃爍。
7 相關連結
掃描 QR Code,追蹤英飛凌汽車電子尋找更多應用程式或產品資訊

評論