> For the complete documentation index, see [llms.txt](https://freertos.asicfans.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://freertos.asicfans.com/fu-lu-1.md).

# 附录 1: 数据类型和编程风格指南

## 数据类型

每个移植 FreeRTOS 的实例都有一个唯一的 `portmacro.h` 头文件，其中包含两种特殊数据类型(`TickType_t` 和 `BaseType_t`)的定义。表 3 中描述了这些数据类型。

表3. FreeRTOS 使用的特殊数据类型

| 使用宏或类型定义    | 实际类型                                                                                                                                                                                                                                                          |
| ----------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| TickType\_t | <p>这用于存储 tick 计数值，以及用于指定阻塞时间的变量。</p><p><code>TickType\_t</code>可以是无符号 16 位类型或无符号 32 位类型，具体取决于<code>FreeRTOSConfig.h</code> 中 <code>configUSE\_16\_BIT\_TICKS</code> 的设置。</p><p>使用 16 位类型可以极大地提高 8 位和 16 位架构的效率，但严重限制了可以指定的最大阻塞周期。 没有理由在 32 位架构上使用 16 位类型。</p> |
| BaseType\_t | <p>这始终被定义为架构的最有效数据类型。 通常，这是 32 位架构上的 32 位类型，16 位架构上的 16 位类型和 8 位架构上的 8 位类型。</p><p><code>BaseType\_t</code> 通常用于只能采用非常有限的值范围的变量，以及布尔值。</p>                                                                                                                     |

不使用 `char` 以外的标准数据类型（见下文），而是使用编译器的 `stdint.h` 头文件中定义的类型名称。 `char` 类型仅允许指向 ASCII 字符串或引用单个 ASCII 字符。

## 变量名

变量的前缀是它们的类型：`c` 表示 `char`，`s` 表示 `short`，`l` 表示 `long`，`x` 表示 `BaseType_t` 和任何其他类型（结构，任务句柄，队列句柄等）。如果变量是无符号的，它也带有 `u` 前缀。 如果变量是指针，则它也带有 `p` 前缀。 因此，`unsigned char` 类型的变量将以 `uc` 为前缀，而指向 `char` 的类型指针的变量将以 `pc` 为前缀。
