0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

使用MM32F3270基于Azure RTOS (ThreadX) 的移植

jf_pJlTbmA9 ? 來(lái)源: 靈動(dòng)MM32MCU ? 作者: 靈動(dòng)MM32MCU ? 2023-10-27 10:15 ? 次閱讀

簡(jiǎn) 介

Azure RTOS ThreadX 是 Microsoft 提供的高級(jí)工業(yè)級(jí)實(shí)時(shí)操作系統(tǒng) (RTOS)。它是專門(mén)為深度嵌入式實(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)

wKgaomUD5uOAHgkOAABBsCMtdho057.png

1、移植應(yīng)用的準(zhǔn)備

1.1 硬件開(kāi)發(fā)板的準(zhǔn)備

該移植過(guò)程中應(yīng)用的開(kāi)發(fā)板為MM32的EVBoard MB039(MM32F3273G9P)

wKgZomUD5uWAFbSCAAK4QKQZpaY148.png

EV Board (MM32F3273G9P)的簡(jiǎn)要參數(shù)

Arm Cortex-M3 內(nèi)核

板載 MM32F3273G9P(LQFP144)

USB Host / Device、SPI、I2C

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ù)和例程

wKgZomUD5uaAJlPPAABgspXbh8s782.png

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)部開(kāi)發(fā)、測(cè)試和評(píng)估無(wú)需許可證。分發(fā)或銷(xiāo)售組件和設(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ù)代碼目錄列表如下:

wKgaomUD5ueAZHpPAABoCiEGlIU433.png

如下圖所示:

Azure RTOS ThreadX(源碼)支持的開(kāi)發(fā)環(huán)境

ThreadX 內(nèi)核提供好了各種主流硬件平臺(tái)和軟件平臺(tái)的移植文件,以Cortex_M3為例,可以支持以下六種開(kāi)發(fā)環(huán)境:

wKgaomUD5uiAYB-sAAAH7G66gCg440.png

本次移植過(guò)程使用keil模板為例子,做移植說(shuō)明。

2、Threadx 的移植

該章節(jié)介紹了移植的過(guò)程和注意事項(xiàng)。

2.1 建立工程目錄

建立目標(biāo)工程文件夾“MM32F3270Project”:

wKgZomUD5uyACEIqAAAJCD_IJ88177.png

復(fù)制Threadx中的“common”目錄和“ports”目錄下的“Cortex-M3”目錄到:

“MM32F3270Projectthreadxcommon”

“MM32F3270Projectthreadxportscortex_m3keil”

目錄。

wKgZomUD5u2AIGnkAABL4ESW6Eo386.png

復(fù)制LibSamples_MM32F3270中的“Device”目錄到:MM32F3270ProjectDevice

wKgaomUD5u6AJ0GKAAAHqTi6aWw809.png

復(fù)制“SamplesLibSamplesGPIOGPIO_Toggle”目錄到“MM32F3270Project”目錄。

wKgZomUD5vCAZ1XBAABYwWdno2E051.png
wKgaomUD5vGAKPoQAAAQ__yTxXw716.png

最后形成如下目標(biāo)目錄:

wKgaomUD5vKAbT0HAAAOiv4eupc305.png

2.2 添加源碼到KEIL工程

打開(kāi)IOtoggle工程;

wKgZomUD5vOAYO_VAAAfi6Iugpo773.png

它包含基本的LED blink功能;

wKgZomUD5vSAJwBxAAAxsBJgf4E849.png

通過(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目錄;

wKgaomUD5vaAZ09gAABDooKMKG8213.png

新建threadX/common分組,添加threadX/common/src下的所有c文件:

wKgaomUD5vmAZ-blAABp8f9TzSg638.png

新建threadX/ports/mm32f3270/keil分組,選擇對(duì)應(yīng)的編譯環(huán)境。

移植使用的KEIL為5.35,選用KEIL compiler version 5編譯器(armcc)。

需要添加 threadXportscortex_m3keilsrc 下的所有 .s 文件:

wKgZomUD5vuAAHzzAABONslR0Hg258.png

新建threadX/ports/mm32f3270/keil_s分組,選擇對(duì)應(yīng)的匯編文件。

添加threadxportscortex_m3keilexample_build 下的.s 文件:

tx_initialize_low_level.s:

wKgZomUD5vyAeNqGAABDnX8SNjA328.png

新建threadX/ports/mm32f3270/demo分組。

添加threadxportscortex_m3keilexample_build 下的.c 文件:

sample_threadx.c:

wKgaomUD5v2AfBXxAABI1q05A3k272.png

因?yàn)閟ample_threadx.c包含main()函數(shù),需要USER 組,以刪除USER目錄下的main.c文件。

