一、 搭建linux环境
参考:[精简linux] 快速在window搭建linux验证平台
二、安装cmkae和g++
sudo apt install cmake sudo apt install g++
三、如何在linux运行freertos
打包文件:https://download.csdn.net/download/qq_29246181/85212272 自行解压到非中文路径
- 通过ubuntu进入上述文件路径 cd freertos_linux/
- 进入bulid文件夹,cd build/
推荐建立build目录进行编译,所有的中间文件都会生成在build目录下,需要删除时直接清空该目录即可
- 执行 cmake 命令,该命令使cmake检测编译环境,并生成相应的makefile
-
在当前路径,执行make,并生成目标文件,main -
运行目标文件 执行./main - #include <iostream>
- #include <stdio.h>
- #include "os_api.h"
- void task1(void* arg) {
- while(1) {
- printf("123\n");
- os::delay(1000);
- }
- }
- void task2(void* arg) {
- while(1) {
- printf("456\n");
- os::delay(2000);
- }
- }
- int main() {
- os::task::create(task1, "task1", 1024, 1);
- os::task::create(task2, "task1", 1024, 2);
- os::start();
- return 0;
- }
复制代码
下面是 FreeRTOS 示例从编译到运行的完整流程:
四、常见问题与排查
在编译或运行 FreeRTOS 示例的过程中,可能会遇到一些常见错误,下面列出典型问题及对应的解决方案。
1. cmake 未找到(cmake: command not found)
执行 cmake .. 时提示找不到命令,说明系统尚未安装 cmake,或安装后未生效。 - sudo apt update
- sudo apt install cmake
复制代码
安装完成后可用以下命令验证版本:
2. g++ 未找到(g++: command not found)
编译过程中提示找不到 g++,说明缺少 C++ 编译器,安装即可:
同样可以验证版本:
3. make 失败(make: command not found 或编译报错)
如果提示找不到 make,先安装:
如果 make 执行过程中报错,常见原因是 cmake 生成 Makefile 时环境不完整。建议先清空 build 目录后重新生成: - cd build
- rm -rf *
- cmake ..
- make
复制代码
4. 权限不足(Permission denied)
运行 ./main 时提示权限不足,通常是因为目标文件没有可执行权限,或当前用户对目录无写权限。
给目标文件添加可执行权限:
如果编译过程中因目录权限报错,可对 build 目录授权后重试:
5. 找不到头文件(os_api.h: No such file or directory)
编译时提示找不到 os_api.h,说明当前路径不在编译搜索路径中。请确认已进入 build 目录执行 cmake,且源码目录结构完整,不要手动移动或删除头文件。
6. 运行后无输出或程序卡住
如果 ./main 运行后没有任何打印,先确认是否已成功生成目标文件,并检查终端是否正常。若程序卡住,可尝试重新编译,或检查代码中任务创建参数(如栈大小 1024 是否足够)。
五、总结
本文从零开始在 Linux 环境下搭建 FreeRTOS 验证平台,并成功编译、运行了一个包含两个任务的示例程序。整个过程可以概括为以下几个关键步骤:
- 搭建 Linux 环境:通过精简 Linux 方案快速在 Windows 上搭建验证平台,为后续编译运行提供基础。
- 安装编译工具:使用 apt 安装 cmake 和 g++,这是生成 Makefile 和编译 C++ 代码的前提。
- 编译与运行:进入 build 目录执行 cmake .. 生成 Makefile,再执行 make 生成目标文件,最后运行 ./main 观察任务调度输出。
注意事项
- 源码包务必解压到非中文路径,避免因路径编码问题导致编译失败。
- 推荐使用独立的 build 目录进行编译,便于清理中间文件。
- 遇到编译或运行错误时,可对照「常见问题与排查」一节逐一排查,多数问题源于工具缺失、权限不足或目录结构不完整。
下一步学习建议
- 深入任务调度:本文示例创建了两个任务,可进一步学习 FreeRTOS 的优先级、时间片轮转、任务状态切换等调度机制,尝试调整优先级和延时观察输出变化。
- 学习内存管理:FreeRTOS 提供多种内存分配方案(如 heap_1 ~ heap_5),可研究不同方案的适用场景,并尝试在任务中动态申请和释放内存。
- 探索同步与通信:学习信号量、队列、互斥锁等机制,实现任务间的数据传递与同步。
- 移植到真实硬件:在模拟环境跑通后,可将工程移植到 STM32 等真实开发板,体验中断、外设驱动与实时性的实际表现。
下面是本文整体流程的概览图: |