0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

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

jf_pJlTbmA9 来源: 灵动MM32MCU 作者: 灵动MM32MCU 2023-10-27 10:15 次阅读

简 介

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 适用系列型号

wKgaomUD5uOAHgkOAABBsCMtdho057.png

1、移植应用的准备

1.1 硬件开发板的准备

该移植过程中应用的开发板为MM32的EVBoard MB039(MM32F3273G9P)

wKgZomUD5uWAFbSCAAK4QKQZpaY148.png

EV Board (MM32F3273G9P)的简要参数

Arm Cortex-M3 内核

板载 MM32F3273G9P(LQFP144)

USB Host / Device、SPI、I2C

4 x Key、4 x LED

I2S Speaker

TF-Card

Ethernet PHY

1.2 软件的准备

库函数和例程(Lib Samples)

该移植过程中应用的Firmware分别为MM32F3270 库函数和例程

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 何时需要许可证?

Microsoft 将 Azure RTOS 源代码发布到 GitHub。安装和使用该软件进行内部开发、测试和评估无需许可证。分发或销售组件和设备需要许可证,除非使用 Azure RTOS 许可的硬件。

ThreadX 安装

可以通过将 GitHub 存储库克隆到本地计算机来安装 ThreadX。下面是用于在 PC 上创建 ThreadX 存储库的克隆的典型语法。

shell复制

git clone https://github.com/azure-rtos/threadx

或者,也可以使用 GitHub 主页上的“下载”按钮来下载存储库的副本。

下载后的仓库代码目录列表如下:

wKgaomUD5ueAZHpPAABoCiEGlIU433.png

如下图所示:

Azure RTOS ThreadX(源码)支持的开发环境

ThreadX 内核提供好了各种主流硬件平台和软件平台的移植文件,以Cortex_M3为例,可以支持以下六种开发环境:

wKgaomUD5uiAYB-sAAAH7G66gCg440.png

本次移植过程使用keil模板为例子,做移植说明。

2、Threadx 的移植

该章节介绍了移植的过程和注意事项。

2.1 建立工程目录

建立目标工程文件夹“MM32F3270Project”:

wKgZomUD5uyACEIqAAAJCD_IJ88177.png

复制Threadx中的“common”目录和“ports”目录下的“Cortex-M3”目录到:

“MM32F3270Projectthreadxcommon”

“MM32F3270Projectthreadxportscortex_m3keil”

目录。

wKgZomUD5u2AIGnkAABL4ESW6Eo386.png

复制LibSamples_MM32F3270中的“Device”目录到:MM32F3270ProjectDevice

wKgaomUD5u6AJ0GKAAAHqTi6aWw809.png

复制“SamplesLibSamplesGPIOGPIO_Toggle”目录到“MM32F3270Project”目录。

wKgZomUD5vCAZ1XBAABYwWdno2E051.png
wKgaomUD5vGAKPoQAAAQ__yTxXw716.png

最后形成如下目标目录:

wKgaomUD5vKAbT0HAAAOiv4eupc305.png

2.2 添加源码到KEIL工程

打开IOtoggle工程;

wKgZomUD5vOAYO_VAAAfi6Iugpo773.png

它包含基本的LED blink功能;

wKgZomUD5vSAJwBxAAAxsBJgf4E849.png

通过完成编译,选择相应的调试下载工具(ULINK,Jlink,CMSIS-DAP Link,MM32LINK-OB),可以验证EVB正常工作,实现四个LED做500ms/500ms的亮暗闪烁。

验证过后,复制KEILPRJ工程目录为KEILPRJ_Threadx目录;

wKgaomUD5vaAZ09gAABDooKMKG8213.png

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

wKgaomUD5vmAZ-blAABp8f9TzSg638.png

新建threadX/ports/mm32f3270/keil分组,选择对应的编译环境。

移植使用的KEIL为5.35,选用KEIL compiler version 5编译器(armcc)。

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

wKgZomUD5vuAAHzzAABONslR0Hg258.png

新建threadX/ports/mm32f3270/keil_s分组,选择对应的汇编文件。

添加threadxportscortex_m3keilexample_build 下的.s 文件:

tx_initialize_low_level.s:

wKgZomUD5vyAeNqGAABDnX8SNjA328.png

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

