FreeRTOS官方指导文档阅读笔记

这篇笔记详细解读了FreeRTOS官方指导文档,涵盖了FreeRTOS的内存管理策略Heap_1到Heap_5,任务管理包括任务创建、优先级、调度,以及中断处理和资源管理。特别强调了中断延迟处理、任务通知和事件组在任务同步中的作用,还介绍了FreeRTOS的调试和统计功能。通过阅读,可以深入理解FreeRTOS如何在实时系统中实现高效的任务调度和内存分配。
摘要由CSDN通过智能技术生成

FreeRTOS官方指导文档阅读笔记

基于 161204_Mastering_the_FreeRTOS_Real_Time_Kernel-A_Hands-On_Tutorial_Guide.pdf,可以从FreeRTOS官网下载

本笔记是即时的,一边阅读一边做笔记。它既包含重要的内容和阅读过程中产生的疑问,不包含完整的知识梳理。参考FreeRTOS官网

pdf版本说明

This is the 161204 copy which does not yet cover FreeRTOS V9.0.0, FreeRTOS V10.0.0, or
low power tick-less operation. Check http://www.FreeRTOS.org regularly for additional
documentation and updates to this book. See http://www.FreeRTOS.org/FreeRTOS-V9.html
for information on FreeRTOS V9.x.x. See https://www.freertos.org/FreeRTOS-V10.html for
information on FreeRTOS V10.x.x. Applications created using FreeRTOS V9.x.x onwards can
allocate all kernel objects statically at compile time, removing the need to include a heap
memory manager.

序言

不知道为何,现在我读书都喜欢先看看序言,它能让我对一本书有大致的了解,明白能从书中获得哪些知识,以及让我快速地订制读书计划。

FreeRTOS基本介绍

FreeRTOS以任务(Task)为单位,当系统空闲时,也自动调度空闲任务idle task。idle task会进行一些后台系统动作,诸如处理能力计算、后台检查或者将处理器置于低功耗模式。

电源管理方面,freeRTOS还有一个tick-less模式。这个模式比正常的低功耗模式拥有更低的电量消耗,而且低功耗的时间持续更长。

更灵活的中断处理,freeRTOS允许将中断处理服务例程延迟在开发者编写的task application中运行,或者在freeRTOS的后台程序中运行。

多任务处理,混合多任务处理。通过简单的设计就可以让一个持续的、循环的、事件驱动的处理过程在一个application中实现。另外,硬实时和软实时的实现是可以通过选择适当的任何和优先级。

所谓硬实时就是100%满足实时要求,软实时就是基本上满足实时性。当我们将一个要求硬实时的任务的优先级设置为最高级时,那么可以认为这个的确是一个硬实时实现。

FreeRTOS Features

列举几个比较关心的feature

  1. 非常灵活的任务优先级控制
  2. 非常灵活的轻量级的任务通知机制
  3. 队列
  4. 二进制和计数信号量
  5. 互斥与递归互斥
  6. 软定时器
  7. 事件组
  8. 钩子函数
  9. idle hook function
  10. 栈溢出检查
  11. 跟踪记录
  12. 任务运行时统计信息收集
  13. 通过软件进行管理的中断堆栈

基本都列出来,我发觉都挺有用的,也许是带着项目的心在阅读,与平时的学习还是不大一样。

开发实验平台

开发实验平台很多,比如可以选择所支持的一种SOC进行(STM32),也可以选择使用Windows模拟器。

windows模拟器相关,参考 http://www.microsoft.com/express ,它不提供实时性。

FreeRTOS源码及工程概览

本章的目的是熟悉freeRTOS的源码结构和Demo,以及熟悉创建一个freeRTOS工程所需要的基本知识。

理解FreeRTOS

FreeRTOS port

FreeRTOS支持20多种编译器,并支持超过3种架构的处理器(比如 ARM就是一种处理器架构)。每一种支持的编译器或者处理器都被称作FreeRTOS的一个port,比如GCC-ARM编译器就是一个port,STM32也是一个port,一个是编译器,另一个则是处理器。

编译

FreeRTOS包含通用代码和port特定代码,每一个port都有对应的demo,而且这些demo都是开箱即用的,无需任何修改就可以编译通过。

FreeRTOSConfig.h

