FreeRTOS移植、数据类型和编码风格指南

1. FreeRTOS移植

1.1 通用文件

tasks.clist.c 在所有程序中必须包含

queue.c: 包含队列(queue)和信号服务(semaphore services)

timers.c: 包含软件计时器( software timer )功能,在使用软件计时器功能时,才需要使用此文件

event_groups.c: 包含事件组(event group)功能,在使用事件组功能时,才需要此文件

croutine.c: 有关协同(co-routine)的实现,很少使用

注:不要更改文件名称

1.2 特定文件

位于 FreeRTOS/Source/portable 文件中,里面的层次结构为 第一级为编译器,第二级为架构

注:有关内存管理的源文件在 FreeRTOS/Source/portable/MemMang 中,有5种,程序必须包含其中一种

1.3 头文件

程序必须包含 FreeRTOS/Source/include特定文件下的头文件

必须包含一个名为 FreeRTOSConfig.h 的头文件,此文件可以在官方提供的例程中找到

2. 数据类型和编码风格指南

2.1 数据类型

在 portmacro.h 文件中包含两个数据类型 TickType_t 和 BaseType_t

TickType_t:自FreeRTOS应用程序启动以来发生的 滴答中断数 称为 滴答计数 。两次滴答中断之间的时间称为滴答周期时间被指定为滴答周期的倍数。TickType_t是用于保存 滴答计数值指定时间 的数据类型。TickType_t可以是无符号的16位类型,也可以是无符号的32位类型,这取决于FreeRTOSConfig.h中 configUSE_16_BIT_TICKS 的设置。如果configUSE_16_BIT_TICKS设置为1,那么TickType_t被定义为uint16_t。如configUSE_16_BIT_TICKS被设置为0,那么TickType_t被定义为uint32_t。在stm32单片机上设置为32位

BaseType_t: 被定义为体系结构中最有效的数据类型。通常,这是32位体系结构上的32位类型,16位体系结构上的16位类型,以及8位体系结构上的8位类型。BaseType_t通常用于只能接受非常有限范围的值的返回类型,以及用于 pdTRUE / pdFALSE 类型布尔值。

2.2 变量名

变量以其类型为前缀:’ c '表示char, ’ s '表示int16_t (short), ’ l '表示int32_t (long), ’ x '表示BaseType_t和其他任何非标准类型(结构、任务句柄、队列句柄等)。

如果一个变量是无符号的,它也要以’ u ‘作为前缀。如果一个变量是一个指针,它也要以’ p ‘作为前缀。例如,一个uint8_t类型的变量会以’ uc ‘作为前缀,而一个char类型指针的变量会以’ pc '作为前缀。

2.3 函数名

函数的 前缀 包括它们 返回的类型定义它们的文件。例如:

  • vTaskPrioritySet() 返回一个空白和task.c内定义。

  • xQueueReceive() 返回一个变量的类型BaseType_t和queue.c内定义。

  • pvTimerGetTimerID() 返回一个指针和timers.c内定义。

文件作用域(私有)函数的前缀是’ prv ’

2.4 宏定义

大多数宏都是用大写字母写的,前缀用小写字母表示宏的定义位置

前缀 宏定义的位置
port (for example, portMAX_DELAY) portable.h or portmacro.h
task (for example, taskENTER_CRITICAL()) task.h
pd (for example, pdTRUE) projdefs.h
config (for example, configUSE_PREEMPTION) FreeRTOSConfig.h
err (for example, errQUEUE_FULL) projdefs.h

注:信号量API几乎完全是作为一组宏编写的,但是遵循函数命名约定,而不是宏命名约定。

摘自:Mastering_the_FreeRTOS_Real_Time_Kernel-A_Hands-On_Tutorial_Guide.pdf

你可能感兴趣的:(FreeRTOS)