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