ThreadX移植STM32H7指南

ThreadX与STM32H7相关资源

ThreadX官方文档
ThreadX代码仓库
STM32Cube MCU包

ThreadX移植

以下基于STM32H7的基本模板(已经移植HAL)

将ThreadX源文件添加进工程中(MDK为例)

ThreadX代码仓库中下载ThreadX,下载好的ThreadX(6.2.1)有以下文件夹

    .
    ├── cmake                        # CMake,用于构建工程,使用MDK时可删除
    ├── common                       # ThreadX
    ├── common_modules               # ThreadX module核心文件
    ├── common_smp                   # ThreadX SMP核心文件
    ├── docs                         # 文档支持
    ├── ports                        # 针对于不同架构和编译器的接口文件,需要做修改,适用于ThreadX
    │   ├── cortex_m7     
    │   │   ├── iar                  # IAR工程样例
    │   │   │   ├── example build    # IAR workspace and sample project files
    │   │   │   ├── inc              # 适用于cortex_m7架构的tx_port.h
    │   │   │   └── src              # 适用于cortex_m7架构的接口源代码
    │   │   ├── ac6                  # AC6工程样例
    │   │   ├── gnu                  # GUN工程样例
    │   │   └── ...
    │   └── ...        
    ├── ports_modules                # 同上,适用于threadX modules
    ├── ports_smp                    # 同上,适用于threadX SMP
    ├── samples                      # 一些例子
    └── utility                      # 测试样例和资源

.\common\src下的所有源文件(除tx_misra.c外)添加进工程,将.ports\cortex_m7\ac6\src下的所有源文件(除tx_misra.S外)和".\ports\cortex_m7\ac6\example_build\sample_threadx\tx_initialize_low_level.S"添加进工程,如图所示:
添加文件后的工程

添加包含目录

在MDK的C\C++选项的包含目录中添加.\ports\cortex_m7\ac6\inc(用于包含tx_port.h)、.\common\inc,在ASM选项中的包含目录中添加tx_user.h所在的目录

使用tx_user.h

.\common\inc\tx_user_sample.h提供了一个tx_user.h的模板,tx_user.h提供了一些选项用于配置ThreadX,编译器中宏定义TX_INCLUDE_USER_DEFINE_FILE即可将tx_user.h包含入tx_port.h以使用tx_user.h。

修改tx_initialize_low_level.S

修改时钟频率和SysTick频率
SYSTEM_CLOCK      =   400000000
SYSTICK_CYCLES    =   ((SYSTEM_CLOCK / 1000) -1)
修改堆栈起始地址
    LDR     r0, =_tx_initialize_unused_memory       @ Build address of unused memory pointer
    LDR     r1, =__initial_sp                       @ Build first free address

这里的起始地址是ST提供的启动文件中的__initial_sp:

Stack_Size      EQU     0x00001000

                AREA    STACK, NOINIT, READWRITE, ALIGN=3
Stack_Mem       SPACE   Stack_Size
__initial_sp
修改向量表地址
@
@    /* Setup Vector Table Offset Register.  */
@
    MOV     r0, #0xE000E000                         @ Build address of NVIC registers
    LDR     r1, =__Vectors                          @ Pickup address of vector table
    STR     r1, [r0, #0xD08]                        @ Set vector table address
@
@    /* Set system stack pointer from vector value.  */
@
    LDR     r0, =_tx_thread_system_stack_ptr        @ Build address of system stack pointer
    LDR     r1, =__Vectors                          @ Pickup address of vector table
    LDR     r1, [r1]                                @ Pickup reset stack pointer
    STR     r1, [r0]                                @ Save system stack pointer

这里的向量表地址是ST提供的启动文件中的__Vectors:

; Vector Table Mapped to Address 0 at Reset
                AREA    RESET, DATA, READONLY
                EXPORT  __Vectors
                EXPORT  __Vectors_End
                EXPORT  __Vectors_Size

__Vectors       DCD     __initial_sp                      ; Top of Stack
                DCD     Reset_Handler                     ; Reset Handler
                DCD     NMI_Handler                       ; NMI Handler
在systick中调用HAL_IncTick,以保证HAL的正常工作
SysTick_Handler:
@ VOID TimerInterruptHandler (VOID)
@ {
@
    PUSH    {r0, lr}
#ifdef TX_ENABLE_EXECUTION_CHANGE_NOTIFY
    BL      _tx_execution_isr_enter             @ Call the ISR enter function
#endif
    BL      HAL_IncTick
    BL      _tx_timer_interrupt
#ifdef TX_ENABLE_EXECUTION_CHANGE_NOTIFY
    BL      _tx_execution_isr_exit              @ Call the ISR exit function
#endif

关闭其他的SysTick_Handler和PendSV_Handler

这两个中断函数都由ThreadX实现,其他地方的定义应该删除。

实现void tx_application_define(void *first_unused_memory)函数

这个函数应该实现任务的定义,可参考.\samples\demo_threadx.c

在main函数中调用tx_kernel_enter()

正常情况下,这个函数不会返回,可参考.\samples\demo_threadx.c,在调用这个函数前需要进行最基本的初始化(例如配置系统时钟)

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