ATSAMV71Q21B移植ThreadX

硬件平台

  • MCU: ATSAMV71Q21B
    • 开发平台:Microchip Studio 7.0
    • 软件架构:ASF4.0
    • 实时操作系统:ThreadX

获取ThreadX代码

  • 下载ThreadX代码
  • 下载地址:https://github.com/threadx/threadx
  • 移植需要的主要代码包括common和ports两个目录,其中common目录下包含了ThreadX的核心代码,ports目录下包含了移植到不同平台的代码。

移植ThreadX

  • 使用Microchip Studio创建ThreadX_Demo项目
  • 在Threadx_Demo创建ThreaX目录,添加common和ports的代码
  • ports文件移植,ATSAMV71Q21B是Cortex-M7架构,使用arm gcc编译,所以ports中选在cortex_m7/gun目录下的代码
  • 移植example_build文件夹下的cortexm7_crt0.S,tx_initialize_low_level.S

  • cortexm7_crt0.S

    cortexm7_crt0.S 是专为 ARM Cortex-M7 架构设计的启动文件(startup file)。其主要作用是完成系统初始化,为 ThreadX 内核及应用程序的运行做好准备。​

    启动文件的主要功能包括:

    设置堆栈指针(Stack Pointer): 定义并初始化主堆栈指针,确保异常处理和中断服务例程能够正确运行。​

    初始化数据段和 BSS 段: 将已初始化的全局变量从只读存储器(如 Flash)复制到 RAM 中的数据段,并将未初始化的全局变量(BSS 段)清零。这确保了全局变量具有预期的初始值。​

    设置向量表: 定义并初始化中断向量表,使处理器能够正确响应各种中断和异常。​

    调用主程序入口点: 在完成上述初始化后,启动文件通常会调用 ThreadX 的内核初始化函数,进而启动应用程序。​

  • tx_initialize_low_level.S

    tx_initialize_low_level.S 是 ThreadX 的低级启动/初始化汇编文件,它完成以下关键任务:

    初始化系统和中断(包括 SysTick、SVC、PendSV),确保系统环境符合内核要求;

    设置中断处理过程中使用的系统栈(MSP)和支持任务上下文切换的代码;

    为内核调度启动和任务切换提供底层支持。

修改中断向量表

默认的 startup_samv71q21b.c 文件中则会定义一个名为 exception_table(或类似名称)的结构体(通常使用__attribute__((section(“.vectors”)))),其中列出了 Cortex-M 的各种异常和外设中断向量。此时,需要 将对应的异常(SVC、PendSV、SysTick 等)的处理函数指针替换为 ThreadX 提供的函数。

一般情况下,最关键的就是 SVC、PendSV 和 SysTick 三个;剩下的异常/中断若不需要特定 ThreadX 逻辑,则可以保持原状。

修改链接脚本

添加__RAM_segment_used_end__

__RAM_segment_used_end__ = .;

修改中断向量表变量对应ThreadX汇编变量

修改ThreadX系统文件的时钟周期与CPU系统时钟周期相同

编译

编译完成后,将生成的.elf文件烧录到开发板中运行。