0 前言
@ Author :Dargon
@ Record Date :2021/07/12
@ Reference Book : `FreeRTOS源码详解与应用开发`,`ARM Cortex-M3与Cortex-M4权威指南`,`B站正点原子FreeRTOS讲解视频`
@ Purpose :学习正点原子的miniFly,该飞控基于FreeRTOS系统开发的,所以学习一下记录下关于RTOS系统的一些基本操作,大概了解系统的工作原理,如何创建,运行,切换任务等等基本操作流程。在此进行学习的记录。
FreeRTOS作为一个系统有自己的一套代码的风格,熟悉和了解其内部的代码风格,在看到一个函数名、变量名字的时候,会清晰的得知,函数的返回类型,函数属于哪个文件夹下面,变量的定义类型等。将更多有助于学习源码。
1 命名规则
1.1 变量命名
- uint32_t 类型变量表示 ul “u” 表示unsigned,“l”表示long型,表示32位变量
- uint16_t 类型变量表示 us “u” 表示unsigned,“l”表示short型,表示16位变量
- uint8_t 类型变量表示 uc “u” 表示unsigned,“c”表示char型,表示8位变量
- 非标准定义的类型变量的前缀使用x,例如
BaseType_t
、TickType_t
,这两种类型的是进行重定义得出的。 - 非标准定义的无符号类型变量的前缀使用u,例如ux表示
UBaseType_t
- 位于文件
portmacro.h
,端口 宏
/* Type definitions. */
#define portCHAR char
#define portFLOAT float
#define portDOUBLE double
#define portLONG long
#define portSHORT short
#define portSTACK_TYPE uint32_t
#define portBASE_TYPE long
// --未找到 BaseType_t的typedef
typedef portSTACK_TYPE StackType_t;
typedef long BaseType_t;
typedef unsigned long UBaseType_t;
typedef uint32_t TickType_t;
#define portMAX_DELAY ( TickType_t ) 0xffffffffUL
- 枚举enum 类型变量使用 e开头
- 指针类型 前面加p,例如指针指向一个uint16 类型的变量,这个指针前缀pus
- char 类型变量 前缀c, char* 变量用于字符串,前缀pc
1.2 函数命名
- 使用static 限定某个文件的私有函数使用前缀 prv,表明这个函数的作用域只在当前文件中有效
- API函数根据 函数的返回值的类型来决定函数的前缀,例如返回uint32_t类型的,前缀为ul,返回void类型的,前缀为v
- 函数名字会使用他们所在的文件名
// --v: return void ;port: 位于port.c 文件夹内
void vPortEndScheduler( void )
{
/* Not implemented in ports where there is nothing to return to.
Artificially force an assert. */
configASSERT( uxCriticalNesting == 1000UL );
}
1.3 宏macro命名
- 例如
#define configUSE_PREEMPTION
config:表示在config文件中定义,后面的单词均是大写的,且用下划线"_"隔开
2 数据类型
- 使用的是STM32 F4,对应的MPU是32位的架构,对应的是4个宏定义的类型
BaseType_t
、TickType_t
、UBaseType_t
、StackType_t
,对应的都是处理器32位的架构,属于处理器所处理效率最高的数据类型
_t、
UBaseType_t、
StackType_t`,对应的都是处理器32位的架构,属于处理器所处理效率最高的数据类型