wKgZomUD5v6AVNnXAAA5Vi9CgP4480.png

設(shè)置編譯環(huán)境,選擇Use default compiler version 5,編譯器為(armcc):

wKgaomUD5wCAOVIvAABfJnWMwQ0494.png

設(shè)“C/C++”的頭文件包含目錄:

添加threadxports下的.h文件包含目錄:

..threadxcommoninc

..threadxportscortex_m3keilinc

刪除未用到的目錄

..USER

wKgaomUD5wGAA6yRAAAYNyfnyBQ015.png

完成源代碼添加和頭文件目錄包含,進(jìn)行首次編譯,

編譯報(bào)如下錯(cuò)誤:

wKgZomUD5wOAbogZAAAlkliBL7s333.png

檢查適配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)致了沖突:

wKgZomUD5wSADDkcAAAlSoo1jq0873.png

因此需要移除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ù):

wKgaomUD5waASIUGAAAJD9sri_E444.png

及刪除__user_initial_stackheap函數(shù):

wKgZomUD5wiAXeHxAAATjFsH5kU814.png

并修改ThreadX適配文件tx_initialize_low_level.s中SYSTICK配置的參數(shù)。

修改SYSCLK頻率,配置systick的中斷時(shí)間間隔為1ms:

wKgaomUD5wmAc4ubAAAK5HL8LTw267.png

并修改tx_initialize_low_level.s中相關(guān)代碼,以匹配MM32F3270系列的啟動(dòng)代碼startup_mm32f327x_keil.s,以下左側(cè)為tx_initialize_low_level.s原始代碼,右側(cè)為修改后代碼。

wKgaomUD5wqAelRvAAAbkox7oEQ263.png

修改__tx_vectors為_(kāi)_Vectors

修改|Image$$ZI$$Limit|

wKgZomUD5wuAZIOvAAA3yb4UDsk636.png

添加SysTick_Handler聲明到如下代碼:

wKgZomUD5w2AXKKkAAAPns1H_ao872.png

具體參考修改后的.s文件。

再次編譯,發(fā)現(xiàn)SysTick_Handler有沖突:

wKgaomUD5w6AAIJXAAAV0EM-T_g824.png

原因是系統(tǒng)中的DELAY_Init DELAY_Ms延時(shí)函數(shù)使用了SysTick_Handler。

wKgaomUD5w-AX1d6AAD5h1GahbA735.png

把宏定義:#define USE_SYSTICK_DELAY 1

修改為:#define USE_SYSTICK_DELAY 0

編譯通過(guò):

wKgZomUD5xCABBd1AAAPbHCO1eM461.png

配置好下載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):

wKgZomUD5xOAX1I3AAALaei-vmA718.png

線程只做數(shù)值自加,Demo演示了事件(Event),隊(duì)列(queue),信號(hào)量(semaphore)的功能。

wKgaomUD5xSAMcQrAAEU1Pue8Rc432.png

全速運(yùn)行后,可以看到相關(guān)的數(shù)值在變化:

wKgaomUD5xWAUsjvAAAQcViWH4g239.png

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)行處理

