使用FreeRTOS官方移植,移植到STM32F1平台中

本教程基本参照[野火]《FreeRTOS内核实现与应用开发实战指南》,本人相当推荐此教程,尤其是第一部分从0开始写内核,虽然比较晦涩,但是学完之后对FreeRTOS的运行原理还有框架的认识会有一个很大的提高。

首先获取FreeRTOS的源码

我们从官网下载9.0版本的压缩包

解压后

Plus中包含付费的应用程序,不予使用

打开FreeRTOS文件夹

license是许可协议,非商用不需要考虑。

Demo中有FreeRTOS官方对许多平台写的例程,我们到时候裁剪和设置就需要参考这里面的demo

Source中就有我们最需要的源码了

由于我们是使用官方做的移植,而不是我们从源码开始写API,所以我们使用官方写好的对应芯片的源码,所以我们创建一个可以直接使用的RTOS文件夹

1.创建RTOS文件夹,内部如下

1.打开Source

将Source中的游离文件放入创建的src

将官方的include文件夹内容放入我们RTOS文件夹的include文件夹中

将portable中RVDS(keil与RVDS相同)放入我们创建的port文件夹(也可以选择具体内核)中,再将memmang(内存管理)放入port文件夹中,实际使用选择其中一个heap文件

然后我们将制作好的RTOS文件放入一个简单的裸机例程中

再在keil中为这个裸机例程添加两个组,如下。

将src中.c文件添加进FreeRTOS/src组中,将port中memmang还有RVDS中ARM_CM3中的.c文件添加进FreeRTOS/port组中

添加头文件路径

将FreeRTOS支持文件都导入后,对中断进行修改,因为FreeRTOS中无论是任务启动或者任务切换调度还是时间片的切换,都是在中断(SVC、PendSV,还有systick)中进行,当然FreeRTOS官方很贴心已经重写PendSV_Handler()与 SVC_Handler(),,滴答中断也在port.c中实现了xPortSysTickHandler()。所以我们要注释掉stm32f10x_it.c中的PendSV_Handler()还有 SVC_Handler(),对systick进行重写在里面加入xPortSysTickHandler()(内部实现了按任务延时列表来切换任务)

重写部分

在重写前在stm32f10x_it.c加入FreeRTOS.h与task.h头文件(顺序不能错)

修改完中断之后我们打开官方Demo文件中stm32f103的demo,将其中的conf文件添加进裸机程序中(里面的内容详解以后有时间再做,当然也可以用野火的conf文件,里面已经加了中文注释,结合野火教程中的第一章内容就能看懂),然后加上#include "stm32f10x.h"头文件
 

注意:FreeRTOS.h头文件一定要在我们添加的freertos相关的头文件之前

否则会报如上等错误

最后编译烧录进开发板中

成功烧录,目前还未创建任务,所以没有现象

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值