环境:Keil
芯片:STM32F103
今天只是一次尝试运行的记录,包括工程搭建流程及运行演示,具体的FreeRtos的实现细节,博主也是刚刚开始学习,后续会写一写碰到的知识点。
1、 从官网下载最新版的FreeRTOS源码
下载包目录包含两个子目录:FreeRTOS和FreeRTOS-Plus。如下所示:
- FreeRTOS-Plus 包含FreeRTOS+组件和演示例程;
- FreeRTOS 包含FreeRTOS实时内核源文件和演示例程。
2、将FreeRtos代码加入到自己工程中
(1)首先按照写裸机的方式搭建好工程最初的框架:
主要是加入 CMSIS-M3 的标准库及启动代码等
(本文只是初识FreeRtos,所以建的任务比较简单,使用串口打印字符)
(2)添加rtos核心代码
将tasks.c和list.c这三个内核代码加入工程,将port.c和heap_1.c这两个与处理器相关代码加入工程。port.c位于FreeRTOS\Source\portable\RVDS\ARM_CM3文件夹下,heap_1.c位于FreeRTOS/Source/portable/MemMang文件夹下。
(3)添加头文件路径
- ...\FreeRTOS\Source\portable\RVDS\ARM_CM3
- …\FreeRTOS\Source\include
(4)编写FreeRTOSConfig.h文件
对于刚接触FreeRTOS的用户来说,最简单方法是找一个类似的Demo工程,复制该工程下的FreeRTOSConfig.h文件,在这个基础上进行修改。
(5)检查硬件
为了验证你的硬件板子是否可靠的工作,首先编写一个小程序,比如闪烁一个LED灯或者发送一个字符等等,我们这里使用UART发送一个字符。代码如下所示(假设你已经配置好了启动代码,并正确配置了UART):
如果硬件可以正常发送字符,说明硬件以及启动代码OK,可以进行下一步。
(6)挂接FreeRTOS的中断
在Cortex-M3硬件下,FreeRTOS使用SysTick作为系统节拍时钟,使用SVC和PendSVC进行上下文切换。异常中断服务代码位于port.c文件中,FreeRTOS的作者已经为各种架构的CPU写好了这些代码,可以直接拿来用,需要用户做的,仅仅是将这些异常中断入口地址挂接到启动代码中。
在startup_stm32f10x_hd.s中,使用IMPORT关键字声明要挂接的异常中断服务函数名,然后将:
(7)建立任务测试
这里我建立了6个任务,每个任务发送一个字符,比如任务1发1,任务2发2.........
(8)测试
可以看到6个任务都跑起来了。