添加threadxportscortex_m3keilexample_build 下的.c 文件:

sample_threadx.c:

wKgaomUD5v2AfBXxAABI1q05A3k272.png

因为sample_threadx.c包含main()函数,需要USER 组,以删除USER目录下的main.c文件。

wKgZomUD5v6AVNnXAAA5Vi9CgP4480.png

设置编译环境,选择Use default compiler version 5,编译器为(armcc):

wKgaomUD5wCAOVIvAABfJnWMwQ0494.png

设“C/C++”的头文件包含目录:

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

..threadxcommoninc

..threadxportscortex_m3keilinc

删除未用到的目录

..USER

wKgaomUD5wGAA6yRAAAYNyfnyBQ015.png

完成源代码添加和头文件目录包含,进行首次编译,

编译报如下错误:

wKgZomUD5wOAbogZAAAlkliBL7s333.png

检查适配ThreadX官方的底层适配文件tx_initialize_low_level.s,发现除了必须的函数:_tx_initialize_low_level。该tx_initialize_low_level.s还包含了汇编启动文件startup_mm32f327x_keil.s中的配置代码,包括stack与heap的配置、中断向量表,从而导致了冲突:

wKgZomUD5wSADDkcAAAlSoo1jq0873.png

因此需要移除tx_initialize_low_level.s中stack与heap的配置、中断向量表相关的代码(参考上图中的代码),因为已经在startup_mm32f327x_keil.s中实现。

同样的原因,需要删除Reset_Handler函数:

wKgaomUD5waASIUGAAAJD9sri_E444.png

及删除__user_initial_stackheap函数:

wKgZomUD5wiAXeHxAAATjFsH5kU814.png

并修改ThreadX适配文件tx_initialize_low_level.s中SYSTICK配置的参数。

修改SYSCLK频率,配置systick的中断时间间隔为1ms:

wKgaomUD5wmAc4ubAAAK5HL8LTw267.png

并修改tx_initialize_low_level.s中相关代码,以匹配MM32F3270系列的启动代码startup_mm32f327x_keil.s,以下左侧为tx_initialize_low_level.s原始代码,右侧为修改后代码。

wKgaomUD5wqAelRvAAAbkox7oEQ263.png

修改__tx_vectors为__Vectors

修改|Image$$ZI$$Limit|

wKgZomUD5wuAZIOvAAA3yb4UDsk636.png

添加SysTick_Handler声明到如下代码:

wKgZomUD5w2AXKKkAAAPns1H_ao872.png

具体参考修改后的.s文件。

再次编译,发现SysTick_Handler有冲突:

wKgaomUD5w6AAIJXAAAV0EM-T_g824.png

原因是系统中的DELAY_Init DELAY_Ms延时函数使用了SysTick_Handler。

wKgaomUD5w-AX1d6AAD5h1GahbA735.png

把宏定义:#define USE_SYSTICK_DELAY 1

修改为:#define USE_SYSTICK_DELAY 0

编译通过:

wKgZomUD5xCABBd1AAAPbHCO1eM461.png

配置好下载Debugger工具(可以使用MM32LINK-OB,JLINK,U-LINK或CMSIS-DAP LINK),下载调试。

3、Threadx 的运行与调试

3.1 下载与调试

下载调试默认会运行到main()函数。

该demo示例,建立了5个线程,程序都不与芯片的外设相关:

wKgZomUD5xOAX1I3AAALaei-vmA718.png

线程只做数值自加,Demo演示了事件(Event),队列(queue),信号量(semaphore)的功能。

wKgaomUD5xSAMcQrAAEU1Pue8Rc432.png

全速运行后,可以看到相关的数值在变化:

wKgaomUD5xWAUsjvAAAQcViWH4g239.png

4、小结

关于使用MM32F3270基于Azure RTOS ThreadX 的最小系统就移植完成,并运行起来,后面再给大家介绍Task相关的配置,信号量,互斥锁等Azure RTOS的特色功能。

提示

来源: 灵动MM32MCU
免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理

审核编辑 黄宇

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 嵌入式
    +关注

    关注

    4982

    文章

    18281

    浏览量

    288446
  • threadx
    +关注

    关注

    0

    文章

    14

    浏览量

    13692
  • RTOS
    +关注

    关注

    20

    文章

    776

    浏览量

    118796
