FreeRTOS学习笔记二【源码文件介绍及命名规范】

2023-05-16

FreeRTOS学习笔记二【源码文件介绍及命名规范】

  • 源码文件介绍
  • 源码中的命名规范
    • 两个重要数据类型
    • 变量名
    • 函数名
    • 宏名
  • 参考

本文介绍源码中的命名规范,下篇开始介绍FreeRTOS中的任务管理。

源码文件介绍

Free RTOS源码中包含了内核、内核配置、各个厂家的微处理器的移植、多种内存管理方案、大量的demo。
下面从使用的角度介绍源码中的文件。

  1. 核心共用代码
    Free RTOS中实现最基本的任务调度功能只需要两个文件,及task.c和list.c,task用于任务的创建、调度、删除等操作,list是一个双向链表,用于存储任务块或其他数据。除此之外,如果还需要其他功能,则包含实现相应功能的文件即可。这些文件全部位于FreeRTOS/Source文件夹下。
  • queue.c
    queue.c提供队列和信号量两个功能。但是实际使用中queue.c总是会使用。
  • timers.c
    timers.c提供软件定时功能。
  • event_groups.c
    event_groups.c提供事件组功能。同时管理多个事件,类似与简化版的select(poll)功能。
  1. 特定于项目的内核配置
    FreeRTOS的内核配置文件名为FreeRTOSConfig.h,其中包含了大量宏定义,用于配置内核。在创建一个Free RTOS工程时可以直接从demo中选取功能接近的项目中的配置文件,然后根据自己的实际需求调整,不建议从头开始编写该文件。该文件位于用户的应用程序目录。
  2. 特定于项目的移植相关
    项目相关的移植源码位于FreeRTOS/Source/portable目录下,其中又包含项目使用的编译器和处理器,例如:项目使用的编译器使用的是IAR,处理器使用的是arm cortex m3的处理器,那么移植相关的源码就位于FreeRTOS\Source\portable\IAR\ARM_CM3。
  3. 内存管理方案选择
    FreeRTOS提供了五个内存分配方案。 这五个方案名为heap_1到heap_5,分别由源文件heap_1.c到heap_5.c实现,具体后面介绍。 它们位于FreeRTOS/Source/portable/MemMang目录中。 如果已将FreeRTOS配置为使用动态内存分配,则必须在项目中构建这五个源文件中的一个,或者提供一个自己实现的分配方案。

源码中的命名规范

两个重要数据类型

FreeRTOS每个特定的移植文件中都包含portmacro.h文件,其中包含两个数据类型,TickType_t 和 BaseType_t。

  • TickType_t
    FreeRTOS中有一个节拍中断,系统从启动开始发生的节拍中断的计数称为节拍计数,它将是整个RTOS的时间度量。
    TickType_t用于保存节拍计数和指定的时间的数据类型,它可以是无符号的16bit类型,也可以是无符号32bit类型,具体取决于FreeRTOSConfig.h中configUSE_16_BIT_TICKS的设置。 如果configUSE_16_BIT_TICKS设置为1,则TickType_t定义为uint16_t。 如果configUSE_16_BIT_TICKS设置为0,则TickType_t定义为uint32_t。通常,在8位和16位处理器上使用uint16_t,以提高效率,但会限制了最大时间周期,而在32位处理器上使用uint32_t。
  • BaseType_t
    它用于数值范围有限的返回类型和布尔类型。在8位处理器上为8位类型,16位上为16位类型,32位上为32位类型。

注:不同的编译器对char类型的实现可能不同,一些是unsigned,一些是signed,所以FreeRTOS明确规定char只能用于保存ASCII字符或者指向char的指针(字符串),其他地方使用signed或unsigned,同时也不使用简单的int类型(不同编译器实现的长度不一)。

变量名

所有变量在名字前加上它类型的前缀,如:‘c’表示char,‘s’表示int16_t(short),‘l’表示int32_t(long),‘x’表示BaseType_t和任何其他非标准类型(结构体,任务句柄,队列句柄d等)。如果变量是无符号类型,则添加前缀’u’,如果变量是指针,添加前缀’p’,例如,uint8_t类型的变量添加前缀’uc’,指向char类型的指针变量则添加前缀’pc’。

函数名

函数名添加它的返回类型和它所在的文件为前缀。如

  • vTaskPrioritySet()返回一个void,并在task.c中定义。
  • xQueueReceive()返回BaseType_t类型的变量,并在queue.c中定义。
  • pvTimerGetTimerID()返回指向void的指针,并在timers.c中定义。
  • 在文件内部的局部函数添加’prv’(private)。

宏名

宏名用大写字母表示,添加小写前缀表示定义它的位置。如下表。

前缀定义的位置
port (例:portMAX_DELAY)portable.h或portmacro.h
task (例:taskENTER_CRITICAL())task.h
pd (例:pdTRUE)projdefs.h
config (例:configUSE_PREEMPTION)FreeRTOSConfig.h
err (例:errQUEUE_FULL)projdefs.h

注:信号量API是用宏编写的,但是它遵循的是函数名的规范。

下表是几个常用宏的值。

宏定义
pdTRUE1
pdFALSE0
pdPASS1
pdFAIL0

参考

Free RTOS官网

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

FreeRTOS学习笔记二【源码文件介绍及命名规范】 的相关文章

