文章目录

  • 变量
  • 函数
  • 宏定义
  • 结语

如果是刚接触 FreeRTOS,看到它的命名,简直是匪夷所思,犹如天书。所以,还是有必要了解它的命名规则。

变量

  1. 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 就是这样

  2. uint16_t 定义的变量都加上前缀 us。 u 代表 unsigned 无符号,s 代表 short 短整型。

    例如: const uint16_t usStackDepth

  3. 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 呢?

  4. int 定义的变量加上前缀 i。i 代表 int

    例如:int iTaskErrno;

  5. stdint.h 文件中未定义的变量类型,在定义变量时需要加上前缀 x.

    例如:

    BaseType_t xCoRoutinePreviouslyWoken

    MiniListItem_t xListEnd

  6. stdint.h 文件中未定义的无符号变量类型,在定义变量时要加上前缀 u,比如 UBaseType_t 定义
    的变量要加上前缀 ux。

    例如:

    typedef unsigned long UBaseType_t;

    UBaseType_t uxPriority;

  7. 枚举变量会加上前缀 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;
    
  8. 指针变量会加上前缀 p

    例如:

    TCB_t * pxTCB;

    uint8_t * pucQueueStorage; // 因为是无符号,所以是 pu

  9. 根据 MISRA (The Motor Industry Software Reliability Association,中文名称为汽车工业软件可靠性联会)代码规则,char 定义的变量只能用于 ASCII 字符,前缀使用 c

    例如:

    char cRxedChar;

  10. 根据 MISRA 代码规则,**char *** 定义的指针变量只能用于 ASCII 字符串,前缀使用 pc

    例如:

    char *pcStringToSend;

函数

  1. 加上了 static 声明的函数,定义时要加上前缀 prv(单词 private 的缩写)。

    例如:

    static void prvInitialiseCoRoutineLists( void );

  2. 带有返回值的函数,根据返回值的数据类型,加上相应的前缀,如果没有返回值,即 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 );
    
  3. 根据文件名,文件中相应的函数定义时可能会将文件名加到函数命名中,比如 tasks.c 文件中函数
    vTaskDelete,函数中的 task 就是文件名中的 task。

宏定义

  1. 根据宏定义所在的文件,文件中的宏定义声明时也将文件名加到宏定义中,比如宏定义
    configUSE_PREEMPTION 是定义在文件 FreeRTOSConfig.h 里面。 宏定义中的 config 就是文
    件名中的 config。 另外注意,前缀要小写。

  2. 除了前缀,其余部分全部大写,同时用下划线分开。

    例如:

    // 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 的命名规则相关推荐

  1. FreeRTOS内核笔记(一):基本知识和命名规则

    FreeRTOS内核笔记(一):基本知识和命名规则 FreeRTOS内核笔记 命名规则: 常用宏定义 Thread运行状态: RTOS Tick Context切换: 实时调度器Scheduler F ...

  2. st link v2引脚连接_ST-Link资料02_ST-Link固件介绍,及固件命名规则

    说明: 本文原创作者『strongerHuang』 本文首发于微信公众号『嵌入式专栏』,同时也更新在我的个人网站:EmbeddedDevelop 一.写在前面 一些人可能看了上一篇关于ST-Link的 ...

  3. ST-Link资料02_ST-Link固件介绍,及固件命名规则

    说明: 本文原创作者『strongerHuang』,转载请标明来源(链接). 首发于微信公众号『嵌入式专栏』,同时也更新在我的个人网站:www.strongerhuang.com 标签: STM32. ...

  4. Java中类、常量、变量、方法名等命名规则

    Java中类.常量.变量.方法名等命名规则 命名规则: 命名由字母.数字.下划线.美元符号($)构成. 命名不可以数字作为开头. 长度无限制,但不可存在空格. 大小写所表述内容含义不同. 命名不可与J ...

  5. [笔记]C#基础入门(八)——C#标识符的命名规则

    程序中的变量名.常量名.类名.方法名,都叫做标识符.C#有一套标识符的命名规则,如果命名时不遵守规则,就会出错.这套规则简单说有下面三条: ①标识符只能由英文字母.数字和下划线组成,不能包含空格和其他 ...

  6. web标准化设计:常用的CSS命名规则

    常用的CSS命名规则 头:header 内容:content/container 尾:footer 导航:nav 侧栏:sidebar 栏目:column 页面外围控制整体布局宽度:wrapper 左 ...

  7. [转]Windows与VC命名规则

    转自:http://hi.baidu.com/11158512/blog/item/0fbd5535cbfb5d1c91ef3970.html 匈牙利命名法是一种编程时的命名规范.基本原则是:变量名= ...

  8. 符合python语言变量命名规则_Python变量命名规则

    变量的命名规则 1.要具有描述性 2.变量名只能_,数字,字母组成,不可以是空格或者特殊字符([email protected]#$%^&*~) 3.不能以中文为变量名 4.不能以数字开头 5 ...

  9. 常用的CSS命名规则

    网页设计中常用的CSS命名规则: 头:header 内容:content/container 尾:footer 导航:nav 侧栏:sidebar 栏目:column 页面外围控制整体布局宽度:wra ...

最新文章

  1. table相关的API
  2. 在 Android 应用程序中使用 Internet 数据
  3. 天池在线编程 2020国庆八天乐 - 8. 分糖果
  4. ECCV 2020 | 视觉引导的声源分离辅助立体声重构方法 Sep-Stereo
  5. 看贴回帖 感受与感动
  6. Markdown-Latex全称量词和存在量词(对于全体、存在)
  7. c++字符转换及介绍(未完)
  8. wifi共享代码实践java_笔记本实现共享wifi上网
  9. matlab 读取.pgm,【数字图像处理】pbm/pgm/ppm图片的读写(Matlab)
  10. 怎么开启MIUI8系统的ROOT超级权限
  11. 将文件从VMWare虚拟机的Linux系统传到U盘
  12. Markdown:如何修改插入图片的大小或比例
  13. 黑马程序员--java基础--集合(三)
  14. 【Codeforces 869 C The Intriguing Obsession】 组合数学 思维
  15. 最新前端开发面试笔试题及答案---图片(面试题系列持续更新中)(8)
  16. python列表操作计算列表长度并输出,python列表 (list)
  17. 应用程序迁移,电脑c盘满了怎么转移到d盘?
  18. 【生活随笔】夜色漫步
  19. jquery+css动画效果-数字跳动
  20. AT、CVT、双离合有什么优缺点?

热门文章

  1. 001.Amoeba读写分离部署
  2. 开始简单项目的第二周
  3. ZOJ 2675 Little Mammoth(计算几何)
  4. 一个mp4文件分析工具
  5. 十月下旬腾讯,网易游戏,百度盛大迅雷校园招聘笔试题集锦(10.25)
  6. 构建安全的Xml Web Service系列之初探使用Soap头
  7. Matlab xcorr函数详解
  8. stdout和stderr标准输出的区别
  9. f2py支持在fortran语言中调用其他Fortran函数或C代码或Python代码
  10. linux服务器运行matlab文件报错