如何将STM32移植Freertos成?

摘要:STM32移植Freertos 1、FreeRTOS™ - FreeRTOS™官网下载源码 解压后 FreeRTOSv202406.04-LTSFreeRTOS-LTSFreeRTOSFreeRTOS-Kernel 仅保留FreeRT
STM32移植Freertos 1、FreeRTOS™ - FreeRTOS™官网下载源码 解压后 FreeRTOSv202406.04-LTS\FreeRTOS-LTS\FreeRTOS\FreeRTOS-Kernel 仅保留FreeRTOS-Kernel文件夹下文件 仅保留选中文件 工程中添加Freertos组 添加头文件路径 FreeRTOSv202406.04-LTS\FreeRTOS-LTS\FreeRTOS\FreeRTOS-Kernel\includeFreeRTOSv202406.04-LTS\FreeRTOS-LTS\FreeRTOS\FreeRTOS-Kernel\include 将.c文件添加进工程文件夹中 根据所移植目标芯片选择内核文件(stm32f103,选择ARM_CM3),将文件夹内文件添加至工程 将FreeRTOSv202406.04-LTS\FreeRTOS-LTS\FreeRTOS\FreeRTOS-Kernel\examples\template_configuration FreeRTOSConfig.h文件添加至工程 根据所需功能,开启宏定义 打开stm32f10x_it.c/.h文件,注释三个中断函数(确保不会重定义,同时让freertos接管中断) 函数 用途 SVC_Handler Supervisor Call(软件中断)处理,用于操作系统调用或异常 PendSV_Handler 挂起中断,用于任务切换(Context Switch) SysTick_Handler 系统滴答定时器中断,通常用于系统节拍计数 2️⃣ FreeRTOS 对这些函数的要求 FreeRTOS 核心任务调度依赖 SysTick、PendSV、SVC: SysTick_Handler FreeRTOS 使用它作为 节拍中断(tick) 用于管理任务延时、任务切换计时等 PendSV_Handler FreeRTOS 用它实现 任务切换 在 PendSV 中切换任务上下文(寄存器、栈指针) SVC_Handler FreeRTOS 可能用它初始化第一个任务(vPortSVCHandler) 如果 startup 文件里有原始弱符号的这几个函数,它们可能与 FreeRTOS 自己实现的 vPortXXX_Handler 冲突。 不要删除这些函数,只是注释掉或确保 FreeRTOS 的实现覆盖它们 如果你不移植 FreeRTOS,用系统默认空实现即可 FreeRTOS 的 port.c 里有宏: #define vPortSVCHandler SVC_Handler #define xPortPendSVHandler PendSV_Handler #define xPortSysTickHandler SysTick_Handler 链接器会把中断向量表自动指向 FreeRTOS 的处理函数 总结一句话: 注释这三个默认函数,是为了让 FreeRTOS 自己实现的 SVC/PendSV/SysTick 处理函数覆盖系统默认空函数,从而实现正确的任务调度和系统节拍。
阅读全文