收藏 人收藏

    评论

    相关推荐

    Azure RTOS ThreadX的抢占任务应用实现与调试

    Azure RTOS ThreadX 是 Microsoft 提供的高级工业级实时操作系统 (RTOS)。它是专门为深度嵌入式实时 IoT 应用程序设计的。
    发表于 07-12 11:17 2077次阅读

    使用MM32F3270基于Azure RTOS定时器组的应用

    Azure RTOS ThreadX 是 Microsoft 提供的高级工业级实时操作系统 (RTOS)。它是专门为深度嵌入式实时 IoT 应用程序设计的。
    的头像 发表于 12-29 17:26 1254次阅读

    MM32F3270系列32位MCU的特点有哪些

    上海灵动微电子推出全新主流型MM32F3270系列32位MCU,此款MM32F3270系列是基于M3内核的32位微控制器,MM32F3270适用于要求高集成度的高性能控制领域,如:工业控制、消防监控
    发表于 11-03 07:20

    使用MM32F3270基于Azure RTOS定时器组的应用

    各种产品(包括消费者设备、医疗电子设备和工业控制设备)上的部署次数已达数十亿次。在前文描述移植基本内核的基础上,该应用手册描述了MM32F3270系列MCU结合Azure RTOS
    发表于 02-07 14:18

    灵动微电子MM32F3270系列MCU的特点介绍

    上海灵动微电子推出全新主流型MM32F3270系列32位MCU,此款MM32F3270系列是基于M3内核的32位微控制器,MM32F3270适用于要求高集成度的高性能控制领域,如:工业控制、消防监控
    发表于 03-22 16:57 1945次阅读

    【国产MCU移植MM32F3270 EVBoard

    【国产MCU移植MM32F3270 EVBoard
    发表于 12-03 17:21 5次下载
    【国产MCU<b class='flag-5'>移植</b>】<b class='flag-5'>MM32F3270</b> EVBoard

    基于MM32F3270 以太网 Client使用

    接下来给大家介绍基于TCP包的通讯。内容分为基于MM32F3270以太网Client的使用与基于MM32F3270以太网Server的使用。
    发表于 02-08 15:10 0次下载
    基于<b class='flag-5'>MM32F3270</b> 以太网 Client使用

    使用MM32F3270基于Azure RTOS信号量的应用

    Azure RTOS ThreadX 是 Microsoft 提供的高级工业级实时操作系统 (RTOS)。它是专门为深度嵌入式实时 IoT 应用程序设计的。
    的头像 发表于 12-16 09:23 619次阅读

    使用MM32F3270基于Azure RTOS动态内存管理的应用

    Azure RTOS ThreadX 是 Microsoft 提供的高级工业级实时操作系统 (RTOS)。它是专门为深度嵌入式实时 IoT 应用程序设计的。
    的头像 发表于 12-23 11:01 600次阅读

    MM32F3270 产品手册(中文版)

    MM32F3270 产品手册(中文版)
    发表于 02-23 18:40 0次下载
    <b class='flag-5'>MM32F3270</b> 产品手册(中文版)

    MM32F3270 勘误表(中文版)

    MM32F3270 勘误表(中文版)
    发表于 02-23 18:42 0次下载
    <b class='flag-5'>MM32F3270</b> 勘误表(中文版)

    使用MM32F3270基于Azure RTOS事件标志组的应用

    使用MM32F3270基于Azure RTOS事件标志组的应用
    的头像 发表于 10-27 11:31 282次阅读
    使用<b class='flag-5'>MM32F3270</b>基于<b class='flag-5'>Azure</b> <b class='flag-5'>RTOS</b>事件标志组的应用

    基于MM32F3270 I2S使用

    基于MM32F3270 I2S使用
    的头像 发表于 09-27 15:50 501次阅读
    基于<b class='flag-5'>MM32F3270</b> I2S使用

    基于MM32F3270以太网Client使用

    基于MM32F3270以太网Client使用
    的头像 发表于 09-27 15:44 439次阅读
    基于<b class='flag-5'>MM32F3270</b>以太网Client使用

    基于MM32F3270以太网UDP使用

    基于MM32F3270以太网 UDP使用
    的头像 发表于 09-27 15:42 283次阅读
    基于<b class='flag-5'>MM32F3270</b>以太网UDP使用