FreeRTOS 之五种内存分配方案(概括总结)

2023-05-16

一.FreeRTOS 之五种内存分配方案

Heap_1:

      (1).在此方案中,实现了基础版本的pcPortMalloc ,而没有实现vPortFree(),因此它适用于从来不会删除任务的应用

      ( 2) 动态分配的内存总是确定的 ,不会产生内存碎片

                                 

Heap_2:

     该方案不同于方案1,它可以进行任务的删除,对空间进行释放,但是,它不能将相邻的两块相对小的空间进行合并,有可能造成内存碎片的问题,该方案在官方的文档中不推荐使用,它被Heap_4所代替

                   

在图中,可以看出将任务释放之后,会有两块不一样大的空间,这是若创建队列,将可能占据原先的栈空间或TCB空间,再将队列删除之后就有可能将空间再变小,之后若删除队列,那么再次创建任务的时候就不能在原来那里开辟空间了,因此造成了内存碎片

所以该方案只适合于频繁删除,创建相同任务的应用

Heap_3:

在此方案中,pcPortMalloc(),vPortFree() 和原先的Malloc(),free()的区别是,前者保证了是线程安全的

Heap_4:

该方案是Heap_2的增强版,可以对可以合并两块相邻的内存空间,使之变大。

在图中我们可以看到在任务空间释放之后,又创建了队列,随之又创建了用户数据,之后,将队列,用户数据删除之后,又是还原回一块大的内存空间,因此该方案被推荐代替Heap_2

Heap_5:

该方案是对Heap_4,进行再次的增强,将不相邻的代码内存空间进行链接使用,变成更大的内存空间。

 

 

ref:

161204_Mastering_the_FreeRTOS_Real_Time_Kernel-A_Hands-On_Tutorial_Guide

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

