编码风格:µCOS vs FreeRTOS

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

关注+星标公众不错过精彩内容

b38ea3fa4c416fdc594050945d948cde.gif

作者 | strongerHuang

微信公众号 | strongerHuang

不定期有读者在问

  • 怎么才能写出漂亮的代码?

  • 哪里有优秀的代码可以参考?

  • 怎样才能提高自己编码水平?

其实我们身边到处都有优秀的代码可以借鉴只是你没有认真去发现而已。裸机、RTOS、Linux等各类优秀的开源代码相信你一定见到过还有一些优秀的开源库你也肯定接触过。

想要写出漂亮、优秀的代码首先你的代码必须要有一套规范。

今天就给大家分享一下我们身边熟知的RTOS的编码规范以目前(2023-01-10最新版本的uC/OS-III V3.08.02和 FreeRTOS V10.5.1为例

编码标准

uC/OS 和 FreeRTOS 都是遵循 MISRA C 编码标准均支持 PC-Lint 静态检查两者官方文档都有说明。

提示

MISRA C 标准指的是汽车 C 语言开发标准可以参看之前分享的文章MISRA C2012 标准是什么?

1.uC/OS

uC/OS文章明确指出遵循MISRA C:2012标准也支持 PC-Lint 的静态检查。

dc996b5d55ea8125b1a4d329400d5075.png

2.FreeRTOS

FreeRTOS也明确指出采用 MISRA C编码标准但是不支持 C99 之后的标准也支持 PC-Lint 静态检查。

84eb6cd85948d9fefce337127ebe3306.png

FreeRTOS在源代码中有大量说明(注释对 PC-Lint 静态检查可能会引起异常的代码这一点在 uC/OS 源代码中是没有的。

比如

46dc1b9833502e295380af146f9c39de.png

配置文件

两种RTOS配置文件(也就是所谓的“裁剪”文件的“内容”有点类似也是进行了分类。

不过uC/OS的分类和注释更人性化更适合初学者理解。

1.uC/OS

uC/OS的配置文件通常是os_cfg.h

a765ccf9ae6870d65d1ca9bee215e08a.gif

2.FreeRTOS

FreeRTOS的配置文件通常是FreeRTOSConfig.h

821606f561ada954aac29cb728661528.gif

标头

两种RTOS标头的“内容”有点类似只是一个居中一个靠左。

1.uC/OS

包含RTOS版本、版权说明、开源协议说明等

ca6665ccec27602cc9e95756e26e66d1.png

2.FreeRTOS

包含RTOS版本、版权说明、开源协议说明、网址等和uC/OS类似。

afcebadce18d40751ac9b069359f72fa.png

命名

两种RTOS命名规则差别有点大但都符合常规代码命名规则。

1.文件名

uC/OS以【os_系统文件】方式显得更规范(体现了模块化。

FreeRTOS就比较直接这个可能是刚才是命名的时候没有长期规划然后为了兼容一直沿用至今。(这种更容易引起文件重名

7b6cd26ebea09b2c174f67ee2aa3ce4b.png

2.宏

两者有共同之处下划线隔开大写字母但是开头(前缀有一定区别。

以“配置文件”为例uC/OS以【OS_CFG_】开头FreeRTOS以【config】开头。

82b319a457ce53b1d74bc69ef2c1365a.png

3.数据类型

uC/OS定义的数据类型相对更常见也更适合新手。

FreeRTOS定义的数据类型更“系统”一点适合老司机对新手相对没那么友好。

1608cebec8c5cb8cc307ba13f7c52f8f.png

4.函数名

两者有点类似前缀不一样后面都是以【大写字母开头】进行区分。

比如创建任务的函数名

d65458917e7562042d6ffde98cf7e479.png

FreeRTOS的前缀官方有这样的描述

  • 静态(static函数以 prv 为前缀。比如prvIdleTask 函数。

  • API 函数以其返回类型为前缀void 类型以 v 为缀。比如vTaskDelete 函数。

注释

//  /* */ 是两种最常见注释的方法但这两种 RTOS 基本以【/* */】注释居多。

注释的位置也是有讲究通常在代码所在行上一行或者在代码所在行(代码后面。

这里主要说明一下FreeRTOS在代码中没有相信注释函数的功能、参数、返回值等信息。

还是以“创建任务”函数为例

053d05508dca442c303cbdd3dd221b83.png

当然FreeRTOS的函数注释信息在手册中有相信描述。

缩进

这两种RTOS缩进方式一样都是采用 4 空格

91f19061f9707d724d4c8028fff0eeee.png

这里要提醒一下切记不要 Tab 和空格两者混用不然代码就是一片乱。(在不少新手或者初级工程中就经常出现这种代码简直不敢看

单词缩写

不同的领域有不同的缩写方式。在RTOS中也有一些常见的缩写单词比如

缩写
原意
AddrAddress
BlkBlock
ChkCheck
ClrClear
CntCount
CtrCounter
CtxContext
CurCurrent
DelDelete
DlyDelay
ErrError
OS
Operating System‍‍
CPU
Center Processing Unit

好了本文就分享到这里。以上只是列举了部分典型的编码风格更多细节大家可以抽时间自行研究。

------------ END ------------

4224076ee0eb0f5be1d49443579ba6b3.gif

●专栏《嵌入式工具

●专栏《嵌入式开发》

●专栏《Keil教程》

●嵌入式专栏精选教程

关注公众号回复“加群”按规则加入技术交流群回复“1024”查看更多内容。

b28dec38edbb1456c62026ae2e5efee2.jpeg

b9e04af1a4637216bc794a5d7b754d27.png

点击“阅读原文”查看更多分享。

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6