FreeRTOS 的命名规则
文章目录
- 变量
- 函数
- 宏定义
- 结语
如果是刚接触 FreeRTOS,看到它的命名,简直是匪夷所思,犹如天书。所以,还是有必要了解它的命名规则。
变量
uint32_t 定义的变量都加上前缀 ul。 u 代表 unsigned 无符号,l 代表 long 长整型。
例如:
static portFORCE_INLINE uint32_t Atomic_CompareAndSwap_u32( uint32_t volatile * pulDestination,uint32_t ulExchange,uint32_t ulComparand )
ulExchange,ulComparand 就是这样
uint16_t 定义的变量都加上前缀 us。 u 代表 unsigned 无符号,s 代表 short 短整型。
例如:
const uint16_t usStackDepth
uint8_t 定义的变量都加上前缀 uc。 u 代表 unsigned 无符号,c 代表 char 字符型。
例如:
#if ( configUSE_TASK_NOTIFICATIONS == 1 )uint32_t ulDummy18[ configTASK_NOTIFICATION_ARRAY_ENTRIES ];uint8_t ucDummy19[ configTASK_NOTIFICATION_ARRAY_ENTRIES ];#endif#if ( tskSTATIC_AND_DYNAMIC_ALLOCATION_POSSIBLE != 0 )uint8_t uxDummy20;#endif
ucDummy19 就是这样;
但是我不明白,uxDiummy20 为啥就用的 ux 呢?
int 定义的变量加上前缀 i。i 代表 int
例如:
int iTaskErrno;
stdint.h 文件中未定义的变量类型,在定义变量时需要加上前缀 x.
例如:
BaseType_t xCoRoutinePreviouslyWoken
MiniListItem_t xListEnd
stdint.h 文件中未定义的无符号变量类型,在定义变量时要加上前缀 u,比如 UBaseType_t 定义
的变量要加上前缀 ux。例如:
typedef unsigned long UBaseType_t;
UBaseType_t uxPriority;
枚举变量会加上前缀 e。
例如:
typedef enum {eRunning = 0, /* A task is querying the state of itself, so must be running. */eReady, /* The task being queried is in a ready or pending ready list. */eBlocked, /* The task being queried is in the Blocked state. */eSuspended, /* The task being queried is in the Suspended state, or is in the Blocked state with an infinite time out. */eDeleted, /* The task being queried has been deleted, but its TCB has not yet been freed. */eInvalid /* Used as an 'invalid state' value. */ } eTaskState;eTaskState eState;
指针变量会加上前缀 p。
例如:
TCB_t * pxTCB;
uint8_t * pucQueueStorage; // 因为是无符号,所以是 pu
根据 MISRA (The Motor Industry Software Reliability Association,中文名称为汽车工业软件可靠性联会)代码规则,char 定义的变量只能用于 ASCII 字符,前缀使用 c。
例如:
char cRxedChar;
根据 MISRA 代码规则,**char *** 定义的指针变量只能用于 ASCII 字符串,前缀使用 pc。
例如:
char *pcStringToSend;
函数
加上了 static 声明的函数,定义时要加上前缀 prv(单词 private 的缩写)。
例如:
static void prvInitialiseCoRoutineLists( void );
带有返回值的函数,根据返回值的数据类型,加上相应的前缀,如果没有返回值,即 void 类型,函数的前缀加上字母 v。
例如:
BaseType_t xQueueGenericReset( QueueHandle_t xQueue,BaseType_t xNewQueue );#define configRUN_TIME_COUNTER_TYPE uint32_t configRUN_TIME_COUNTER_TYPE ulTaskGetIdleRunTimePercent( void );StackType_t * pxPortInitialiseStack( StackType_t * pxTopOfStack,StackType_t * pxEndOfStack,TaskFunction_t pxCode,void * pvParameters,BaseType_t xRunPrivileged );const char * pcQueueGetName( QueueHandle_t xQueue );
根据文件名,文件中相应的函数定义时可能会将文件名加到函数命名中,比如 tasks.c 文件中函数
vTaskDelete,函数中的 task 就是文件名中的 task。
宏定义
根据宏定义所在的文件,文件中的宏定义声明时也将文件名加到宏定义中,比如宏定义
configUSE_PREEMPTION 是定义在文件 FreeRTOSConfig.h 里面。 宏定义中的 config 就是文
件名中的 config。 另外注意,前缀要小写。除了前缀,其余部分全部大写,同时用下划线分开。
例如:
// include\queue.h #define queueQUEUE_TYPE_SET ( ( uint8_t ) 0U )// include\list.h #define listINSERT_END( pxList, pxNewListItem ) \{ \ListItem_t * const pxIndex = ( pxList )->pxIndex; \...// include\timers.h #define tmrCOMMAND_EXECUTE_CALLBACK_FROM_ISR ( ( BaseType_t ) -2 )// include\croutine.h #define crQUEUE_RECEIVE_FROM_ISR( pxQueue, pvBuffer, pxCoRoutineWoken ) \xQueueCRReceiveFromISR( ( pxQueue ), ( pvBuffer ), ( pxCoRoutineWoken ) )
结语
如果你仔细研究 FreeRTOS 的命名,也会看到有些地方不符合上面的规则。
不知道作者是怎么想的,反正我是不喜欢这样的命名。
参考资料
FreeRTOS的编码标准和命名风格 - 菜鸟学院
FreeRTOS 的命名规则相关推荐
- FreeRTOS内核笔记(一):基本知识和命名规则
FreeRTOS内核笔记(一):基本知识和命名规则 FreeRTOS内核笔记 命名规则: 常用宏定义 Thread运行状态: RTOS Tick Context切换: 实时调度器Scheduler F ...
- st link v2引脚连接_ST-Link资料02_ST-Link固件介绍,及固件命名规则
说明: 本文原创作者『strongerHuang』 本文首发于微信公众号『嵌入式专栏』,同时也更新在我的个人网站:EmbeddedDevelop 一.写在前面 一些人可能看了上一篇关于ST-Link的 ...
- ST-Link资料02_ST-Link固件介绍,及固件命名规则
说明: 本文原创作者『strongerHuang』,转载请标明来源(链接). 首发于微信公众号『嵌入式专栏』,同时也更新在我的个人网站:www.strongerhuang.com 标签: STM32. ...
- Java中类、常量、变量、方法名等命名规则
Java中类.常量.变量.方法名等命名规则 命名规则: 命名由字母.数字.下划线.美元符号($)构成. 命名不可以数字作为开头. 长度无限制,但不可存在空格. 大小写所表述内容含义不同. 命名不可与J ...
- [笔记]C#基础入门(八)——C#标识符的命名规则
程序中的变量名.常量名.类名.方法名,都叫做标识符.C#有一套标识符的命名规则,如果命名时不遵守规则,就会出错.这套规则简单说有下面三条: ①标识符只能由英文字母.数字和下划线组成,不能包含空格和其他 ...
- web标准化设计:常用的CSS命名规则
常用的CSS命名规则 头:header 内容:content/container 尾:footer 导航:nav 侧栏:sidebar 栏目:column 页面外围控制整体布局宽度:wrapper 左 ...
- [转]Windows与VC命名规则
转自:http://hi.baidu.com/11158512/blog/item/0fbd5535cbfb5d1c91ef3970.html 匈牙利命名法是一种编程时的命名规范.基本原则是:变量名= ...
- 符合python语言变量命名规则_Python变量命名规则
变量的命名规则 1.要具有描述性 2.变量名只能_,数字,字母组成,不可以是空格或者特殊字符([email protected]#$%^&*~) 3.不能以中文为变量名 4.不能以数字开头 5 ...
- 常用的CSS命名规则
网页设计中常用的CSS命名规则: 头:header 内容:content/container 尾:footer 导航:nav 侧栏:sidebar 栏目:column 页面外围控制整体布局宽度:wra ...
最新文章
- table相关的API
- 在 Android 应用程序中使用 Internet 数据
- 天池在线编程 2020国庆八天乐 - 8. 分糖果
- ECCV 2020 | 视觉引导的声源分离辅助立体声重构方法 Sep-Stereo
- 看贴回帖 感受与感动
- Markdown-Latex全称量词和存在量词(对于全体、存在)
- c++字符转换及介绍(未完)
- wifi共享代码实践java_笔记本实现共享wifi上网
- matlab 读取.pgm,【数字图像处理】pbm/pgm/ppm图片的读写(Matlab)
- 怎么开启MIUI8系统的ROOT超级权限
- 将文件从VMWare虚拟机的Linux系统传到U盘
- Markdown:如何修改插入图片的大小或比例
- 黑马程序员--java基础--集合(三)
- 【Codeforces 869 C The Intriguing Obsession】 组合数学 思维
- 最新前端开发面试笔试题及答案---图片(面试题系列持续更新中)(8)
- python列表操作计算列表长度并输出,python列表 (list)
- 应用程序迁移,电脑c盘满了怎么转移到d盘?
- 【生活随笔】夜色漫步
- jquery+css动画效果-数字跳动
- AT、CVT、双离合有什么优缺点?