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

电子说

1.2w人已加入

描述

简 介

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

RTOS

1、移植应用的准备

1.1 硬件开发板的准备

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

RTOS

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 库函数和例程

RTOS

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 主页上的“下载”按钮来下载存储库的副本。

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

RTOS

如下图所示:

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

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

RTOS

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

2、Threadx 的移植

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

2.1 建立工程目录

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

RTOS

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

“MM32F3270Projectthreadxcommon”

“MM32F3270Projectthreadxportscortex_m3keil”

目录。

RTOS

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

RTOS

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

RTOS
RTOS

最后形成如下目标目录:

RTOS

2.2 添加源码到KEIL工程

打开IOtoggle工程;

RTOS

它包含基本的LED blink功能;

RTOS

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

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

RTOS

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

RTOS

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

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

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

RTOS

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

添加threadxportscortex_m3keilexample_build 下的.s 文件:

tx_initialize_low_level.s:

RTOS

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

添加threadxportscortex_m3keilexample_build 下的.c 文件:

sample_threadx.c:

RTOS

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

RTOS

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

RTOS

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

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

..threadxcommoninc

..threadxportscortex_m3keilinc

删除未用到的目录

..USER

RTOS

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

编译报如下错误:

RTOS

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

RTOS

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

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

RTOS

及删除__user_initial_stackheap函数:

RTOS

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

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

RTOS

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

RTOS

修改__tx_vectors为__Vectors

修改|Image$$ZI$$Limit|

RTOS

添加SysTick_Handler声明到如下代码:

RTOS

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

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

RTOS

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

RTOS

把宏定义:#define USE_SYSTICK_DELAY 1

修改为:#define USE_SYSTICK_DELAY 0

编译通过:

RTOS

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

3、Threadx 的运行与调试

3.1 下载与调试

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

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

RTOS

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

RTOS

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

RTOS

4、小结

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

提示

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

审核编辑 黄宇

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

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分