欢迎光临
我们一直在努力

e2stdio环境下使用FreeRTOS创建多任务

摘要:本文详细介绍了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文件都是一个任务的入口

四、总结

  • 创建任务,选择堆分配算法(一般选择堆分配算法四)
  • 配置Common中的Memory Allocation选择动态还是静态分配内存
  • 配置线程名字,标志,优先级等
  • 生成代码
  • 赞(0)
    未经允许不得转载:171主机测评 » e2stdio环境下使用FreeRTOS创建多任务
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址