簡 介
Azure RTOS ThreadX 是 Microsoft 提供的高級工業級實時操作系統 (RTOS)。它是專門為深度嵌入式實時 IoT 應用程序設計的。Azure RTOS ThreadX 提供高級計劃、通信、同步、計時器、內存管理和中斷管理功能。此外,Azure RTOS ThreadX 具有許多高級功能,包括 picokernel? 體系結構、preemption-threshold? 計劃、event-chaining?、執行分析、性能指標和系統事件跟蹤。Azure RTOS ThreadX 非常易于使用,適用于要求極其苛刻的嵌入式應用程序。Azure RTOS ThreadX 在各種產品(包括消費者設備、醫療電子設備和工業控制設備)上的部署次數已達數十億次。
本文描述了如何在MM32F3270系列MCU上使用Azure RTOS ThreadX做基本移植。
包括底層啟動文件的移植, 系統Systick的配置技巧,引導用戶理解Azure RTOS ThreadX基本應用。
表 1 適用系列型號
1、移植應用的準備
1.1 硬件開發板的準備
該移植過程中應用的開發板為MM32的EVBoard MB039(MM32F3273G9P)
EV Board (MM32F3273G9P)的簡要參數:
Arm Cortex-M3 內核
板載 MM32F3273G9P(LQFP144)
4 x Key、4 x LED
I2S Speaker
TF-Card
Ethernet PHY
1.2 軟件的準備
庫函數和例程(Lib Samples)
該移植過程中應用的Firmware分別為MM32F3270 庫函數和例程
Azure RTOS ThreadX(源碼)
Microsoft publishes the Azure RTOS source code to GitHub. No license is required to install and use the software for internal development, testing, and evaluation purposes. A license is required to distribute or sell components and devices unless using Azure RTOS licensed hardware.
Azure RTOS 何時需要許可證?
Microsoft 將 Azure RTOS 源代碼發布到 GitHub。安裝和使用該軟件進行內部開發、測試和評估無需許可證。分發或銷售組件和設備需要許可證,除非使用 Azure RTOS 許可的硬件。
ThreadX 安裝
可以通過將 GitHub 存儲庫克隆到本地計算機來安裝 ThreadX。下面是用于在 PC 上創建 ThreadX 存儲庫的克隆的典型語法。
shell復制
git clone https://github.com/azure-rtos/threadx
或者,也可以使用 GitHub 主頁上的“下載”按鈕來下載存儲庫的副本。
下載后的倉庫代碼目錄列表如下:
如下圖所示:
Azure RTOS ThreadX(源碼)支持的開發環境
ThreadX 內核提供好了各種主流硬件平臺和軟件平臺的移植文件,以Cortex_M3為例,可以支持以下六種開發環境:
本次移植過程使用keil模板為例子,做移植說明。
2、Threadx 的移植
該章節介紹了移植的過程和注意事項。
2.1 建立工程目錄
建立目標工程文件夾“MM32F3270Project”:
復制Threadx中的“common”目錄和“ports”目錄下的“Cortex-M3”目錄到:
“MM32F3270Projectthreadxcommon”
“MM32F3270Projectthreadxportscortex_m3keil”
目錄。
復制LibSamples_MM32F3270中的“Device”目錄到:MM32F3270ProjectDevice
復制“SamplesLibSamplesGPIOGPIO_Toggle”目錄到“MM32F3270Project”目錄。
最后形成如下目標目錄:
2.2 添加源碼到KEIL工程
打開IOtoggle工程;
它包含基本的LED blink功能;
通過完成編譯,選擇相應的調試下載工具(ULINK,Jlink,CMSIS-DAP Link,MM32LINK-OB),可以驗證EVB正常工作,實現四個LED做500ms/500ms的亮暗閃爍。
驗證過后,復制KEILPRJ工程目錄為KEILPRJ_Threadx目錄;
新建threadX/common分組,添加threadX/common/src下的所有c文件:
新建threadX/ports/mm32f3270/keil分組,選擇對應的編譯環境。
移植使用的KEIL為5.35,選用KEIL compiler version 5編譯器(armcc)。
需要添加 threadXportscortex_m3keilsrc 下的所有 .s 文件:
新建threadX/ports/mm32f3270/keil_s分組,選擇對應的匯編文件。
添加threadxportscortex_m3keilexample_build 下的.s 文件:
tx_initialize_low_level.s:
新建threadX/ports/mm32f3270/demo分組。
添加threadxportscortex_m3keilexample_build 下的.c 文件:
sample_threadx.c:
因為sample_threadx.c包含main()函數,需要USER 組,以刪除USER目錄下的main.c文件。
設置編譯環境,選擇Use default compiler version 5,編譯器為(armcc):
設“C/C++”的頭文件包含目錄:
添加threadxports下的.h文件包含目錄:
..threadxcommoninc
..threadxportscortex_m3keilinc
刪除未用到的目錄
..USER
完成源代碼添加和頭文件目錄包含,進行首次編譯,
編譯報如下錯誤:
檢查適配ThreadX官方的底層適配文件tx_initialize_low_level.s,發現除了必須的函數:_tx_initialize_low_level。該tx_initialize_low_level.s還包含了匯編啟動文件startup_mm32f327x_keil.s中的配置代碼,包括stack與heap的配置、中斷向量表,從而導致了沖突:
因此需要移除tx_initialize_low_level.s中stack與heap的配置、中斷向量表相關的代碼(參考上圖中的代碼),因為已經在startup_mm32f327x_keil.s中實現。
同樣的原因,需要刪除Reset_Handler函數:
及刪除__user_initial_stackheap函數:
并修改ThreadX適配文件tx_initialize_low_level.s中SYSTICK配置的參數。
修改SYSCLK頻率,配置systick的中斷時間間隔為1ms:
并修改tx_initialize_low_level.s中相關代碼,以匹配MM32F3270系列的啟動代碼startup_mm32f327x_keil.s,以下左側為tx_initialize_low_level.s原始代碼,右側為修改后代碼。
修改__tx_vectors為__Vectors
修改|Image$$ZI$$Limit|
添加SysTick_Handler聲明到如下代碼:
具體參考修改后的.s文件。
再次編譯,發現SysTick_Handler有沖突:
原因是系統中的DELAY_Init DELAY_Ms延時函數使用了SysTick_Handler。
把宏定義:#define USE_SYSTICK_DELAY 1
修改為:#define USE_SYSTICK_DELAY 0
編譯通過:
配置好下載Debugger工具(可以使用MM32LINK-OB,JLINK,U-LINK或CMSIS-DAP LINK),下載調試。
3、Threadx 的運行與調試
3.1 下載與調試
下載調試默認會運行到main()函數。
該demo示例,建立了5個線程,程序都不與芯片的外設相關:
線程只做數值自加,Demo演示了事件(Event),隊列(queue),信號量(semaphore)的功能。
全速運行后,可以看到相關的數值在變化:
4、小結
關于使用MM32F3270基于Azure RTOS ThreadX 的最小系統就移植完成,并運行起來,后面再給大家介紹Task相關的配置,信號量,互斥鎖等Azure RTOS的特色功能。
提示
來源: 靈動MM32MCU
免責聲明:本文為轉載文章,轉載此文目的在于傳遞更多信息,版權歸原作者所有。本文所用視頻、圖片、文字如涉及作品版權問題,請聯系小編進行處理
審核編輯 黃宇
-
嵌入式
+關注
關注
5087文章
19158瀏覽量
306439 -
threadx
+關注
關注
0文章
15瀏覽量
13850 -
RTOS
+關注
關注
22文章
817瀏覽量
119766
發布評論請先 登錄
相關推薦
評論