记录下 freeRTOS 移植过程

本文详述了将FreeRTOS移植至STM32项目的全过程,包括源码下载、工程配置、关键文件调整及中断向量重定向。作者分享了移植过程中遇到的问题与解决策略,特别强调了初始化中断优先级和正确使用SysTick_Handler的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

       接触freeRTOS没多长时间,决定重0开始 移植 freeRTOS到 老项目中。其实本来项目也没多复杂, 希望项目源码简介些, 有条理些, 正好不太忙,于是参考原子例程移植。

       首先去freeRTOS官网 下载 源码下载工具 FreeRTOSv10.2.1.exe。下载后运行, 选择好目录就可以等待下载完成了。下载好的目录内容比较简洁,FreeRTOS-Plus目录中有FAT,TCP,UDP等中间件支持,暂时用不到,so 直接进入FreeRTOS目录, 把Source目录复制到 自己的工程文件夹下。 然后在keil工程下 新建 rtosCore 和 rtosPort 两个组, Core中添加 list.c  queue.c task.c 最少3个文件,Port下添加 内存管理heap_4.c   处理器接口port.c 两个文件, 其中heap_4.c  在MemMang 目录下,port.c在portable\RVDS目录下,  到这里还差一个配置文件FreeRTOSConfig.h, 这个文件在下载的FreeRTOS\Demo\CORTEX_STM32F103_Keil 路径下, 这里其实就是已经移植好的, 配置好的文件。 然后配置下工程 头文件包含目录。  最后重要的一步是  3个中断函数(SysTick_Handler,  SVC_Handler ,  PendSV_Handler),这里要把它们和 freeRTOS的 连接起来, 方法有很多种, 我直接把 启动文件 startup_stm32f10x_hd.s 修改了,如图, 只是因为用到了原子的delay函数, 所以 SysTick_Handler没修改, 函数定义在delay.c 中。

       

        中间有个小插曲, 我使用了原子的delay.c 文件, 但是上图部分,SysTick_Handler 也替换成 xPortSysTickHandler了, 结果老是进 hardFault, 调试了下,发现还没创建任务呢就 进 hardFault了,  猜测可能是 提前进调度中断函数了, 因为SysTick 被原子哥初始化在 delay.c中了, 并且直接开启了, 而我也是创建任务前就调用delay初始化了, 造成直接进切换任务去了,结果只能是 hardFault了,原子哥的SysTick_Handler 函数是判断 freeRTOS运行才允许调用 的。好啦, 就改成这样吧。

    最后简单总结一下过程,注意事项:

    // 移植过程             
// 1 下载复制 freeRTOS源代码,内存管理heap_4.c , 处理器接口port.c ,FreeRTOSConfig.h, \
     工程添加文件, 配置头文件目录
// 2 根据需要配置  FreeRTOSConfig.h 文件, 这一步可以放到后面需要某功能的时候做
// 3 编写  ( 创建任务, 调用vTaskStartScheduler()函数, systic启用在这个函数中)
// 4 需要中断向量重定向 (systick, pendsvc,PendSV_Handler。。。),这里使用  修改启动文件 startup_stm32f10x_hd.s 中的函数的方法
 
//  note 初始化时 不要忘记初始化 中断优先级分组, 如果使用原子哥的 延时函数, 注意不要越过 delay.c 中定义的 SysTick_Handler 而直接使用 xPortSysTickHandler函数 。

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值