e2stdio环境下使用FreeRTOS创建多任务
本文详细介绍了FreeRTOS中线程创建与配置的全过程。主要内容包括:1)通过FSP Configuration界面创建线程并选择堆分配算法;2)分析5种堆分配方案(heap_1至heap_5)的特性及适用场景,其中heap_4为推荐首选;3)配置线程参数(栈大小、优先级等)及内存分配方式;4)代码生成与多任务测试。文章重点对比了不同内存管理方案的优缺点,为嵌入式开发者提供了实用的FreeRTOS
摘要:本文详细介绍了FreeRTOS中线程创建与配置的全过程。主要内容包括:1)通过FSP Configuration界面创建线程并选择堆分配算法;2)分析5种堆分配方案(heap_1至heap_5)的特性及适用场景,其中heap_4为推荐首选;3)配置线程参数(栈大小、优先级等)及内存分配方式;4)代码生成与多任务测试。文章重点对比了不同内存管理方案的优缺点,为嵌入式开发者提供了实用的FreeRTOS线程配置指南,特别强调了堆分配算法的选择策略和常见错误排查方法。
目录
一、创建线程
1.打开FSP Configuration
打开一个FreeRTOS工程,在左侧script中双击打开configuration.xml,就可以进入FSP Configuration界面
2.创建线程
下方找到Stacks,点击打开它
在页面左上角的Threads方框右上角点击New Thread

我这里是已经有三个任务了
3.添加堆分配算法
右边方框的右上角,点击New Stack
找到RTOS,选择堆分配算法

4.堆分配算法的选择
官方提供了 5 种预定义的内存分配算法
heap_1:
- 特性:仅支持内存增长,不支持释放操作(调用vPortFree无效)
- 适用场景:对安全性要求极高,且任务创建后永不销毁的项目
heap_2:
- 特性:支持内存释放,但不进行碎片合并
- 缺点:容易产生大量无法利用的小内存碎片
- 适用场景:任务大小固定且需要频繁创建/销毁的情况
heap_3:
- 特性:封装标准C库的malloc/free实现
- 缺点:执行时间不确定且速度较慢(取决于编译器实现)
- 适用场景:已对标准库进行优化,且对实时性要求不高的项目
heap_4:
- 特性:支持内存碎片合并,可自动整合相邻空闲内存块
- 缺点:需要额外的算法计算开销
- 适用场景:绝大多数FreeRTOS项目的首选方案
heap_5:
- 特性:支持跨多个不连续的RAM区域进行内存分配
- 缺点:配置相对复杂
- 适用场景:需要在非连续内存区域进行分配的特殊需求
二、配置线程
1.配置Common中的General
具体参数可先如下图所示,有需要再更改

2.配置Common中的Memory Allocation
是否支持静态内存分配、堆的大小等,可以按需开启

3.配置Thread
Symbol是线程标志
Name是线程的名字
Stack size是栈的大小(任务复杂的话需要加大)
Priority是优先级
Menory Allocation是线程分配方式,可以选择静态或者动态

4.错误排除
在下列Problems中会显示配置错误原因,比如我这里是名称太长

三、测试多任务
1.生成代码
点击右上角的Generate Project Content可以生成代码

2.线程入口
工程左边找到src,里面每个.c文件都是一个任务的入口

四、总结
- 创建任务,选择堆分配算法(一般选择堆分配算法四)
- 配置Common中的Memory Allocation选择动态还是静态分配内存
- 配置线程名字,标志,优先级等
- 生成代码
openvela 操作系统专为 AIoT 领域量身定制,以轻量化、标准兼容、安全性和高度可扩展性为核心特点。openvela 以其卓越的技术优势,已成为众多物联网设备和 AI 硬件的技术首选,涵盖了智能手表、运动手环、智能音箱、耳机、智能家居设备以及机器人等多个领域。
更多推荐
所有评论(0)