个人不是很喜欢FreeRTOS的编程风格,但是没办法,白嫖人家的东西,只能忍了,这里先简单总结一下;

相关文章

【FreeRTOS实战汇总】小白博主的RTOS学习实战快速进阶之路(持续更新)

1 源码结构

下载或者克隆源码,可以看到顶层的源码结构如下图所示;



  • FreeRTOS:实时系统的源文件,主要是这部分;
  • FreeRTOS-Plus:这里主要基于FreeRTOS的demo,比如iot-lib,tcp等等;

下面重点看一下FreeRTOS,具体如下所示;



  • ① portable:是一个文件夹,里面包括了各个平台移植所需要的文件;
  • ② MenMang:内存管理的文件,基本包括heap_1.cheap_2.cheap_3.cheap_4.cheap_5.c,以后再深入了解;

下面是几个比较核心的文件,前面有简单提到过,简单介绍如下:

  • list.c

    基本的数据结构,双链表的实现,是很多函数的底层文件, 使用FreeRTOS必须要包含的文件;
  • tasks.c

    任务块,任务调度,创建,删除等等接口都在这个文件中,也是必须要包含的文件;
  • queue.c

    这个文件同时提供消息队列和信号量服务,作为任务间同步基本离不开它,所以这个文件几乎也是必须包含的;
  • timers.c

    这个文件提供软件计时器功能。如果需要实际使用软件计时器的功能,则应该将它包括到构建工程中;
  • event_groups.c

    这个文件提供了事件组功能。如果需要事件组,则需要将它包含到工程中;
  • croutine.c

    这个文件实现FreeRTOS协同例程功能,协同例程用于非常小的微控制器,现在很少使用,看情况添加;

具体如下所示;

  • FreeRTOSConfig.h

    这个文件可以有用户创建,当然在源码的demo路径下可以找到现成的文件,根据自己需求配置FreeRTOSConfig.h的宏定义,从而实现对FreeRTOS的剪裁。

2 数据类型

FreeRTOS的数据类型基本上都定义在portmacro.h文件中,比如在FreeRTOS\Source\portable\RVDS\ARM_CM3下就可以找到这个文件;除此之外,FreeRTOS中还有两个特定的数据类型;

  • BaseType_t

    这个类型被定义为架构中最有效的数据类型;比如32位体系结构使用32 bit数据类型/int32_t,16位架构使用16 bit数据类型/int16_t,8位架构上使用8 bit数据类型/int8_t

    BaseType_t 适用于数据范围比它小的类型的值,所以也适用于pdTRUE/pdFALSE类型的布尔值;
  • TickType_t

    FreeRTOS配置一个称为tick interrupt的定时中断;两次滴答中断之间的时间称为滴答中断周期;所以tick number是指定滴答中断周期的倍数,TickType_t是用来保存滴答计数值和to的数据类型指定时间。

32位机上数据类型定义如下所示,和具体的平台相关;



3 命名规则

3.1 常见命名规则

  • 匈牙利命名法:广泛应用于Microsoft Windows这类环境中;

  • 驼峰命名法:近年来越来越流行。

    驼峰命名法,正如它的名称所表示的那样,指的是混合使用大小写字母来构成标识符的名字。其中第一个单词首字母小写,余下的单词首字母大写。

    例如:

    printEmployeePaychecks();

    函数名中每一个逻辑断点都有一个大写字母来标记。

  • 帕斯卡(Pascal)命名法:与驼峰命名法类似。

    只不过驼峰命名法是第一个单词首字母小写,而帕斯卡命名法则是第一个单词首字母大写。因此这种命名法也有人称之为“大驼峰命名法”。

    例如:

    DisplayInfo();

    UserName

    都是采用了帕斯卡命名法。在C#中,以帕斯卡命名法和骆驼命名法居多。事实上,很多程序设计者在实际命名时会将驼峰命名法和帕斯卡结合使用,例如变量名采用驼峰命名法,而函数采用帕斯卡命名法。

  • 下划线命名法

    下划线法是随着C语言的出现流行起来的,在UNIX/LIUNX这样的环境,以及GNU代码中使用非常普遍。1

3.2 FreeRTOS的规则

  • 变量名

    前缀cchar

    前缀sint16_t

    前缀p:指针变量;

    大写lint32_t

    小写x:表示类型为BaseType_t:其他非标准类型(结构任务句柄队列句柄等等);

如果一个变量是无符号的,那么它也以“u”为前缀。如果一个变量是一个指针,它也是带前缀的,例如,类型为uint8_t的变量将前缀为uc

  • 函数名

    FreeRTOS函数名的前缀表示它们返回的类型,也包括它们在其中定义的文件;

    • vTaskPrioritySet():前缀v表示返回类型为viodTask表示在tasks.c中定义;
    • xQueueReceive():前缀x表示返回BaseType_t类型数据,Queue表示该函数在queue.c中定义;
    • pvTimerGetTimerID():前缀pv表示返回void类型指针,Timer表示该函数在timer.c.中定义;
    • prv:前缀prv表示作用范围为当前的文件;
  • 宏定义

    FreeRTOS的大多数宏都是用大写字母写的,并以小写字母作为前缀来表示

    定义了宏,如下所示;
前缀 定义的位置
task (for example, taskENTER_CRITICAL()) task.h
pd (for example, pdTRUE) projdefs.h
config (for example, configUSE_PREEMPTION) FreeRTOSConfig.h
err (for example, errQUEUE_FULL) projdefs.h
port (for example, portMAX_DELAY) portable.h or portmacro.h

4 总结