这是一个独立的配置头文件,可以选择性的开启或者关闭一个功能,比如选择某种系统调度策略。它应当放置在application目录下,而不是FreeRTOS系统源码目录。也就是,每一个demo中有一个FreeRTOSConfig.h。

FreeRTOS通用文件

必选文件:

tasks.c, and list.c

可选文件:

  • queue.c
    包含queue和semaphore(信号量)
  • timers.c
    软件时钟,如果application确切使用时钟,则必须加入编译
  • event_groups.c
    事件组,如果确切使用,则必须加入编译
  • croutine.c
    特别针对小型微控制器

FreeRTOS特定port文件

保存在FreeRTOS/Source/portable目录,内部存在一定的等级关系,编译器是上一级目录,处理器则是下一级目录。

三个目录/文件必须添加到编译器 include path中,包括:

  • FreeRTOS/Source/include
  • FreeRTOS/Source/portable/[compiler]/[architecture]
  • FreeRTOSConfig.h

FreeRTOS头文件引用

要使用FreeRTOS API,必须包含FreeRTOS.h,然后就是根据具体的需要加入‘task.h’, ‘queue.h’, ‘semphr.h’, ‘timers.h’ or ‘event_groups.h’。

关于Demo与工程创建

FreeRTOS是基于Windows进行开发和编译的,所以,当demo在linux上进行编译的时候,可能会出现一些莫名其妙的警告信息。

参考Demo有很多好处,最基本的就是演示了FreeRTOS工程如何构建,需要添加哪些头文件。还能达到开箱即用的目的,给出了FreeRTOS API的调用样例。

该章节还介绍了如何基于一个Demo创建一个工程,以及如何从零创建一个工程。基于Demo创建就比较简单,而从零创建,则应当先让工程正常编译,而且可以"裸奔"的之后,再加入FreeRTOS支持。

对于V8.x的版本,heap_n.c需要开发者自己添加,n表示不同的动态内存管理策略。
从V9.0.0开始,heap_n.c不需要额外选择添加,而是通过FreeRTOSConfig.h文件进行配置,决定是否开启动态内存管理功能。由此可见,V9.x之后,内存管理策略已经可以通用,无需开发者选择。

数据类型与FreeRTOS的编码风格

在微处理器上,数据类型往往不能通用,需要用户自定义两个数据类型;FreeRTOS的编码风格决定了FreeRTOS的API看上去是怎样的,都代表了什么意思,熟悉它,有助于阅读源码以及开发。

数据类型

每一个port都有一个独立的portmacro.h,里面定义了两种数据类型。

  • TickType_t
    Tick表示一个系统滴答。一个系统滴答来自一个周期性的系统中断,叫Tick中断,两个Tick中断之间的时间就是一个滴答周期。而从系统启动到当前所经历的滴答周期叫滴答数,即Tick count。TickType_t就是保存这个Tick count的数据类型。TickType_t的位宽依赖于配置configUSE_16_BIT_TICKS(0/1),可以是无符号16-bit或者无符号32-bit。以1ms作为一个滴答周期,32-bit的TickType_t可以用8年,10ms则可以用80年,才会溢出。
  • BaseType_t
    基本的数据类型,默认与处理器的位宽等同。由于它非常影响系统性能和使用效率,没有特殊需要不应当修改。

FreeRTOS在使用char时,必定明确指明了有符号还是无符号,而不是默认由编译器决定,因为每个编译器对char的默认处理不尽相同。

变量名称

FreeRTOS在变量名称前面加上前缀的方式表示变量属于什么类型,这仅仅是一个参考前缀,使得代码更加易于阅读。

‘c’ for char, ‘s’ for int16_t (short), ‘l’ int32_t (long), and ‘x’
for BaseType_t and any other non-standard types.

函数名称

格式:前缀 + 所属文件名 + 函数功能

举例:xQueueReceive() returns a variable of type BaseType_t and is defined within queue.c.

内存管理

FreeRTOS拥有5种内存管理方式,FreeRTOS V9.x 之后支持静态分配也可以在运行时动态分配。这里仅仅熟悉V8版本的内存管理方式,如有需要,可以参考官网关于V9 V10的更新内容。

FreeRTOS的内存对象

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值