1、ThreadX简介 ThreadX 的作者是 William lamie(同样是 Nucleus RTOS 的原始作者,于 1990 年发布)。1996的时候成立了 Express Logic,并于 1997 发布首版 ThreadX RTOS。 ◆ ThreadX4 发布于 2001 年,ThreadX5 发布于 2005 年,ThreadX6 发布于 2020 年。 ◆ FileX – ThreadX 的嵌入式文件系统于 1999 年发布首版。 ◆ NetX – ThreadX 的嵌入式 TCP / IP 网络协议栈于 2002 年发布首版。 ◆ USBX – ThreadX 的嵌入式 USB 协议栈于 2004 年发布首版。 ◆ 2009 年推出了适用于 SMP 多核环境的 ThreadX。 ◆ 2011 年发布支持动态应用加载的 ThreadX Modules。 ◆ GUIX – ThreadX 的嵌入式 UI 于 2014 年发布首版。 ◆ Microsoft 在 2019 年 4 月 18 日以未公开的价格购买了 Express Logic。 Azure RTOS ThreadX 是 Microsoft 提供的高级工业级实时操作系统 (RTOS)。 它是专门为深度嵌入式实时 IoT 应用程序设计的。 Azure RTOS ThreadX 提供高级计划、通信、同步、计时器、内存管理和中断管理功能。 此外,Azure RTOS ThreadX 具有许多高级功能,包括 picokernel™ 体系结构、preemption-threshold™ 计划、event-chaining™、执行分析、性能指标和系统事件跟踪。 Azure RTOS ThreadX 非常易于使用,适用于要求极其苛刻的嵌入式应用程序。 Azure RTOS ThreadX 在各种产品(包括消费者设备、医疗电子设备和工业控制设备)上的部署次数已达数十亿次。 ThreadX具有以下图中特性,同时也是一款开源RTOS。 [size=12.0000pt]2、AT32WB415移植ThreadX ThreadX的源码在github的地址为https://github.com/azure-rtos/threadx。其源码的目录结构如下图所示。 其中build为编译后的生成的目录,cmake目录放各个硬件平台的cmake编译脚本,common为RTOS内核源码,commom_modules为支持模块升级的内核源码,commom_smp为支持多核主控的内核源码,同理port为支持各硬件平台的相关汇编源码。 目前ThreadX支持几乎所有市面上的硬件平台,如下图所示。 另外,几乎所有的编译器也是支持的,AT32WB415属于cortex-m4核,进入cortex-m4核文件夹可以看到所支持的编译器工具如下图所示。
适配不同的硬件平台主要移植的是port下面的汇编文件,如果高手也是可以用c实现的,这里以Keil为例简单说明一下,cortex-m4下面汇编文件如下图所示,还有inc目录下的tx_port.h可以完全不需要修改。 工程目录下会有一个和具体的硬件关联的文件tx_initialize_low_level.s如下图所示,该文件用于启动整个硬件,比较重要的函数有_tx_initialize_low_level函数。 正常情况下在ThreadX源码的基础上移植到不同的平台需要注意两点: 1)、_tx_initialize_low_level函数移植; 2)、系统时钟节拍提供,可以使用systick或其他定时器来提供,在时钟节拍中调用函数_tx_timer_interrupt(),用于触发任务调度; 3)、用户线程的入口必须使用以下函数作为用户资源启动入口,且在不修改ThreadX源码的情况下是不能修改其名称的,该函数接口名为void tx_application_define(void *first_unused_memory); 为了做到最小的移植工作,即不过多修改AT32W415自带的启动文件,所以将ThreadX源码中示例中tx_initialize_low_level.s文件的_tx_initialize_low_level移植到startup_at32wb415.s,时间节拍使用定时器5(主要定时器的中断优先级设置为最低),示例代码也是运行官方的,只是在线程0中添加了闪烁LED3的代码,如下几图所示。
[size=12.0000pt]3、ThreadX效果演示 通过上述的移植,然后编译下载程序,即看到运行效果,最直观的就是线程0中添加的LED闪烁代码,2秒为一个周期,即亮一秒钟,灭一秒钟。 然后仿真可以看到各个线程中相关的变量的变化,如下图所示。
|