一文带你快速理解FreeRTOS代码规范

2023-05-16

关注、星标嵌入式客栈,精彩及时送达

[导读] 遇到些朋友感觉FreeRTOS内核代码看起来很不习惯,不习惯其编码风格,本文就来梳理一下其代码规范,便于提高阅读其代码的效率。代码基于FreeRTOS V10.4.3。

FreeRTOS代码结构

 

其内核代码文件就这几个,非常简洁:

  • croutine.c/croutine.h: 协程,在8位/16位平台下效率比较高,在32位平台建议使用任务task

  • event_groups.c / event_groups.h:顾名思义,这个是事件组的实现

  • heap_x.c:内核堆实现,FreeRTOS提供了heap_1.c ~ heap_5.c 5种堆管理器,各有优缺点,需要根据应用进行选择。

  • list.c/list.h:链表实现,主要为调度器提供数据结构算法支持服务。比如任务链表。

  • port.c/portmacro.h:硬件相关层级可移植抽象,主要包括SysTick中断,上下文切换,中断管理,具体实现很大程度上取决于平台(单片机体系硬件内核和编译器工具集)。通常以汇编语言实现。

  • queue.c/queue.h/semphr.h:信号量、互斥体实现

  • tasks.c/task.h:任务管理器实现

  • timers.c/timers.h:软件定时器实现

  • FreeRTOS.h:选编译配置文件,用于汇总所有源文件的编译选择控制

  • FreeRTOSConfig.h:FreeRTOS内核配置,Tick时钟和irq中断配置

接下来整理一下,相关的代码规范,具体就体现在上述文件的编码中。

变量

变量有严格的前缀标识变量类型属性:

  • c – char 字符型变量

  • s – short 短型变量

  • l – long  长整型变量

  • x – portBASE_TYPE 在 portmacro.h 中定义,便于移植的数据类型转定义

  • u – unsigned 无符号整型

  • p - pointer 指针

举例:

//x表示portBASE_TYPE, u 表示无符号型
PRIVILEGED_DATA static volatile TickType_t xTickCount = ( TickType_t ) configINITIAL_TICK_COUNT;
PRIVILEGED_DATA static volatile UBaseType_t uxTopReadyPriority = tskIDLE_PRIORITY;

//比如在list.h 中
struct xLIST_ITEM
{
    configLIST_VOLATILE TickType_t xItemValue;
    //指针以p打头
    struct xLIST_ITEM * configLIST_VOLATILE pxNext; 
    struct xLIST_ITEM * configLIST_VOLATILE pxPrevious; 
    void * pvOwner; 
    struct xLIST * configLIST_VOLATILE pxContainer; 
};

对于C语言的基本数据类型,做了可移植转定义:

#define portCHAR          char
#define portFLOAT         float
#define portDOUBLE        double
#define portLONG          long
#define portSHORT         short
#define portSTACK_TYPE    uint32_t
#define portBASE_TYPE     long

函数


前缀:

  • v :void 无返回类型

  • x :返回portBASE_TYPE

  • prv :私有函数,模块内使用

//ux 表示无符号portBASE_TYPE 返回值
//List表示该函数所属文件
//Remove函数名
UBaseType_t uxListRemove( ListItem_t * const pxItemToRemove ) PRIVILEGED_FUNCTION;

//又比如prv 表示模块内函数
static TickType_t prvGetNextExpireTime( BaseType_t * const pxListWasEmpty ) PRIVILEGED_FUNCTION;

定义宏所属文件,也即在哪个文件内定义的:

  • port:比如portable.h中portMAX_DELAY

  • task:比如task.h中task_ENTER_CRITICAL

  • pd :例如projdefs.h中定义的pdTRUE

  • config:例如 FreeRTOSConfig.h中定义的configUSE_PREEMPTION

  • err:例如 projdefs.h中定义的errQUEUE_FULL

至于这么严格的代码规范是否值得推崇,这个见仁见智,个人比较喜欢Linux代码风格,对于过于复杂的代码规范,在实际开发中个人觉得有时候会让人不爽。

END

往期精彩推荐,点击即可阅读

▲Linux驱动相关专辑 

手把手教信号处理专辑

片机相关专辑

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

