技術(shù)洞察 | 如何在英飛凌 AURIX? TC3xx 系列單片機上移植 FreeRTOS 實(shí)時(shí)操作系統
本文作者
本文引用地址:http://dyxdggzs.com/article/202504/469650.htmDi Wang
英飛凌科技大中華區 CAE 客戶(hù)支持工程師
最近在 新聞 中,大家了解到英飛凌為其 AURIX? TC3x 微控制器(MCU)添加了對FreeRTOS的支持。借助實(shí)時(shí)操作系統(FreeRTOS),功能強大的微控制器 AURIX? TC3xx MCU 能夠高效管理硬件和軟件資源,確保任務(wù)的及時(shí)和可靠執行。FreeRTOS作為硬件和應用軟件之間的中介,使開(kāi)發(fā)者能夠專(zhuān)注于應用代碼,無(wú)需處理硬件的復雜性,從而實(shí)現應用代碼的可移植性和可重用性,并縮短上市時(shí)間。
本文介紹了在 AURIX? TC3xx 單片機上移植 FreeRTOS 實(shí)時(shí)操作系統的操作步驟,讀者可以使用 Triboard 開(kāi)發(fā)板和免費的 ADS 開(kāi)發(fā)平臺,快速移植 FreeRTOS 到自己使用的 TC3xx MCU上,創(chuàng )建任務(wù)并實(shí)現 LED 的閃燈演示。
1、前言
FreeRTOS是一款廣泛使用的開(kāi)源實(shí)時(shí)操作系統(RTOS),具有輕量級、模塊化和易用的特點(diǎn),適用于資源受限的嵌入式系統開(kāi)發(fā)。 它支持多任務(wù)調度、任務(wù)間通信和同步,并提供豐富的中間件支持,便于開(kāi)發(fā)者快速構建高效、可靠的應用程序。
英飛凌的AURIX? TC3x MCU采用符合ASIL-D/SIL-3標準的設計,滿(mǎn)足汽車(chē)和工業(yè)市場(chǎng)的嚴格要求。它基于高性能的TriCore?架構,具備實(shí)時(shí)能力、先進(jìn)的功能安全特性和功能可靠性, 是安全關(guān)鍵應用的理想選擇 。FreeRTOS的可用性使客戶(hù)能夠在成熟且功能豐富的開(kāi)源環(huán)境中快速構建應用程序。將FreeRTOS集成到AURIX? TC3x MCU中,不僅能夠助力汽車(chē)和工業(yè)市場(chǎng)的廣大客戶(hù)快速進(jìn)行功能評估,而且為在非AUTOSAR項目中快速遷移應用代碼提供了可能。
2、參考鏈接
參考鏈接一
參考鏈接二
參考鏈接三
3、準備 ADS 開(kāi)發(fā)環(huán)境
ADS (AURIX? Development Studio)是英飛凌推出的一個(gè)免費的集成開(kāi)發(fā)環(huán)境,內嵌 Tasking 編譯器的免費版本,并集成大量AURIX? TC3xx 微控制器的例子工程。用戶(hù)可以快速上手,通過(guò)導入不同模塊的例子工程,編譯并下載到開(kāi)發(fā)板中,進(jìn)行功能評估和開(kāi)發(fā)。( 下載鏈接 )
如圖所示:
4
準備 Triboard 開(kāi)發(fā)板
ADS 開(kāi)發(fā)環(huán)境支持各種 AURIX? TC3xx MCU的開(kāi)發(fā)板,比如Lite Kit、ShieldBuddy、TFT Kit或Triboard。本文基于 TC399 Triboard ,其板載有8個(gè) LED 供測試使用,本文代碼使用 P33.4和 P33.5引腳來(lái)控制最左側的LED1和LED2,實(shí)現閃爍演示。在下載程序之前,請使用電源線(xiàn)給 Triboard供電,并使用mini USB線(xiàn)連接開(kāi)發(fā)板到PC機,在 PC 機上開(kāi)啟 ADS 集成開(kāi)發(fā)環(huán)境。
如圖所示:
5
打開(kāi)一個(gè)例子工程
安裝完成之后,用戶(hù)可打開(kāi) ADS平臺,在 File 菜單中選擇 Import 導入,之后在例子工程的代碼庫中找到名為 STM_Interrupt_1 的例子工程,點(diǎn)擊 Finish 完成,即可導入第一個(gè)例子工程。 (注:TC397的工程可以使用在TC399的開(kāi)發(fā)板上)。
如圖所示:
打開(kāi)工程后,可以在工程上點(diǎn)擊右鍵,選擇 Set Active Project,之后點(diǎn)擊 Build Project 進(jìn)行編譯。編譯之后,點(diǎn)擊 Debug菜單進(jìn)行下載調試。如果在Debug Configurations中沒(méi)有合適的配置,請首先創(chuàng )建一個(gè)配置(使用默認配置在TASKING C/C++ Debugger中創(chuàng )建即可)。這里注意,編譯前需修改 STM_Interrupt.c 文件中的 LED 引腳為 P33.4,以適配 TC399 Triboard 的 LED1 引腳。下載后,點(diǎn)擊Resume運行,可以看到開(kāi)發(fā)板上最左側的LED燈會(huì )閃爍。這個(gè)工程是我們進(jìn)行 FreeRTOS 移植的基礎。
6
移植過(guò)程
在準備好了ADS開(kāi)發(fā)環(huán)境、Triboard開(kāi)發(fā)板,并下載成功 STM_Interrupt_1 例子工程后,即可開(kāi)始我們的移植過(guò)程。
第一步:下載 FreeRTOS 版本 10.5.1 并解壓縮
用戶(hù)可以從 FreeRTOS 的官方網(wǎng)站獲取源碼,將解壓后的 FreeRTOS 文件夾復制到 STM_INTERRUPT_1 例子工程的 OS/FreeRTOS/ 路徑下。( 下載鏈接 )
第二步:整理 Portable 文件夾
打開(kāi) FreeRTOS/Portable/ 目錄,刪除所有文件夾,僅保留 MemMang 和 Tasking 文件夾。
第三步:port.c 和 portmacro.h
在 Tasking 文件夾中移除 ARM_CM4F 文件夾,創(chuàng )建一個(gè)名為 TC3 的新文件夾,該文件夾將包含兩個(gè)文件:port.c 和 portmacro.h。( 下載鏈接 )
第四步:FreeRTOSConfig.h
將 FreeRTOSConfig.h 文件復制到 STM_INTERRUPT_1 例子工程的 Configurations/ 路徑下。( 下載鏈接 )
第五步:修改 Ifx_Cfg.h
參考后面鏈接中的 Ifx_Cfg.h 文件,修改例子工程中的 Configurations/Ifx_Cfg.h 文件。( 下載鏈接 )
第六步:排除不必要的文件
打開(kāi) OS/FreeRTOS/portable/MemMang/ 目錄,右鍵點(diǎn)擊 heap_2.c 到 heap_5.c,選擇 Resource Configuration,然后選擇 Exclude from Build。這確保在構建過(guò)程中僅使用 heap_1.c
第七步:修改 Cpu0_Main.c 、 STM_Interrupt.c 和 STM_Interrupt.h
讀者可以下載3個(gè)源文件并覆蓋例子工程中的相應文件。( 下載鏈接 )
講解:
在 Cpu0_Main.c 中,主要創(chuàng )建了2個(gè)任務(wù) task_app_led1 和 task_app_led2,并啟動(dòng)操作系統的調度器,代碼如下:
在 STM_Interrupt.c 中,對LED1和LED2引腳進(jìn)行初始化,設置為輸出模式,并給出了2個(gè)任務(wù)的具體實(shí)現,主要是定時(shí)翻轉 LED1 和 LED2的引腳,代碼如下:
在 STM_Interrupt.h中,對兩個(gè)任務(wù)函數的原型給出了聲明。
第八步:重新編譯工程并下載
右鍵點(diǎn)擊工程,選擇「Clean Project」清除編譯文件,之后重新「Build Project」,并在 Debug 菜單中點(diǎn)擊 Debug,之后生成的程序會(huì )下載到 TC399 Triboard 開(kāi)發(fā)板中并進(jìn)入調試界面,在調試界面點(diǎn)擊 「Resume」運行,觀(guān)察開(kāi)發(fā)板上的 LED1(P33.4)和 LED2(P33.5),它們將分別以 500ms 和 1000ms 的周期閃爍。
評論