编程标准 (Coding Standard)

FreeRTOS 源代码遵守 MISRA (Motor Industry Software Reliability Association) 规范。

与 MISRA 标准有出入的地方如下:

• 两个 API 函数具有两个出口点。之所以这样是为了效率。

• 使用标准 C 数据类型,而不是用 typedef 将其名称重定义。

• 当建立一个任务时,代码会直接处理堆栈的栈顶和栈底地址。由于不同的平台的总线宽度不同,这就需要代码中对指针变量进行算术运算。因此,对指针变量的算术运算是不可避免的。

• trace 宏定义,默认情况下被定义为空,因此不会产生任何代码。

命名约定(Naming Conventions)

RTOS内核与Demo程序源代码使用下面的约定:

变量
char类型的变量以 c 为前缀
short类型的变量以 s 为前缀
long类型的变量以 l 为前缀
float类型的变量以 f 为前缀
double类型的变量以 d 为前缀
枚举变量以 e 为前缀
其他类型(如结构体)以 x 为前缀
指针有一个额外的前缀 p , 例如short类型的指针前缀为 ps
无符号类型的变量有一个额外的前缀 u , 例如无符号short类型的变量前缀为 us

函数
文件内部函数以prv为前缀
API函数以其返回值类型为前缀,按照前面对变量的定义
函数的名字以其所在的文件名开头。如vTaskDelete函数在Task.c文件中定义

宏定义
宏名以所在的文件的文件名的一部分作为前缀(开头),并且用小写。
比如, configUSE_PREEMPTION 在文件 FreeRTOSConifg.h 中.
除了前缀,其余部分用大写,下划线来分隔单词。

数据类型

基本数据类型可以直接使用,但是有如下的例外和规则:

• char类型在每个平台都有其自身的定义方式。有些平台 char 等价于 signed char ,另一些则等价于 unsigned char,为此,要在代码中明确的使用 signed char 或 unsigned char 。直接使用 char类型是被禁止的。

• 不能直接使用 int 类型,要使用 short 和 long。

• float 和 double 没有在内核中使用,但是Demo 代码中有使用。

此外,有两种额外的类型要为每种平台定义。分别是:

portTickType
如果 configUSE_16_BIT_TICKS 被定义, 则 portTickType 被定义为无符号16bit 类型,否则为无符号 32 bit 类型。参考API文档中的 定制部分获取详细信息。

portBASE_TYPE
被定义为当前平台最佳的整形类型。例如,在一个 32 位的平台上, portBASE_TYPE 被定义为32 位的数据类型。在16位的平台上, portBASE_TYPE 则被定义为 16 位的数据类型。如果 portBASE_TYPE 被定义为 char 类型,则 必须为 signed char 类型,因为代码中用到这种类型作为一些函数的返回值类型,而返回值必须可以为负值以用来指示错误条件。

点击这里更多相关内容