FreeRTOS 之五种内存分配方案(概括总结) 的相关文章

  • 详解FreeRTOS中的软件定时器

    软件定时器用于让某个任务定时执行 或者周期性执行 比如设定某个时间后执行某个函数 或者每隔一段时间执行某个函数 由软件定时器执行的函数称为软件定时器的回调函数 参考资料 Mastering the FreeRTOS Real Time Ke
  • 基于HAL库的FREERTOS----------二.任务API函数

    任务API函数览概 CUBEMX对 做了API的封装 很多 的函数没有封装到位 可以用原函数调用 任务API函数分别介绍 1 uxTaskPriorityGet 此函数用来获取指定任务的优先级 要使用此函数的话宏 INCLUDE uxTas
  • FreeRTOS config开始的宏

    FreeRTOSConfig h系统配置文件中可以自定义 FreeRTOS h中定义默认值 configAPPLICATION ALLOCATED HEAP 默认情况下FreeRTOS的堆内存是由编译器来分配的 将宏configAPPLIC
  • FreeRTOS系列

    本文主要介绍如何在任务或中断中向队列发送消息或者从队列中接收消息 使用STM32CubeMX将FreeRTOS移植到工程中 创建两个任务以及两个消息队列 并开启两个中断 两个任务 Keyscan Task 读取按键的键值 并将键值发送到队列
  • Freertos中vTaskDelay()是怎么用的

    1 常见的使用场景 void vLED Task void pvParameters while 1 Heartbeat LED vTaskDelay 1000 portTICK RATE MS 说明 上面这段代码的意思是 led翻转后经过
  • 【FreeRTOS开发问题】FreeRTOS内存溢出

    FreeRTOS内存溢出 如下图所示 FreeRTOS编译完成后可以看到 系统提示无法分配内存到堆 Objects Template axf Error L6406E No space in execution regions with A
  • STM32移植FreeRTOS的Tips

    转自 http bbs armfly com read php tid 7140 1 在FreeRTOS的demo文件夹中拷贝对应的FreeRTOSConfig h文件后 需要加入一行 define configUSE MUTEXES 1
  • 【FreeRTOS】队列的使用

    作者主页 凉开水白菜 作者简介 共同学习 互相监督 热于分享 多加讨论 一起进步 专栏资料 https pan baidu com s 1nc1rfyLiMyw6ZhxiZ1Cumg pwd free 点赞 收藏 再看 养成习惯 订阅的粉丝
  • FreeRTOS ------- 任务(task)

    在学习RTOS的时候 个人觉得带着问题去学习 会了解到更多 1 什么是任务 在FreeRTOS中 每个执行线程都被称为 任务 每个任务都是在自己权限范围内的一个小程序 其具有程序入口每个任务都是在自己权限范围内的一个小程序 其具有程序入口通
  • FreeRTOS临界段和开关中断

    http blog sina com cn s blog 98ee3a930102wg5u html 本章教程为大家讲解两个重要的概念 FreeRTOS的临界段和开关中断 本章教程配套的例子含Cortex M3内核的STM32F103和Co
  • freertos————互斥锁

    线程安全 多线程程序处于一个多变的环境 可访问的全局变量和堆数据随时可能被其他的线程改变 多个线程同时访问一个共享数据 可能造成严重的后果 出现问题的是之前移植了一个freemodbus的从站 多个任务访问全局变量保持寄存器区 导致最后读出
  • FreeRTOS,串口中断接收中使用xQueueOverwriteFromISR()函数,程序卡死在configASSERT

    原因 UART的中断优先级设置的太高 高于了configMAX SYSCALL INTERRUPT PRIORITY宏定义的安全中断等级 UART的中断等级小于等于宏定义的优先等级即可
  • stm32f103zet6移植标准库的sdio驱动

    sdio移植 st官网给的标准库有给一个用于st出的评估板的sdio外设实现 但一是文件结构有点复杂 二是相比于国内正点原子和野火的板子也有点不同 因此还是需要移植下才能使用 当然也可以直接使用正点原子或野火提供的实例 但为了熟悉下sdio
  • FreeRTOS死机原因

    1 中断回调函数中没有使用中断级API xxFromISR 函数 xSemaphoreGiveFromISR uart busy HighterTask 正确 xSemaphoreGive uart busy 错误 2 比configMAX
  • freeRTOS出现任务卡死的情况。

    最近在做一个产品二代升级的项目 代码是上一任工程师留下的 很多BUG 而且融合了HAL库和LL库 以及github上下载的GSM源码 很不好用 我这边是将2G模块换成了4G 且添加了单独的BLE模块 因此只在源码的基础上 去除2G和BLE代
  • FreeRTOS轻量级同步--任务通知

    1 简介 在FreeRTOS的配置参数中的configUSE TASK NOTIFICATIONS宏打开 一般RTOS会默认打开 如图1所示 图1 notify宏开关 RTOS在创建任务时 会创建一个32位的通知值ulNotifiedVal
  • 单片机通信数据延迟问题排查

    1 问题说明 笔者在最近的项目中 发现系统的响应延迟较高 经过排查 排除了单片机运行卡死的问题 2 原因分析 具体排查过程这里就不细致说明了 直接给出排查后原因 任务执行周期规划不合理 导致freertos队列发送接收到的命令有延迟 为了便
  • FreeRTOS 配置TICK_RATE_HZ

    我使用的是带有 5 4 版 FreeRTOS 的 MSP430f5438 我有一个有趣的问题 我无法弄清楚 基本上 当我将 configTICK RATE HZ 设置为不同的值时 LED 闪烁得更快或更慢 它应该保持相同的速率 我将 con
  • 如何将 void* 转换为函数指针?

    我在 FreeRTOS 中使用 xTaskCreate 其第四个参数 void const 是传递给新线程调用的函数的参数 void connect to foo void const task params void on connect
  • 防止GCC LTO删除函数

    我使用 GCC ARM Embedded 和 FreeRTOS FreeRTOS具有的功能vTaskSwitchContext 仅在某些情况下使用 内联汇编代码 问题是 当我使用LTO时 GCC不考虑内联汇编代码并认为该函数没有被使用 因此

