freeRTOS与裸机程序相比有什么区别??

FreeRTOS命名及变量规则

初学FreeRTOS的用户对其变量和函数的命名比较迷惑,    FreeRTOS的核心源代码遵从MISRA编码标准指南,关于MISRA编码标准,可以查看文章https://wenku.baidu.com/view/5e7b2f4ee518964bcf847c99.html。下面专门做一下介绍:

变量

 uint32_t定义的变量都加上前缀ul。u代表unsigned 无符号,l代表long长整型。

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

 uint8_t定义的变量都加上前缀uc。u代表unsigned无符号,c代表char字符型。

 stdint.h文件中未定义的变量类型,在定义变量时需要加上前缀x,比如BaseType_t和TickType_t定义的变量。

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

 size_t 定义的变量也要加上前缀ux。

 枚举变量会加上前缀e。

 指针变量会加上前缀p,比如uint16_t定义的指针变量会加上前缀pus。

 根据MISRA代码规则,char定义的变量只能用于ASCII字符,前缀使用c。

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

函数

 加上了static声明的函数,定义时要加上前缀prv,这个是单词private的缩写。

 带有返回值的函数,根据返回值的数据类型,加上相应的前缀,如果没有返回值,即void类型 ,函数的前缀加上字母v。

 根据文件名,文件中相应的函数定义时也将文件名加到函数命名中,比如tasks.c文件中函数vTaskDelete,函数中的task就是文件名中的task。

 宏定义

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

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

数据类型

 

FreeRTOS使用的数据类型主要分为stdint.h文件中定义的和自己定义的两种。其中char和char *定义的变量要特别注意。

 

  • char:与MISRA编码标准指南一致,char类型变量仅被允许保存ASCII字符
  • char *:与MISRA编码标准指南一致,char *类型变量仅允许指向ASCII字符串。当标准库函数期望一个char *参数时,这样做可以消除一些编译器警告;特别是考虑到有些编译器将char类型当做signed类型,还有些编译器将char类型当做unsigned类型。

 

 FreeRTOS主要自定义了以下四种数据类型:

 TickType_t 如果用户使能了宏定义 configUSE_16_BIT_TICKS,那么TickType_t定义的就是16位无符号数,如果没有使能,那么TickType_t定义的就是32位无符号数。对于32位架构的处理器,一定要禁止此宏定义,即设置此宏定义数值为0即可。

 BaseType_t 这个数据类型根据系统架构的位数而定,对于32位架构,BaseType_t定义的是32位有符号数,对于16位架构,BaseType_t定义的是16位有符号数。如果BaseType_t被定义成了char型,要

你可能感兴趣的:(嵌入式,操作系统,移动开发)