编程风格
缩进
缩进使用 Tab . 一个 tab 等于 4 个空格.
注释
注释文字尽量不能超过 80 列,除非是用来描述一个参数。
不采用 C++ 类型的注释(//)。

FreeRTOS源代码的编程标准与命名约定的更多相关文章

  1. freeRTOS内核学习笔记(1)-编程标准

    在开始具体的学习之前,你应该先了解freeRTOS的编程标准.这能够方便你在接下来的阅读中快速的了解一些内容 的基本信息,并方便记忆.此外,良好的编程风格也是工作效率的保障. 你可以在https:// ...

  2. Unity编程标准导引-3.4 Unity中的对象池

    本文为博主原创文章,欢迎转载.请保留博主链接http://blog.csdn.net/andrewfan Unity编程标准导引-3.4 Unity中的对象池 本节通过一个简单的射击子弹的示例来介绍T ...

  3. UNIX环境高级编程---标准I/O库

    前言:我想大家学习C语言接触过的第一个函数应该是printf,但是我们真正理解它了吗?最近看Linux以及网络编程这块,我觉得I/O这块很难理解.以前从来没认识到Unix I/O和C标准库I/O函数压 ...

  4. UNIX环境高级编程——标准I/O库函数和Unbuffered I/O函数

    以写文件为例,C标准I/O库函数(printf(3) .putchar(3) .fputs(3) )与系统调用write(2) 的关 系如下图所示. 库函数与系统调用的层次关系 open .read ...

  5. Linux 系统应用编程——标准I/O

    标准I/O的由来         标准I/O指的是ANSI C 中定义的用于I/O操作的一系列函数. 只要操作系统安装了C库,标准I/O函数就可以调用.换句话说,如果程序中使用的是标准I/O函数,那么 ...

  6. Unity编程标准导引-1.2官方资源介绍

    1.2.官方资源介绍 Unity官方提供了丰富的学习和参考资源,有以下类别: Unity手册以及API文档 Unity的官方教程 AssetStore 1.2.1 Unity手册以及API文档 前述文 ...

  7. Unity编程标准导引-Unity中的基本概念-2.1界面概览

    Unity中的基本概念 本文我们介绍Unity中的基本概念,包括:场景.游戏对象.组件.预制件.资源等. 2.1.界面概览 打开Unity之后,我们大概可以看到以上画面,以上画面中即显示了我们最常用到 ...

  8. UNIX环境高级编程——标准I/O库缓冲区和内核缓冲区的区别

    1.C标准库的I/O缓冲区         UNIX的传统 是Everything is a file,键盘.显示器.串口.磁盘等设备在/dev 目录下都有一个特殊的设备文件与之对应,这些设备文件也可 ...

  9. UNIX环境高级编程——标准I/O库

    对一个进程预定义了三个流,并且这三个流可以自动的被进程使用,它们是:标准输入.标准输出.和标准错误. 标准I/O库提供缓冲的目的是尽可能减少使用read和write的次数. 标准I/O库提供了三种类型 ...

随机推荐

  1. 那些日常琐事(iPhone上的细小提示,大数据分析)

         今天早上蹲坑玩手机的时候,无意间看到了iPhone 给我一些提醒,震惊了我.也许你们会说,没什么大惊小怪的,当然做程序的都知道苹果公司早就记载了我们日常生活中很多数据,只是苹果公司目前还没做 ...

  2. Java经典编程题50道之五十

    有五个学生,每个学生有3门课的成绩,从键盘输入以上数据(包括学生号,姓名,三门课成绩),计算出平均成绩,况原有的数据和计算出的平均分数存放在磁盘文件 "stud"中. public ...

  3. re 学习随便

    . 任意一个字符 \转义字符 *  字符重复0--多次 + 字符重复1-多次 ? 字符重复0-1次 ^行首匹配 或者在一个字符集中表示取反 \$  匹配字符串末尾 \b 匹配\w 与\w 之间的 \B ...

  4. redis bitcount variable-precision swar算法

    花了不到一周的时间看完了一本reids设计与实现的书,感觉整体的设计有些地方的确很巧妙,各个结构之间联系的非常紧密,但是很简单,逻辑性的没有太多,但是学到了一个bitcount计数1的方法比较巧妙,记 ...

  5. div中内容无法自动换行问题

    .l-text{ padding:.3em .5em; width:67%; height: auto; /*height:1.3em;*/ border:.1em #2294C3 solid; bo ...

  6. 解决Yii2邮件发送问题(结果返回成功,但接收不到邮件)

    刚刚用了一下yii邮件发送功能,虽然结果返回成功,但接收不到邮件.配置文件代码如下: 'components' => [ 'db' => [ 'class' => 'yii\db\C ...

  7. 如何使程序运行在UI线程

    context.runOnUiThread(new Runnable() { @Override public void run() { _prop = new Prop(buyType, money ...

  8. 【WPF】在新线程上打开窗口

    当WPF应用程序运行时,默认会创建一个UI主线程(因为至少需要一个),并在该UI线程上启动消息循环.直到消息循环结束,应用程序就随即退出.那么,问题就来了,能不能创建新线程,然后在新线程上打开一个新窗 ...

  9. C#基础:.NET环境下WebConfig的加密

    在将ASP.NET项目部署到服务器上时,内网环境下Web.Config往往是直接复制过去.对于外网环境,则需要对Web.Config文件进行加密. .NET环境下一共提供了2种方式的加密功能,分别是D ...

  10. SQL Server 文件结构 与 全局变量,函数

    SQL Server 文件结构与全局变量 数据库和表 文件类型 主数据文件 .mdf 次要数据文件 .ndf 日志文件 .ldf 系统数据库 master 数据库 记录所有的登陆账户和系统配置设置 记 ...