本文总结了FreeRTOS源码结构和数据类型,为以后移植系统和源码阅读打下一丢丢基础。


  1. 驼峰命名法-百度百科 ↩︎

【FreeRTOS学习02】源码结构/数据类型/命名规则总结的更多相关文章

  1. thinkphp学习笔记1—目录结构和命名规则

    原文:thinkphp学习笔记1-目录结构和命名规则 最近开始学习thinkphp,在下不才,很多的问题看不明白所以想拿出来,恕我大胆发在首页上,希望看到的人能为我答疑解惑,这样大家有个互动,学起来快 ...

  2. nginx源码学习_源码结构

    nginx的优秀除了体现在程序结构以及代码风格上,nginx的源码组织也同样简洁明了,目录结构层次结构清晰,值得我们去学习.nginx的源码目录与nginx的模块化以及功能的划分是紧密结合,这也使得我 ...

  3. Thrift 源码学习一——源码结构

    Thrift 客户端与服务端的交互图 源码结构 传输层 TTransport: TTransport:客户端传输层抽象基础类,read.write.flush.close 等方法 TSocket 与 ...

  4. [译] 给PHP开发者的PHP源码-第一部分-源码结构

    文章来自:http://www.hoohack.me/2016/02/04/phps-source-code-for-php-developers-ch 原文:http://blog.ircmaxel ...

  5. 【菜鸟学习jquery源码】数据缓存与data()

    前言 最近比较烦,深圳的工作还没着落,论文不想弄,烦.....今天看了下jquery的数据缓存的代码,参考着Aaron的源码分析,自己有点理解了,和大家分享下.以后也打算把自己的jquery的学习心得 ...

  6. PostgreSQL9.2.4内核源码结构介绍

    PostgreSQL的源代码可以随意获得,其开源协议也允许研究者任意修改,这里介绍一下PostgreSQL的源码结构以及部分实现机制.下载PostgreSQL源代码并减压后,其一级目录结构如下图: P ...

  7. Spring Boot 2.0系列文章(五):Spring Boot 2.0 项目源码结构预览

    关注我 转载请务必注明原创地址为:http://www.54tianzhisheng.cn/2018/04/15/springboot2_code/ 项目结构 结构分析: Spring-boot-pr ...

  8. DotNetty网络通信框架学习之源码分析

    DotNetty网络通信框架学习之源码分析 有关DotNetty框架,网上的详细资料不是很多,有不多的几个博友做了简单的介绍,也没有做深入的探究,我也根据源码中提供的demo做一下记录,方便后期查阅. ...

  9. Nginx源码结构及如何处理请求

    一.源码结构   1:下载安装包后,解压,可以看到目录结构,其中src目录下放的是源码       2:src源码目录下,可以看到这几个目录     mail:mail目录中存放了实现Nginx服务器 ...

随机推荐

  1. HashMap主要方法源码分析(JDK1.8)

    本篇从HashMap的put.get.remove方法入手,分析源码流程 (不涉及红黑树的具体算法) jkd1.8中HashMap的结构为数组.链表.红黑树的形式     (未转化红黑树时)   (转 ...

  2. stand up meeting 1--11

    今天国庆同学回中科大考试因此缺席了今天的daily scrum.不过国庆的任务已经基本完成,不会影响项目进度. 今日更新: 分享功能已经完成一个版本,如下图为分享至邮件: 针对AP返回结果中没有Wor ...

  3. E - Sum of gcd of Tuples (Hard) Atcoder 162 E(容斥)

    题解:这个题目看着挺吓人的,如果仔细想想的话,应该能想出来.题解还是挺好的理解的. 首先设gcd(a1,a2,a3...an)=i,那么a1~an一定是i的倍数,所以ai一共有k/i种取值.有n个数, ...

  4. 刷题记录:[V&N2020 公开赛]TimeTravel

    题目复现链接:https://buuoj.cn/challenges 参考链接:2020 年 V&N 内部考核赛 WriteUp V&N公开赛2020 writeup httpoxy ...

  5. eclipse添加方法注释

    打开注释模板编辑窗口:Window ->Preferences->java -> Code Style -> Code Template->Comments type 设 ...

  6. java 一维数组的总结笔记

    数组 1. 一位数组的声明方式 type[] array Name 或 type arrayName[];(推荐使用第二种) 错误的声明方式 //int[5] intErrorArray;错误的 // ...

  7. C# 基础知识系列- 13 常见类库介绍(一)

    0. 前言 每篇一个前言,介绍一下这一篇的内容.之前的内容都是针对某些知识点进行的介绍,这篇内容介绍一下实际开发中常用的一些类和命名空间.这一篇是个连续剧,大概有个三四集.嗯,就是这样. 1. Sys ...

  8. api接口安全

    API接口安全 在做app开发中,如何保证api的接口安全,不被其他app去调用? 接口安全的措施很多,今天记录一个常用的措施 签名: 前台想要调用接口,需要使用几个参数生成签名: 时间戳:当前时间 ...

  9. HTML+CSS教程(三)marquee滚动效果

    一.marquee 1.marquee标签的属性scrollHeight:获取对象的滚动高度.scrollLeft:设置或获取位于对象左边界和窗口中目前可见内容的最左端之间的距离.scrollTop: ...

  10. 【一起学设计模式】观察者模式实战:真实项目中屡试不爽的瓜娃EventBus到底如何实现观察者模式的?

    申明 本文章首发自本人公众号:壹枝花算不算浪漫,如若转载请标明来源! 感兴趣的小伙伴可关注个人公众号:壹枝花算不算浪漫 22.jpg 前言 之前出过一个设计模式的系列文章,这些文章和其他讲设计模式的文 ...