随机推荐

  • 对于USB Bulk通信发送0包的理解

    写Device USB驱动的时候 xff0c 当Bulk送信发送的数据长度恰好是wMaxPacketSize的整数倍时 xff0c 是否应该发送0包的问题搞得我焦头烂额 查找了好多资料 xff0c 有的说要加 xff0c 这是USB协议的一
  • upload漏洞专题

    一 upload上传绕过专题 后缀检验绕过 1 黑名单检测绕过 1 上传文件重命名 span class token comment 由于只有后缀是可控的 span 所以常见的后缀为php中 php2 php3 php4 php5 phtm
  • Pony语言学习(七)——表达式(Expressions)语法(单篇向)

    一 字面量 xff08 Literals xff09 xff08 一 xff09 Bool值 xff1a 没啥要说的 xff0c 就是true和false x1f44a xff08 二 xff09 数值 xff08 Numeric Lite
  • Pony语言学习(八):引用能力(Reference Capabilities)

    xff08 如果你有更好的翻译 xff0c 请务必联系我 我们需要和Rust术语做到翻译看齐 xff09 一 总览 xff08 特译 xff1a https tutorial ponylang io reference capabiliti
  • Pony语言学习(二):基础类型 之 Class

    写在前面的 xff1a 这次咱们来唠唠Pony的基础类型 xff0c 这里说的基础类型指的不是int string boolean float什么内置数据类型 xff0c 而是Pony中用来定义类型的几种方法 xff0c 分别是 Class
  • 匿名管道和命名管道

    进程间通信 xff08 IPC xff09 每个进程有各自不同的用户地址空间 xff0c 任何一个进程的全局变量在另一个进程中都看不到 所以进程之间要交换数据必须通过内核 xff0c 在内核中开辟一块缓冲区 xff0c 进程1把数据从用户空
  • ROS修改rosbag中话题的frame_id,以及发布坐标在Rviz中与点云融合显示

    ROS修改rosbag中话题的frame id xff0c 以及发布坐标在Rviz中与点云融合显示 读取rosbag xff0c 修改话题frame id与话题名并循环发布 span class token keyword import s
  • 定义类模板,未定义的引用

    在使用类模板的时候 xff0c 将类的申明和定义放在两个文件中 xff0c 在编译的时候出现 XXX未定义的引用 xff0c 即找不到对应的函数实现 解决办法是 xff1a 将类的定以和申明都放在一个头文件中 xff0c 这样就可以避免上述
  • It is a distutils installed project

    方法1 xff1a 方法2 xff1a 直接全局搜索对应文件 xff0c 具体包括 34 package name 34 文件夹 和 34 package name 34 egg info xff0c 找到后直接删除即可 eg sudo f
  • git将当前修改文件生成patch

    应用场景 xff1a 只想将当前文件夹中改动的文件打包成一个patch xff0c 并不想提交相应的代码 执行命令 xff1a git diff nova api openstack compute servers py nova cmd
  • OpenStack--虚拟机操作(挂起、暂停和搁置)

    1 OpenStack虚拟机三种操作 1 1 挂起和恢复 xff08 suspend和resume xff09 挂起 xff1a openstack中的挂起 xff08 suspend xff09 操作是将虚拟机的内存保存到磁盘中 xff0
  • eMMC 里 DDR52 HS200 HS400 等的含义

    eMMC 里 DDR52 HS200 HS400 这些名词指的是不同的速度 DDR52就是最高 52M clock xff0c 数据速率就是 52 x 2 61 104 HS200 就是最高 200M clock xff0c 单通道 xff
  • Libvirt的job机制3--基本原理

    在Job机制简介中介绍了在libvirt中调用接口时如何使用Job机制 xff1b 在条件变量基本原理中介绍了条件变量的一些基本原理 xff0c 这个是Job机制的基础 本文主要介绍Job机制中用到的一些函数 结构体等变量 xff0c 分析
  • libvirt初始化流程分析

    libvirtd daemon初始化流程比较复杂 xff0c 本文对代码流程进行初步分析 xff0c 可能有不对的地方 xff0c 随时会进行更新和补充 总体代码流程 main remote remote deamon c daemonCo
  • OpenStack调试方法总结

    1 利用remote pdb进行调试 下载链接remote pdb 2 0 0 py2 py3 none any whl 虚拟化文档类资源 CSDN下载 from remote pdb import RemotePdb RemotePdb
  • Compute通过Conductor访问数据库方法

    目录 方法注册 实例序列化与反序列化 conductor与数据库交互 Instance类对象与ComputeManager类对象 compute服务的worker数量 这里以instance save函数为例进行说明 方法注册 nova组件
  • oslo_messaging学习系列之二《OpenStack中使用消息队列》

    目录 消息驱动 oslo messaging模块详解 Transport Target xff08 oslo messaging target Target xff09 Server RPC Client RPC Client参数传递 消息
  • PX4日志文件分析

    FlightPlot画图软件 xff1a http www pixhawk com dev flightplot 支持的日志格式 xff1a PX4自动驾驶仪日志 xff08 px4log 由 sdlog2 生成 xff09 APM二进制日
  • 固定翼航模及四旋翼无人机基础

    目录 一 机架 二 电机参数 1 电机的尺寸和KV值 2 KV值与力 桨的关系 三 桨叶参数 1 桨叶的直径和螺距 2 桨叶选配 3 电机与桨叶搭配表 四 电池与电调 五 航模电子设备连线图解 1 固定翼整机 2 多旋翼整机 3 接收机 4
  • FreeRTOS 之五种内存分配方案(概括总结)

    一 FreeRTOS 之五种内存分配方案 Heap 1 1 在此方案中 xff0c 实现了基础版本的pcPortMalloc xff0c 而没有实现vPortFree xff0c 因此它适用于从来不会删除任务的应用 2 动态分配的内存总是确