现在的位置: 首页 > 技术文章 > 正文

Cortex M 使用FreeRTOS小记

2019年01月10日 技术文章 ⁄ 共 1137字 ⁄ 字号 Cortex M 使用FreeRTOS小记已关闭评论 ⁄ 阅读 2,430 次

环境:Keil

芯片:STM32F103

今天只是一次尝试运行的记录,包括工程搭建流程及运行演示,具体的FreeRtos的实现细节,博主也是刚刚开始学习,后续会写一写碰到的知识点。

1、 从官网下载最新版的FreeRTOS源码

https://www.freertos.org/

下载包目录包含两个子目录: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)添加头文件路径

  1. ...\FreeRTOS\Source\portable\RVDS\ARM_CM3
  2.  …\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个任务都跑起来了。

×