下面内容都是参考的韦老师的课程写的,讲得非常好。这里给出链接韦东山《FreeRTOS快速入门》教程-基于 keil 模拟器 | 百问网

1. 概述

我曾经2战freerots,但终究还是忘得差不多了,学习韦老师的课程真是让我又爱又恨,这次我吸取教训,决定把我学到的用笔记记录下来,事不过三,我不信我学不到东西

2. 堆和栈的概念

堆: 堆是一块可以自己随意分配的内存

栈: 栈就是一块空闲的内存,在程序开始调用main函数之前,我们要设置栈,让它指向某一块空闲的内存

调用函数之前有3个步骤

  1. 划分栈
  2. 把LR,局部变量存入栈
  3. 执行代码

比如,BL main会做两件事情

  1. 让LR 等于返回地址

  2. 执行代码

每个任务都得有自己的栈,栈在freertos中非常重要


3. 移植freertos

3.1文件移植

我们下载官方的文档

主要保存两个目录,source,demo

demo文件下,我们保存common,和自己配套的芯片和编译器

source 是freerots的核心文件,我们保存器其子文件的protable下面的RVDS,和MeMang文件

MemMang是内存管理文件,后面单独拿一节来讲

RVDS,这下面保存的是cortexM3在keil工具的移植文件

3.2 头文件解释

FreeRTOSConfig.h

FreeRTOS 的配置文件,比如选择调度算法:configUSE_PREEMPTION
每个 demo 都必定含有 FreeRTOSConfig.h
建议去修改 demo 中的 FreeRTOSConfig.h,而不是从头写一个

FreeRTOS.h

使用FreeRTOS API函数时,必须包含此文件。在FreeRTOS.h之后再去包含其他头文件,比如task.h, queue.h,semphr.h, event_grouh.h

3.3 类型规范

每个移植的版本都含有自己的 portmacro.h 头文件,里面定义了 2 个数据类型:

TickType_t

  1. FreeRTOS配置了一个周期性的时钟中断:Tick Interrupt
  2. 每发生一次中断,中断次数累加,这被称为 tick count,它的类型是TickType_t
  3. FreeRTOSConfig.h 中定义 configUSE_16_BIT_TICKS 时,TickType_t 就是 uint16_t,否则 TickType_t 就是 uint32_t
  4. 对于 32 位架构,建议把 TickType_t 配置为 uint32_t

BaseType_t:

这是该架构最高效的数据类型,在32位架构中,它就是uint32_t

BaseType_t 通常用作简单的返回值的类型,还有逻辑值,比如 pdTRUE/pdFALSE

变量名规范

变量名前缀 含义
c char
s short ,int16_t
l long,int32_t
x 结构体 BaseType_t
u unsigned
p 指针
uc unsigned char
pc char 指针

4. source insight

快捷键

快捷键 含义
F8 高亮代码
CTRL + \ 找到被引用的部分