freertos概述
下面内容都是参考的韦老师的课程写的,讲得非常好。这里给出链接韦东山《FreeRTOS快速入门》教程-基于 keil 模拟器 | 百问网
1. 概述
我曾经2战freerots,但终究还是忘得差不多了,学习韦老师的课程真是让我又爱又恨,这次我吸取教训,决定把我学到的用笔记记录下来,事不过三,我不信我学不到东西
2. 堆和栈的概念
堆: 堆是一块可以自己随意分配的内存
栈: 栈就是一块空闲的内存,在程序开始调用main函数之前,我们要设置栈,让它指向某一块空闲的内存
调用函数之前有3个步骤
- 划分栈
- 把LR,局部变量存入栈
- 执行代码
比如,BL main会做两件事情
让LR 等于返回地址
执行代码
每个任务都得有自己的栈,栈在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
- FreeRTOS配置了一个周期性的时钟中断:Tick Interrupt
- 每发生一次中断,中断次数累加,这被称为 tick count,它的类型是TickType_t
- FreeRTOSConfig.h 中定义 configUSE_16_BIT_TICKS 时,TickType_t 就是 uint16_t,否则 TickType_t 就是 uint32_t
- 对于 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 + \ | 找到被引用的部分 |