一文带你快速理解FreeRTOS代码规范 的相关文章

  • Code Review的亲身实践

    Code Review 中文叫代码审查 指的是完成了部分功能的代码开发之后 在代码真正合并到仓库主分支之前 邀请同事帮你进行代码的审核和检查 检查代码的质量 规范 设计等等方面的过程 代码审查的好处 知识共享 进行代码审查的好处很多 其中一
  • 玩转Eclipse — 自动代码规范检查工具Checkstyle

    大项目都需要小组中的多人共同完成 但是每个人都有自己的编码习惯 甚至很多都是不正确的 那么如何使小组所有开发人员都遵循某些编码规范 以保证项目代码风格的一致性呢 如果硬性地要求每个开发人员在提交代码之前 都要对照的编码规范将自己的代码检查一
  • freeRTOS使用uxTaskGetStackHighWaterMark函数查看任务堆栈空间的使用情况

    摘要 每个任务都有自己的堆栈 堆栈的总大小在创建任务的时候就确定了 此函数用于检查任务从创建好到现在的历史剩余最小值 这个值越小说明任务堆栈溢出的可能性就越大 FreeRTOS 把这个历史剩余最小值叫做 高水位线 此函数相对来说会多耗费一点
  • SonarQube 9.x集成阿里p3c代码规范检测java代码;

    文章目录 前言 一 下载p3c pmd插件 二 sonarqube配置使用p3c规则检测 1 新建质量配置 2 将创建好的p3c检测规则设置为默认质量配置 注1 注2 前言 因为我们公司后端主用的是java语言 在进行sonar代码检测的时
  • git 服务端钩子做代码检查

    需求分析 在代码修改后可以对代码进行检查 比如代码规范检查 代码构建 单元测试等 我们需要禁止成员推送不符合规范的代码到服务端 Git 钩子能在特定的重要动作发生时触发自定义脚本 钩子分为客户端和服务器端两类 使用客服端钩子可以在commi
  • eslint+prettier前端代码规范配置

    前端代码规范配置 参考来源 https blog csdn net u013361179 article details 108885859 前言 eslint的作用 eslint作用是按照一定规则 检测代码质量 prettier的作用 p
  • 啊哈C的简单使用

    打开啊哈C 新建一个程序输出hello world include
  • SonarQube白盒静态代码专家解决方案

    中国区官网 http www safetesting cn 西安青穗 http www safetesting cn 是瑞士SonarSource公司正式授权的中国渠道商和技术服务提供商 技术服务团队有多年行业经验的业界专家 咨询顾问组成
  • RT-Thread记录(五、RT-Thread 临界区保护与FreeRTOS的比较)

    本文聊聊临界区 以及RT Thread对临界区的处理 通过源码分析一下 RT Thread 对临界区保护的实现以及与 FreeRTOS 处理的不同 目录 前言 一 临界区 1 1 什么是临界区 1 2 RTOS中的临界区 二 RT Thre
  • 在C++11通过SFINAE机制实现静态检查类成员是否存在并分情况处理,以及一种通用宏的实现

    目录 引入 目的 代码 测试 TIPS 引入 c 模板中 我们无法知道参数类是否具有某个成员 例如下面代码 我们希望下面的代码中能够打印t的成员变量a的值 然而当类型T不包含成员a时 调用下面的代码就会报错 template
  • FreeRTOS笔记(二)

    FreeRTOS笔记 二 静态任务 文章目录 FreeRTOS笔记 二 静态任务 一 任务定义 二 任务创建 2 1 定义任务栈 2 2 定义任务函数 2 3 定义任务控制块 2 4 实现任务创建函数 三 实现就绪列表 3 1 定义就绪列表
  • 单片机通信数据延迟问题排查

    1 问题说明 笔者在最近的项目中 发现系统的响应延迟较高 经过排查 排除了单片机运行卡死的问题 2 原因分析 具体排查过程这里就不细致说明了 直接给出排查后原因 任务执行周期规划不合理 导致freertos队列发送接收到的命令有延迟 为了便
  • 13-FreeRTOS任务创建与删除

    任务创建和删除API函数位于文件task c中 需要包含task h头文件 task h里面包函数任务的类型函数 例如 对xTaskCreate的调用 通过指针方式 返回一个TaskHandle t 变量 然后可将该变量用vTaskDele
  • 使用QT纯代码创建(查找)对话框详细步骤与代码

    一 创建项目文件 打开Qt Creator gt 文件 gt 新建文件或项目 gt 选择Qt Widgets Application 为项目起名字 输入类的名字 二 了解每个文件的作用 项目创建完毕之后就会出现以下几个文件 先来分别介绍以下
  • 工程师必知的代码重构指南

    作者 CATE LAWRENCE 译者 冬雨 策划 蔡芳芳 本指南将带你了解进行代码重构的好处 可能遇到的挑战 可以采用的工具和最佳实践 以及重构和技术债务之间的区别 我们都在寻找清理代码 降低复杂性和改进功能的方法 重构就是其中之一 本指
  • 每一座屎山代码背后,都藏着一堆熟读代码规范的研发

    导读 韩寒在 他的国 中写道 我们懂很多道理 却依然过不好这一生 人们虽然知道很多道理 但并不一定能将这些道理应用到实际生活中 这种现象在生活中很常见 我们听了很多的成功学的道理 但实际上 成功和幸福不是仅仅靠这些道理就能实现的 需要不断地
  • FreeRTOSConfig.h 配置优化及深入

    本篇目标 基于上一篇的移植freertos stm32f4 freertos 上 修改 FreeRTOSConfig h 文件的相关配置来优化辅助 FreeRtos 的使用 并且建立一些基本功能 信号量 消息地列等 的简单应用位于 stm3
  • 当一个任务写入变量而其他任务读取该变量时,我们是否需要信号量?

    我正在研究 freeRtos 并且我有一个名为 x 的变量 现在 每秒只有一个任务正在写入该变量 而其他任务正在读取该变量值 我需要用互斥锁来保护变量吗 如果变量为 32 位或更小 并且其值是独立的并且不与任何其他变量一起解释 则不需要互斥
  • 有可用的 FreeRTOS 解释语言库吗?

    我在一家公司工作 该公司使用 FreeRTOS 为多个设备创建固件 最近 我们对新功能的要求已经超出了我们固件工程师的工作能力 但我们现在也无力雇用任何新人 即使进行微小的更改 也需要固件人员在非常低的级别上进行修改 我一直在为 FreeR
  • 哪些变量类型/大小在 STM32 微控制器上是原子的?

    以下是 STM32 微控制器上的数据类型 http www keil com support man docs armcc armcc chr1359125009502 htm http www keil com support man d

