news 2026/9/14 11:44:19

[Linux] 在linux平台搭建freertos

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
[Linux] 在linux平台搭建freertos

文章目录

    • 一、 搭建linux环境
    • 二、安装cmkae和g++
    • 三、如何在linux运行freertos
    • 四、常见问题与排查
      • 1. cmake 未找到(cmake: command not found)
      • 2. g++ 未找到(g++: command not found)
      • 3. make 失败(make: command not found 或编译报错)
      • 4. 权限不足(Permission denied)
      • 5. 找不到头文件(os_api.h: No such file or directory)
      • 6. 运行后无输出或程序卡住
    • 五、总结
      • 注意事项
      • 下一步学习建议

一、 搭建linux环境

参考:[精简linux] 快速在window搭建linux验证平台

二、安装cmkae和g++

sudo apt install cmake
sudo apt install g++

三、如何在linux运行freertos

打包文件:https://download.csdn.net/download/qq_29246181/85212272
自行解压到非中文路径

  1. 通过ubuntu进入上述文件路径 cd freertos_linux/
  2. 进入bulid文件夹,cd build/

推荐建立build目录进行编译,所有的中间文件都会生成在build目录下,需要删除时直接清空该目录即可

  1. 执行 cmake 命令,该命令使cmake检测编译环境,并生成相应的makefile
cmake..

  1. 在当前路径,执行make,并生成目标文件,main

  2. 运行目标文件 执行./main

#include<iostream>#include<stdio.h>#include"os_api.h"voidtask1(void*arg){while(1){printf("123\n");os::delay(1000);}}voidtask2(void*arg){while(1){printf("456\n");os::delay(2000);}}intmain(){os::task::create(task1,"task1",1024,1);os::task::create(task2,"task1",1024,2);os::start();return0;}

下面是 FreeRTOS 示例从编译到运行的完整流程:

进入源码目录 cd freertos_linux/

进入 build 目录 cd build/

执行 cmake .. 生成 Makefile

执行 make 生成目标文件 main

运行 ./main

任务调度开始

task1 每 1s 打印 123

task2 每 2s 打印 456

四、常见问题与排查

在编译或运行 FreeRTOS 示例的过程中,可能会遇到一些常见错误,下面列出典型问题及对应的解决方案。

1. cmake 未找到(cmake: command not found)

执行cmake ..时提示找不到命令,说明系统尚未安装 cmake,或安装后未生效。

sudoaptupdatesudoaptinstallcmake

安装完成后可用以下命令验证版本:

cmake--version

2. g++ 未找到(g++: command not found)

编译过程中提示找不到 g++,说明缺少 C++ 编译器,安装即可:

sudoaptinstallg++

同样可以验证版本:

g++--version

3. make 失败(make: command not found 或编译报错)

如果提示找不到 make,先安装:

sudoaptinstallmake

如果 make 执行过程中报错,常见原因是 cmake 生成 Makefile 时环境不完整。建议先清空 build 目录后重新生成:

cdbuildrm-rf* cmake..make

4. 权限不足(Permission denied)

运行./main时提示权限不足,通常是因为目标文件没有可执行权限,或当前用户对目录无写权限。

给目标文件添加可执行权限:

chmod+x ./main

如果编译过程中因目录权限报错,可对 build 目录授权后重试:

sudochmod-R777build

5. 找不到头文件(os_api.h: No such file or directory)

编译时提示找不到os_api.h,说明当前路径不在编译搜索路径中。请确认已进入build目录执行 cmake,且源码目录结构完整,不要手动移动或删除头文件。

6. 运行后无输出或程序卡住

如果./main运行后没有任何打印,先确认是否已成功生成目标文件,并检查终端是否正常。若程序卡住,可尝试重新编译,或检查代码中任务创建参数(如栈大小 1024 是否足够)。

五、总结

本文从零开始在 Linux 环境下搭建 FreeRTOS 验证平台,并成功编译、运行了一个包含两个任务的示例程序。整个过程可以概括为以下几个关键步骤:

  1. 搭建 Linux 环境:通过精简 Linux 方案快速在 Windows 上搭建验证平台,为后续编译运行提供基础。
  2. 安装编译工具:使用apt安装 cmake 和 g++,这是生成 Makefile 和编译 C++ 代码的前提。
  3. 编译与运行:进入build目录执行cmake ..生成 Makefile,再执行make生成目标文件,最后运行./main观察任务调度输出。

注意事项

  • 源码包务必解压到非中文路径,避免因路径编码问题导致编译失败。
  • 推荐使用独立的build目录进行编译,便于清理中间文件。
  • 遇到编译或运行错误时,可对照「常见问题与排查」一节逐一排查,多数问题源于工具缺失、权限不足或目录结构不完整。

下一步学习建议

  • 深入任务调度:本文示例创建了两个任务,可进一步学习 FreeRTOS 的优先级、时间片轮转、任务状态切换等调度机制,尝试调整优先级和延时观察输出变化。
  • 学习内存管理:FreeRTOS 提供多种内存分配方案(如 heap_1 ~ heap_5),可研究不同方案的适用场景,并尝试在任务中动态申请和释放内存。
  • 探索同步与通信:学习信号量、队列、互斥锁等机制,实现任务间的数据传递与同步。
  • 移植到真实硬件:在模拟环境跑通后,可将工程移植到 STM32 等真实开发板,体验中断、外设驱动与实时性的实际表现。

下面是本文整体流程的概览图:

学习进阶

任务调度

内存管理

同步与通信

移植真实硬件

编译运行

cmake .. 生成 Makefile

make 生成目标文件

./main 运行

环境准备

搭建 Linux 环境

安装 cmake 和 g++

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/14 11:42:04

Matlab飞机三维轨迹可视化工具箱:ECEF坐标系与机体姿态动态渲染

简介&#xff1a;本资源是一个面向计算机、电子信息工程及数学等专业学生的MATLAB三维飞行轨迹可视化工具箱&#xff0c;适用于课程设计、期末大作业或毕业设计中的运动学建模与仿真环节。工具箱提供完整的飞机动力学轨迹生成与三维动态绘图能力&#xff0c;支持多种机型&#…

作者头像 李华
网站建设 2026/9/14 11:39:20

Three.js粒子特效实战:从核心原理到网页落地与性能优化

简介&#xff1a;基于Three.js的粒子特效网页设计源码&#xff0c;面向前端开发者和三维可视化初学者&#xff0c;演示如何用JavaScript与CSS构建动态粒子系统并集成3D模型&#xff0c;适用于个人网站、产品展示等需要增强视觉冲击力的场景。资源共41个文件&#xff0c;容量约6…

作者头像 李华
网站建设 2026/9/14 11:38:52

TDengine 流式计算引擎详解:架构、任务编排与状态容错机制

TDengine 流式计算引擎详解&#xff1a;架构、任务编排与状态容错机制 【免费下载链接】TDengine High-performance, scalable time-series database designed for Industrial IoT (IIoT) scenarios 项目地址: https://gitcode.com/GitHub_Trending/tde/TDengine 本篇基…

作者头像 李华
网站建设 2026/9/14 11:38:07

n8n-mcp 的 n8n_health_check 返回 502 错误怎么排查?

n8n-mcp 的 n8n_health_check 返回 502 错误怎么排查&#xff1f; 【免费下载链接】n8n-mcp A MCP for Claude Desktop / Claude Code / Windsurf / Cursor to build n8n workflows for you 项目地址: https://gitcode.com/GitHub_Trending/n8/n8n-mcp 当 n8n-mcp 通过…

作者头像 李华