随机推荐

  • ROS使用官方包进行串口通信

    https www jianshu com p c30f390427e7 参考http span class hljs comment www roswiki com read php tid 61 557 amp fid 61 39 sp
  • STM32F446ZET6关于使用PA11,PA12,PB14,PB15的使用注意事项

    STM32F446ZET6关于使用PA11 xff0c PA12 xff0c PB14 xff0c PB15的使用注意事项 这两天在用PB14做输入时 xff0c 发现总是不灵敏 xff0c 开始还以为布线有问题 xff0c 检查后发现不是
  • numpy基本方法总结

    NumPy基本方法 一 数组方法 创建数组 xff1a arange 创建一维数组 xff1b array 创建一维或多维数组 xff0c 其参数是类似于数组的对象 xff0c 如列表等 读取数组元素 xff1a 如a 0 a 0 0 数组
  • 如何实现Qt上位机软件串口的按字节数据处理?

    1 Qt串口类的选择 最近在做一个小项目 xff0c 需要用到Qt做上位机软件 xff0c 本人也是边学边做 xff0c 买了本 QtCreator快速入门 看了看就动手了 xff0c 由于初学不是很了解Qt5的官方资源 xff0c 一开始
  • 如何使用HAL库手动修改OSC引脚为PD0/1?

    CubeMX不能直接重映射OSC引脚为PD0 1 xff0c 那么 xff0c 如何使用HAL库手动修改OSC引脚为PD0 1 如下图所示配置即可 xff1a
  • “野火FreeRTOS教程”第7章补充知识点-异常流程

    一 知识点 1 Cortex M3 4在复位后CONTROL寄存器初始值为0 xff0c 也就是说MCU会处于线程模式 具有特权访问权限且使用主栈指针 MSP 2 当进入异常时CM3会自动入栈 xff0c 如下图所示 xff1a 3 当异常
  • mini四旋翼飞行器DIY日志

    一 方案 功能描述 xff1a 具备mini四旋翼飞行器的基本功能 xff0c 可以拓展其他模块实现定高 对航向角yaw的校准 xff0c 将所有io引出并设计出最小系统板子功能 xff0c 将设计I2C总线挂载选择电路便于调试和使用 可以
  • Quartus II 13.1.0.162三件套安装包

    QuartusSetup 13 1 0 162 链接 https pan baidu com s 1B01zWG76kfNcGLA0VmwyMw 提取码 jjdd ModelSimSetup 13 1 0 162 链接 https pan
  • DSP Builder安装时的注意事项

    注意事项1 DSP Builder是以组件的形式安装在altera下面的 xff0c 并且altera要与matlab 32位 xff01 xff01 安装在同一路径下 xff0c 这个路径不要带有中文 xff0c 或者空格字符 xff0c
  • Maven3.6.1下载与配置,超详细

    Maven3 6 1下载与配置 xff0c 超详细Maven3 6 1下载与配置 xff0c 超详细Maven3 6 1下载与配置 xff0c 超详细 Maven下载与配置 1 官网下载对应版本 xff0c 推荐下载免安装版 下载地址 ht
  • 【GIS】GIS矢量空间分析(上)

    0 GIS的基本概念 栅格数据与矢量数据 上图中 xff0c a为图形模拟表示的地理对象 xff0c b为控件对象对应的栅格数据模型表示 xff0c c为对应的矢量数据模型表示 矢量模型的表达源于原型空间实体本身 xff0c 通常以坐标来定
  • ROS简介-从零开始讲解ROS(适合超零基础阅读)

    1 前言 笔者以前是机械专业 xff0c 对于计算机方面的学习是少之又少 xff0c 接触机器人的学习之后 xff0c 比如路径规划 算法等 xff0c 发现很难入门 xff0c 不过慢慢摸爬滚打之后还是有了一些认识 xff0c 俗话说的好
  • C++primer plus第六版课后编程练习答案14.1

    include lt iostream gt include lt string gt using namespace std template lt class T1 class T2 gt class Pair private T1 a
  • 区块链——脱坑truffle

    使用truffle构建一个智能合约 实现输出 helloworld 的功能 网上有很多帖子 但也有很多坑 这里展示我的搭建过程 帮助大家绕过那些麻烦 一 安装web3 solc truffle npm g install solc npm
  • ucosii消息队列使用

    ucosii消息队列简介 ucosii的消息队列源码定义在os q c文件 xff1b 接口全部声明在ucos ii h xff0c 总共有如下接口 xff1a span class token keyword void span span
  • rtthrea-ucosii-freertos三系统学习总结

    三系统基本功能对比 RT thread ucosii freertos 任务调度 抢占式 时间片式 xff08 多级队列位图调度 xff09 抢占式 xff08 纯位图调度 xff09 抢占式 时间片式 xff08 遍历列表调度 xff09
  • VScode的git安装与配置

    git下载与安装 1 在官网下载git的最新版本 2 按照提示一步步安装完成 具体步骤参看以下文章 xff1a 转https blog csdn net qq 40342589 article details 105676715 VScod
  • 将python代码封装成c版本的dll动态链接库

    前言 将python程序打包成DLL文件 xff0c 然后用C 43 43 调用生成的DLL文件 xff0c 这是一种用C 43 43 调用python的方法 xff0c 这一块比较容易遇到坑 网上关于这一块的教程不是很多 xff0c 而且
  • gazebo加载异常或者加载缓慢

    在我们安装完ros的时候会在命令行里运行gazebo命令会打开gazebo一个空白世界 xff0c 往往会卡在如图所示的界面 xff1a 这是模型文件加载缓慢需要很长时间 xff0c 这是在ubuntu16 04下的情况 xff0c 在ub
  • FreeRTOS学习笔记二【源码文件介绍及命名规范】

    FreeRTOS学习笔记二 源码文件介绍及命名规范 源码文件介绍源码中的命名规范两个重要数据类型变量名函数名宏名 参考 本文介绍源码中的命名规范 xff0c 下篇开始介绍FreeRTOS中的任务管理 源码文件介绍 Free RTOS源码中包