審核編輯 黃宇

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 嵌入式
    +關(guān)注

    關(guān)注

    5052

    文章

    18909

    瀏覽量

    300715
  • threadx
    +關(guān)注

    關(guān)注

    0

    文章

    15

    瀏覽量

    13801
  • RTOS
    +關(guān)注

    關(guān)注

    21

    文章

    807

    瀏覽量

    119287
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    使用MM32F3270基于Azure RTOS定時(shí)器組的應(yīng)用

    Azure RTOS ThreadX 是 Microsoft 提供的高級(jí)工業(yè)級(jí)實(shí)時(shí)操作系統(tǒng) (RTOS)。它是專門(mén)為深度嵌入式實(shí)時(shí) IoT 應(yīng)用程序設(shè)計(jì)的。
    的頭像 發(fā)表于 12-29 17:26 ?1569次閱讀

    MM32F3270系列32位MCU的特點(diǎn)有哪些

    上海靈動(dòng)微電子推出全新主流型MM32F3270系列32位MCU,此款MM32F3270系列是基于M3內(nèi)核的32位微控制器,MM32F3270適用于要求高集成度的高性能控制領(lǐng)域,如:工業(yè)控制、消防監(jiān)控
    發(fā)表于 11-03 07:20

    使用MM32F3270基于Azure RTOS定時(shí)器組的應(yīng)用

    各種產(chǎn)品(包括消費(fèi)者設(shè)備、醫(yī)療電子設(shè)備和工業(yè)控制設(shè)備)上的部署次數(shù)已達(dá)數(shù)十億次。在前文描述移植基本內(nèi)核的基礎(chǔ)上,該應(yīng)用手冊(cè)描述了MM32F3270系列MCU結(jié)合Azure RTOS
    發(fā)表于 02-07 14:18

    靈動(dòng)微電子MM32F3270系列MCU的特點(diǎn)介紹

    上海靈動(dòng)微電子推出全新主流型MM32F3270系列32位MCU,此款MM32F3270系列是基于M3內(nèi)核的32位微控制器,MM32F3270適用于要求高集成度的高性能控制領(lǐng)域,如:工業(yè)控制、消防監(jiān)控
    發(fā)表于 03-22 16:57 ?2109次閱讀

    【國(guó)產(chǎn)MCU移植MM32F3270 EVBoard

    【國(guó)產(chǎn)MCU移植MM32F3270 EVBoard
    發(fā)表于 12-03 17:21 ?5次下載
    【國(guó)產(chǎn)MCU<b class='flag-5'>移植</b>】<b class='flag-5'>MM32F3270</b> EVBoard

    基于MM32F3270 以太網(wǎng) Client使用

    接下來(lái)給大家介紹基于TCP包的通訊。內(nèi)容分為基于MM32F3270以太網(wǎng)Client的使用與基于MM32F3270以太網(wǎng)Server的使用。
    發(fā)表于 02-08 15:10 ?0次下載
    基于<b class='flag-5'>MM32F3270</b> 以太網(wǎng) Client使用

    使用MM32F3270基于Azure RTOS信號(hào)量的應(yīng)用

    Azure RTOS ThreadX 是 Microsoft 提供的高級(jí)工業(yè)級(jí)實(shí)時(shí)操作系統(tǒng) (RTOS)。它是專門(mén)為深度嵌入式實(shí)時(shí) IoT 應(yīng)用程序設(shè)計(jì)的。
    的頭像 發(fā)表于 12-16 09:23 ?943次閱讀

    使用MM32F3270基于Azure RTOS動(dòng)態(tài)內(nèi)存管理的應(yīng)用

    Azure RTOS ThreadX 是 Microsoft 提供的高級(jí)工業(yè)級(jí)實(shí)時(shí)操作系統(tǒng) (RTOS)。它是專門(mén)為深度嵌入式實(shí)時(shí) IoT 應(yīng)用程序設(shè)計(jì)的。
    的頭像 發(fā)表于 12-23 11:01 ?869次閱讀

    使用MM32F3270基于Azure RTOS事件標(biāo)志組的應(yīng)用

    使用MM32F3270基于Azure RTOS事件標(biāo)志組的應(yīng)用
    的頭像 發(fā)表于 10-27 11:31 ?461次閱讀
    使用<b class='flag-5'>MM32F3270</b>基于<b class='flag-5'>Azure</b> <b class='flag-5'>RTOS</b>事件標(biāo)志組的應(yīng)用

    MM32F3270 ADC注入通道

    MM32F3270 ADC注入通道
    的頭像 發(fā)表于 09-27 15:59 ?909次閱讀
    <b class='flag-5'>MM32F3270</b> ADC注入通道

    使用MM32F3270 FSMC驅(qū)動(dòng)OLED

    使用MM32F3270 FSMC驅(qū)動(dòng)OLED
    的頭像 發(fā)表于 09-27 15:30 ?841次閱讀
    使用<b class='flag-5'>MM32F3270</b> FSMC驅(qū)動(dòng)OLED

    使用MM32F3270 FSMC驅(qū)動(dòng)TFT-LCD

    使用MM32F3270 FSMC驅(qū)動(dòng)TFT-LCD
    的頭像 發(fā)表于 09-27 15:34 ?858次閱讀
    使用<b class='flag-5'>MM32F3270</b> FSMC驅(qū)動(dòng)TFT-LCD

    基于MM32F3270以太網(wǎng)Client使用

    基于MM32F3270以太網(wǎng)Client使用
    的頭像 發(fā)表于 09-27 15:44 ?635次閱讀
    基于<b class='flag-5'>MM32F3270</b>以太網(wǎng)Client使用

    基于MM32F3270以太網(wǎng)UDP使用

    基于MM32F3270以太網(wǎng) UDP使用
    的頭像 發(fā)表于 09-27 15:42 ?434次閱讀
    基于<b class='flag-5'>MM32F3270</b>以太網(wǎng)UDP使用

    基于MM32F3270以太網(wǎng)Client_Socket使用

    基于MM32F3270以太網(wǎng)Client_Socket使用
    的頭像 發(fā)表于 09-27 15:37 ?496次閱讀
    基于<b class='flag-5'>MM32F3270</b>以太網(wǎng)Client_Socket使用