FreeRTOS/FreeRTOS-Kernel
GitHub: FreeRTOS/FreeRTOS-Kernel
开源实时操作系统内核,提供任务调度、内存管理和进程间通信等核心功能,专为资源受限的嵌入式和物联网设备设计。
Stars: 3897 | Forks: 1460
[](https://github.com/FreeRTOS/FreeRTOS-Kernel/actions/workflows/unit-tests.yml?query=branch%3Amain+event%3Apush+workflow%3A%22CMock+Unit+Tests%22++)
[](https://codecov.io/gh/FreeRTOS/FreeRTOS-Kernel)
## 入门指南
本仓库仅包含 FreeRTOS 内核源/头文件和内核移植文件。本仓库作为子模块被引用于
[FreeRTOS/FreeRTOS](https://github.com/FreeRTOS/FreeRTOS)
仓库,该仓库的 ```FreeRTOS/Demo``` 目录下包含预配置的演示应用项目。
使用 FreeRTOS 最简单的方法是从一个预配置的演示应用项目开始。这样你就能包含正确的 FreeRTOS 源文件,并配置正确的包含路径。一旦演示应用能够构建和运行,你就可以移除演示应用文件,并开始添加你自己的应用源文件。请参阅
[FreeRTOS 内核快速入门指南](https://www.freertos.org/Documentation/01-FreeRTOS-quick-start/01-Beginners-guide/02-Quick-start-guide)
获取详细说明和其他有用的链接。
此外,有关 FreeRTOS 内核功能的信息,请参阅
[开发者文档](https://www.freertos.org/Documentation/02-Kernel/02-Kernel-features/00-Developer-docs)
和 [API 参考](https://www.freertos.org/Documentation/02-Kernel/04-API-references/01-Task-creation/00-TaskHandle)。
另外,关于贡献和创建 Pull Request,请参阅
[此处的说明](.github/CONTRIBUTING.md#contributing-via-pull-request)。
**FreeRTOS-Kernel V11.1.0
[源代码](https://github.com/FreeRTOS/FreeRTOS-Kernel/tree/V11.1.0) 是
[FreeRTOS 202406.00 LTS](https://github.com/FreeRTOS/FreeRTOS-LTS/tree/202406-LTS)
版本的一部分。**
### 获取帮助
如果你有任何问题或在 FreeRTOS 项目故障排除方面需要帮助,
我们有一个活跃的社区,可以在
[FreeRTOS 社区支持论坛](https://forums.freertos.org) 上提供帮助。
## 使用 FreeRTOS-Kernel
### 通过 CMake 使用
如果使用 CMake,建议通过 FetchContent 使用此仓库。
将以下内容添加到你项目的主目录或子目录的 `CMakeLists.txt` 中:
- 定义你要使用的源和版本/标签:
```
FetchContent_Declare( freertos_kernel
GIT_REPOSITORY https://github.com/FreeRTOS/FreeRTOS-Kernel.git
GIT_TAG main #Note: Best practice to use specific git-hash or tagged version
)
```
如果你倾向于将其添加为 git submodule,请执行:
```
git submodule add https://github.com/FreeRTOS/FreeRTOS-Kernel.git
git submodule update --init
```
- 添加一个 freertos_config 库(通常是一个 INTERFACE 库)以下假设目录结构为:
- `include/FreeRTOSConfig.h`
```
add_library(freertos_config INTERFACE)
target_include_directories(freertos_config SYSTEM
INTERFACE
include
)
target_compile_definitions(freertos_config
INTERFACE
projCOVERAGE_TEST=0
)
```
如果你将 FreeRTOS-Kernel 作为 submodule 安装,则需要将其作为子目录添加:
```
add_subdirectory(${FREERTOS_PATH})
```
- 配置 FreeRTOS-Kernel 并使其可用
- 此特定示例支持原生和交叉编译构建选项。
```
set( FREERTOS_HEAP "4" CACHE STRING "" FORCE)
# 选择原生编译 PORT
set( FREERTOS_PORT "GCC_POSIX" CACHE STRING "" FORCE)
# 选择交叉编译 PORT
if (CMAKE_CROSSCOMPILING)
set(FREERTOS_PORT "GCC_ARM_CA9" CACHE STRING "" FORCE)
endif()
FetchContent_MakeAvailable(freertos_kernel)
```
- 在交叉编译的情况下,你还应将以下内容添加到 `freertos_config`:
```
target_compile_definitions(freertos_config INTERFACE ${definitions})
target_compile_options(freertos_config INTERFACE ${options})
```
### 独立使用 - 克隆此仓库
使用 HTTPS 克隆:
```
git clone https://github.com/FreeRTOS/FreeRTOS-Kernel.git
```
使用 SSH:
```
git clone git@github.com:FreeRTOS/FreeRTOS-Kernel.git
```
## 仓库结构
- 此仓库的根目录包含三个每个移植版本通用的文件 - list.c、queue.c 和 tasks.c。内核包含在这三个文件中。croutine.c 实现了可选的协程功能 —— 这通常仅用于内存非常有限的系统。
- ```./portable``` 目录包含特定于某个微控制器和/或编译器的文件。
请参阅 ```./portable``` 目录中的 readme 文件以获取更多信息。
- ```./include``` 目录包含实时内核头文件。
- ```./template_configuration``` 目录包含一个示例 `FreeRTOSConfig.h`,以帮助快速启动一个新项目。
请参阅 [FreeRTOSConfig.h](examples/template_configuration/FreeRTOSConfig.h) 文件获取说明。
### 代码格式化
FreeRTOS 文件使用
"[uncrustify](https://github.com/uncrustify/uncrustify)" 工具进行格式化。
uncrustify 使用的配置文件可以在
[FreeRTOS/CI-CD-GitHub-Actions's](https://github.com/FreeRTOS/CI-CD-Github-Actions)
[uncrustify.cfg](https://github.com/FreeRTOS/CI-CD-Github-Actions/tree/main/formatting)
文件中找到。
### 换行符
检入 FreeRTOS-Kernel 仓库的文件使用 unix 风格的 LF 换行符,
以便与 git 保持最佳兼容性。
为了与 Microsoft Windows 工具实现最佳兼容性,最好启用
git autocrlf 功能。你可以使用以下命令为当前
仓库启用此设置:
```
git config core.autocrlf true
```
### Git 历史优化
此仓库中的某些提交执行了涉及许多行的大型重构,
这会在使用 `git blame` 命令时导致不需要的行为。你可以
使用以下命令配置 git 忽略此仓库中的大型重构提交列表:
```
git config blame.ignoreRevsFile .git-blame-ignore-revs
```
### 拼写和格式化
我们建议在开发 FreeRTOS-Kernel 时使用
[Visual Studio Code](https://code.visualstudio.com),
通常被称为 VSCode。
FreeRTOS-Kernel 还使用 [cSpell](https://cspell.org/) 作为其
拼写检查的一部分。其配置文件可在 [cspell.config.yaml](cspell.config.yaml) 找到
此外还有一个
[适用于 VSCode 的 cSpell 插件](https://marketplace.visualstudio.com/items?itemName=streetsidesoftware.code-spell-checker)
也可以使用。
*[.cSpellWords.txt](.github/.cSpellWords.txt)* 包含
传统英语词典中通常找不到的单词。拼写检查器使用它来
验证 FreeRTOS 代码库中使用的各种术语、变量名和其他特殊单词是正确的。如果你的 pull request 未能通过拼写检查,
并且你认为这是一个错误,那么请将该单词添加到
*[.cSpellWords.txt](.github/.cSpellWords.txt)*。添加单词时请
对列表进行排序,可以通过运行 bash 命令完成:
`sort -u .cSpellWords.txt -o .cSpellWords.txt`
请注意,目前仅检查 FreeRTOS-Kernel 源文件、[include](include)、
[portable/MemMang](portable/MemMang) 和 [portable/Common](portable/Common)
文件的拼写和格式。
## 第三方工具
请访问[此链接](.github/third_party_tools.md) 获取有关支持 FreeRTOS 的第三方工具的详细信息。
标签:Bash脚本, Bing搜索, DNS解析, Embedded C, FreeRTOS, FreeRTOS-Kernel, IoT, MCU, RTOS, 任务调度, 内核, 固件开发, 实时内核, 实时操作系统, 客户端加密, 嵌入式开发, 嵌入式系统, 嵌入式软件, 工业控制, 开源项目, 微控制器, 消费电子, 物联网, 硬件抽象层, 系统移植, 网络安全监控, 裸机编程, 驱动开发