摘要:本文详细介绍了FreeRTOS中线程创建与配置的全过程。主要内容包括:1)通过FSP Configuration界面创建线程并选择堆分配算法;2)分析5种堆分配方案(heap_1至heap_5)的特性及适用场景,其中heap_4为推荐首选;3)配置线程参数(栈大小、优先级等)及内存分配方式;4)代码生成与多任务测试。文章重点对比了不同内存管理方案的优缺点,为嵌入式开发者提供了实用的FreeRTOS线程配置指南,特别强调了堆分配算法的选择策略和常见错误排查方法。

目录

一、创建线程

1.打开FSP Configuration

2.创建线程

3.添加堆分配算法

4.堆分配算法的选择

二、配置线程

1.配置Common中的General

2.配置Common中的Memory Allocation

3.配置Thread

4.错误排除

三、测试多任务

1.生成代码

2.线程入口

四、总结


一、创建线程

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文件都是一个任务的入口

四、总结

  1. 创建任务,选择堆分配算法(一般选择堆分配算法四)
  2. 配置Common中的Memory Allocation选择动态还是静态分配内存
  3. 配置线程名字,标志,优先级等
  4. 生成代码
Logo

openvela 操作系统专为 AIoT 领域量身定制,以轻量化、标准兼容、安全性和高度可扩展性为核心特点。openvela 以其卓越的技术优势,已成为众多物联网设备和 AI 硬件的技术首选,涵盖了智能手表、运动手环、智能音箱、耳机、智能家居设备以及机器人等多个领域。

更多推荐