随机推荐

  • 38、带参数的装饰器

    一 带参数的装饰器 我们看 xff0c 装饰器其实就是一个闭包函数 xff0c 再说简单点就是两层的函数 那么是函数 xff0c 就应该具有函数传参功能 login status 61 39 username 39 None 39 stat
  • Git系列:windows10安装Git版本控制工具!

    Git系列 xff1a windows10安装Git版本控制工具 xff01 前言 今天博主将为大家分享Git系列 xff1a windows10安装Git版本控制工具 xff01 不喜勿喷 xff0c 如有异议欢迎讨论 xff01 开始安
  • VNC 连接腾讯云服务器(解决黑屏、灰屏问题)

    整了一天 xff0c 要么黑屏 xff0c 要么灰屏 xff0c 巴拉巴拉 xff0c 最后终于好了 vnc xstartup修改为如下 随后chmod 777 vnc xstartup 就可以了 教程视屏 xff1a https clou
  • 【云计算学习笔记(二十一)】之Neutron子服务详细介绍

    文章目录 本文章由公号 开发小鸽 发布 xff01 欢迎关注 xff01 xff01 xff01 一 xff0e Neutron xff08 一 xff09 Neutron介绍 xff08 二 xff09 Neutron功能1 二层交换Sw
  • 51单片机、DS18B20、智能窗帘控制系统

    写在最前面 xff1a 文章是我的设计报告搬运过来的 xff0c 嫌排版乱的 xff0c 可以直接下载设计报告 xff0c 包含word xff0c keil工程 xff0c proteus工程 xff01 xff01 xff01 xff0
  • 手写RTOS-PendSV中断

    今天这一篇 xff0c 我们说一下操作系统都要用到的PendSV中断 xff0c 整个操作系统中 xff0c 要自己写的的汇编代码不超过20行 xff0c 全部都在PendSV中断里 以下是 Cotex M3权威指南 里对PendSV的描述
  • 如何知道可执行文件是32-bit还是64-bit

    可以使用GetBinaryType API来获得这个信息 xff1a BOOL GetBinaryType LPCTSTR lpApplicationName LPDWORD lpBinaryType Binary Type可以是下面的值
  • 手写RTOS-使用PendSV进行压栈与出栈操作

    学会使用PendSV中断进行压栈和出栈操作 xff0c 是实现任务调度的关键 今天我们就来学习一下如何使用不超过20行的汇编实现压栈和出栈操作 我们现在来实现这么一个例子 xff1a 先把R4 R11通用寄存器的值保存到一个缓冲区里面 xf
  • 树莓派 Ubuntu mate 16.04 下开启vncserver完整教程

    关于开启vncserver的教程 xff0c 在树莓派上不桶系统上 xff0c 有很多教程 xff0c 杂七杂八 这里的环境是 xff1a 树莓派3b 43 Ubuntu 16 04 mate 一 xff1a 在树莓派下完成以下任务 1 安
  • 在linux上安装oracle数据库并通过远程映射建库

    前期准备 安装虚拟机 xff1a 我这里用的VM15 5 xff0c 可用虚拟机有CentOS以及红帽系列版本下载oracle数据库的安装包以及 rpm补丁包 xff0c 并传入linux虚拟机 xff1a 在虚拟机安装VMTools以共享
  • VMware虚拟机Ubuntu无法连接网络的解决办法

    原文来源 1 Ubuntu网络设置 xff1a 依次单击 System Settings gt Network gt Wired gt Options xff0c 如下图所示 xff1a 依次选择 General xff0c 勾选如下图所示
  • Meta-Learning之How to train your MAML

    这篇文章是MAML的升级版本 xff0c 即MAML 43 43 他针对MAML的一些不足之处做了对应的改进 xff0c 如稳定性 收敛速度 表现力等均得到提升 由于自己的算法实现中有用到MAML xff0c 为了让整体算法有一个好的性能
  • 对于中断的笔记

    我们首先要区分内核与外设 内核是为众多应用程序提供对硬件的安全访问的软件芯片 xff0c 如Cortex M4 xff0c 是ARM公司开发的 外设是ST公司在拿到这个内核后 xff0c 制作了相应的硬件 xff0c 如GPIO RTC以及
  • 正则表达式中?=和?:和?!的理解

    要理解 61 和 xff0c 首先需要理解前瞻 xff0c 后顾 xff0c 负前瞻 xff0c 负后顾四个概念 xff1a 前瞻 xff1a exp1 61 exp2 exp1后边是exp2就匹配 后顾 xff1a lt 61 exp2
  • JAVA中的向上转型和向下转型

    一 向上转型和向下转型 向上转型和向下转型是在JAVA继承操作中用到的东西 xff0c 在讲到转型之前我们需要认识到继承过程中的对象类型转换 xff0c 这种转换有两个特点 xff1a 1 这是继承过程中发生的操作 2 新类是现有类的一种类
  • k8s基于kubeadm部署集群 含集群NotReady解决方案

    1 xff09 简介 kubernetes简称k8s 是用于自动部署 xff0c 扩展和管理容器化应用程序的开源系统 中文官网 xff1a https kubernetes io Zh 中文社区 xff1a https www kubern
  • Ubuntu 下 触摸板不能使用 解决方法

    之前好不容易才安装好双系统 xff0c 今天在Ubuntun下安装东西时 xff0c 电脑没电 xff0c 自己关机了 xff0c 重启后 xff0c 触摸板就不能使用了 xff0c 参看了网上 http blog sina com cn
  • 如何安装touch 1.0.1

    如何安装touch 1 0 1 如何安装touch 1 0 1 如何安装touch 1 0 1 今天需要安装 touch 1 0 1 可能是老版本了吧 xff0c 直接使用pip install touch 61 61 1 0 1不能安装成
  • 立创开源|用立创EDA自制ST-Link V2.1调试器

    分享一个2年前在立创开源硬件平台上开源的项目 xff0c 该项目目前是平台上最热门的ST LINK V2 1项目 xff0c 也是点赞数最多的一个ST LINK相关的项目 xff0c 以下是该项目的累积数据 项目作者 xff1a 攻城狮晨哲
  • 一文带你快速理解FreeRTOS代码规范

    关注 星标嵌入式客栈 xff0c 精彩及时送达 导读 遇到些朋友感觉FreeRTOS内核代码看起来很不习惯 xff0c 不习惯其编码风格 xff0c 本文就来梳理一下其代码规范 xff0c 便于提高阅读其代码的效率 代码基于FreeRTOS