ThreadX移植——STM32H7+MDK-AC6平台

一、前言

在uCOS全家桶宣布开源之后被微软收购的ThreadX也开源了,真是喜大普奔,对于我们这些嵌入式行业从业者来说,能够学习这些高含金量的代码对于眼界的开拓和能力的提升都是很有帮助的。ThreadX还包含了NETX、GUIX、FILEX、USBX等丰富的组件,几乎包含了嵌入式开发中的所有场景,这些组件和ThreadX-RTOS能够完美的配合完成一条龙的开发。ThreadX的github地址:[Azure RTOS (github.com)]:

二、准备

ThreadX在更新了几个版本之后已经提供了多个平台的移植端口,包括AC5、AC6、GCC、IAR,现在可以更方便地移植到各编译器平台了。本次移植是在STM32H743 + MDK-AC6 + ThreadX6.1.2下完成。首先使用STM32CubeMX新建一个工程,配置了LED、KEY、UART,然后将下载的ThreadX放在同一工程下(移植用到commonports/cortex_m7/ac6下的文件)。

三、配置

1、添加文件及参数

  • 工程新增ThreadX/PortThreadX/Src分组,ThreadX/Portf组中添加ports/cortex_m7/ac6/src目录下所有文件以及ports\cortex_m7\ac6\example_build\sample_threadx目录下的tx_initialize_low_level.S文件; ThreadX/Src组中添加threadx\common\src下所有文件。添加完成如下图所示:

  • 在这里插入图片描述

  • 配置工程宏定义参数和文件包含路径如下所示。

在这里插入图片描述

其中USE_HAL_DRIVERSTM32H743xx是使用HAL库创建工程需要包含的定义,TX_ENABLE_FPU_SUPPORT是使能ThreadX的浮点运算支持需要定义的,在readme_threadx.txt文档中有如下描述:

If saving the context of the FPU registers
is needed, the ThreadX library should be re-built with TX_ENABLE_FPU_SUPPORT defined.

当然要正确的使用硬件浮点运算功能还应该开启MDK中的如下配置:
在这里插入图片描述

2、修改适配文件

主要是对tx_initialize_low_level.S文件进行修改,该文件作用是初始化栈地址和向量表、配置系统心跳节拍、配置部分中断优先级、定义部分中断处理函数。但是其中有些工作在STM32H743的启动文件startup_stm32h743xx.s中已经做了,而STM32启动文件所实现的一些功能这个文件又没有实现。因为该文件是针对cortex_m7内核芯片做的,没有针对具体某一款芯片,所以没有STM32的启动文件实现的功能完善,因此不能替代启动文件。这里的修改方法是不动STM32启动文件,修改tx_initialize_low_level.S文件,在此提供两种修改方案:1、根据冲突修改tx_initialize_low_level.S文件内容;2、将tx_initialize_low_level.S文件改为C语言实现(STM32启动文件已经实现的不管,只需将ThreadX需要配置的功能用C实现)。

  • 方案1修改后内容如下(修改处已标注):

    @/**************************************************************************/
    @/*                                                                        */
    @/*       Copyright (c) Microsoft Corporation. All rights reserved.        */
    @/*                                                                        */
    @/*       This software is licensed under the Microsoft Software License   */
    @/*       Terms for Microsoft Azure RTOS. Full text of the license can be  */
    @/*       found in the LICENSE file at https://aka.ms/AzureRTOS_EULA       */
    @/*       and in the root directory of this software.                      */
    @/*                                                                        */
    @/**************************************************************************/
    @
    @
    @/**************************************************************************/
    @/**************************************************************************/
    @/**                                                                       */
    @/** ThreadX Component                                                     */
    @/**                                                                       */
    @/**   Initialize                                                          */
    @/**                                                                       */
    @/**************************************************************************/
    @/**************************************************************************/
    @
    @
        .global     _tx_thread_system_stack_ptr
        .global     _tx_initialize_unused_memory
        .global     _tx_timer_interrupt
        .global     __main
        .global     __tx_SVCallHandler
        .global     __tx_PendSVHandler
        .global     __tx_NMIHandler                     @ NMI
        .global     __tx_BadHandler                     @ HardFault
        .global     __tx_SVCallHandler                  @ SVCall
        .global     __tx_DBGHandler                     @ Monitor
        .global     __tx_PendSVHandler                  @ PendSV
        .global     __tx_SysTickHandler                 @ SysTick
        .global     __tx_IntHandler                     @ Int 0
    @
    @
    SYSTEM_CLOCK      =   480000000						@---modify by user(系统频率)
    SYSTICK_CYCLES    =   ((SYSTEM_CLOCK / 1000) -1)	@---modify by user(时钟节拍)
    
        .text 32
        .align 4
        .syntax unified
    @/**************************************************************************/
    @/*                                                                        */
    @/*  FUNCTION                                               RELEASE        */
    @/*                                                                        */
    @/*    _tx_initialize_low_level                          Cortex-M7/AC6     */
    @/*                                                           6.1          */
    @/*  AUTHOR                                                                */
    @/*                                                                        */
    @/*    William E. Lamie, Microsoft Corporation                             */
    @/*                                                                        */
    @/*  DESCRIPTION                                                           */
    @/*   
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值