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文件烧录到开发板中运行。

