如何更改 FreeRTOS 中任务的最大可用堆大小?

2023-12-13

我通过以下方式在任务中创建元素列表:

        l = (dllist*)pvPortMalloc(sizeof(dllist));

dlllist 有 32 字节大。 我的嵌入式系统有 60kB SRAM,所以我希望系统可以轻松处理我的 200 个元素列表。我发现在为 8 个元素分配空间后,系统在第 9 个 malloc 函数调用(256byte+)时崩溃。

如果可能的话,我可以在哪里更改 freeRTOS 内的堆大小? 我可以以某种方式请求堆大小的当前状态吗? 我在文档中找不到此信息,因此我希望有人可以提供有关此问题的一些见解。 提前致谢!


(是 - FreeRTOS pvPortMalloc() 返回 void*。)

如果您有 60K 的 SRAM,并且 configTOTAL_HEAP_SIZE 很大,那么在分配 256 字节后不太可能耗尽堆unless你手头几乎没有剩下任何堆。许多 FreeRTOS 演示将继续创建对象,直到使用所有堆,因此如果您的应用程序基于其中之一,那么在执行代码之前堆将不足。您可能还做过一些事情,例如通过创建具有巨大堆栈的任务来耗尽堆空间的负载。

heap_4 和 heap_5 将合并相邻的块,这将尽可能减少碎片,但我认为这不会成为您的问题 - 特别是当您没有提到在任何地方释放任何内容时。

除非您使用 heap_3.c(它只是使标准 C 库 malloc 和 free 线程安全),否则您可以调用 xPortGetFreeHeapSize() 来查看您有多少可用堆。您还可以使用 xPortGetMinimumEverFreeHeapSize() 来查询您距离耗尽堆的程度。更多信息:http://www.freertos.org/a00111.html

您还可以定义 malloc() 失败挂钩(http://www.freertos.org/a00016.html) 以获得 pvPortMalloc() 返回 NULL 的即时通知。

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

如何更改 FreeRTOS 中任务的最大可用堆大小? 的相关文章

  • 有关 CMake 错误的问题:没有为目标提供源

    我正在尝试使用 cmake 和 eclipse 将 FreeRtos 添加到我的项目中 但出现错误 我运行的是 debian 10 我的 cmake 版本是 3 13 4 cmake 的文件可以在以下位置找到这个 git 仓库 https
  • JVisualVM/JConsole 中的 System.gc() 与 GC 按钮

    我目前正在测试处理 XML 模式的概念验证原型 并围绕一个非常消耗内存的树自动机外部库 我已经获得了源代码 构建 我想绘制 真实峰值 堆 随着模式大小的增加 不同运行的内存消耗 使用的指标符合我的目的并且不会影响问题 或者至少是它的合理近似
  • 如何释放字符指针数组?

    我使用此方法将列表中的值转换为数组 以便在 execvp 系统调用中使用 char list2argarray struct shellvalue values int count char array char malloc count
  • Android SoundPool 堆限制

    我正在使用 SoundPool 加载多个声音剪辑并播放它们 据我所知 它的功能 100 正确 但在 load 调用期间 我的日志中充斥着以下内容 06 09 11 30 26 110 ERROR AudioCache 23363 Heap
  • 为什么我不应该对不是由 malloc() 分配的变量调用 free() ?

    我在某处读到 使用它是灾难性的free删除不是通过调用创建的对象malloc 这是真的 为什么 这是未定义的行为 永远不要尝试它 让我们看看当您尝试时会发生什么free 自动变量 堆管理器必须推断出如何获取内存块的所有权 为此 它要么必须使
  • 修改二维数组的malloc策略,使malloc成功

    我们最近收到一份报告 称我们的应用程序偶尔会无法运行 我找到了问题代码 struct ARRAY2D long col int numRows 800000 int numCols 300 array ARRAY2D malloc numR
  • memcpy 到动态存储结构安全吗?

    Context 我正在审查一些代码 这些代码从 IO 描述符接收数据到字符缓冲区 对其进行一些控制 然后使用接收到的缓冲区的一部分来填充结构 突然想知道是否可能涉及严格的别名规则违规 这是一个简化版本 define BFSZ 1024 st
  • 用于嵌入式系统的简约人类可读序列化格式解析器

    By 人类可读的序列化格式 I mean YAML JSON INI或喜欢 请注意 XML对于我的目的来说太冗长而且太不方便 所以让我们把它作为最后的手段 格式应将数据存储为 命名键 值 配对并允许嵌套和数组 不过 缺少数组并不重要 此外
  • ARM Cortex-M3 启动代码

    我试图了解 STM32 微控制器的 Keil realview v4 附带的初始化代码是如何工作的 具体来说 我试图了解堆栈是如何初始化的 In the 文档 http infocenter arm com help index jsp t
  • 嵌入式linux编写AT命令

    我在向 GSM 模块写入 AT 命令时遇到问题 当我使用 minicom b 115200 D dev ttySP0 term vt100 时它工作完美 但我不知道如何在 C 代码中做同样的事情 我没有收到任何错误 但模块对命令没有反应 有
  • 在 Windows Vista 和 Windows 7 上使用 HEAP_NO_SERIALIZE 的堆内存函数速度减慢约 100 倍的原因

    我正在尝试追踪 Windows Vista 和 Windows 7 中堆内存功能的巨大减慢 我没有在任何服务器版本上进行测试 这种情况在 Windows XP 上根本不会发生 只会在 Microsoft 较新的操作系统上发生 我最初在 Wi
  • Java 堆分析因 SIGABRT 崩溃

    我正在尝试分析由 C 编写的方法分配并插入的本机内存JVM通过JNI 我安装了 valgrind version valgrind 3 13 0 并尝试使用以下选项运行 JVM valgrind tool massif massif out
  • 内存分配/释放瓶颈?

    在典型的实际程序中 内存分配 释放的瓶颈有多大 欢迎来自性能通常很重要的任何类型的程序的答案 malloc free 垃圾收集的正确实现是否足够快 以至于它只是少数极端情况下的瓶颈 或者大多数性能关键型软件会从尝试减少内存分配量或拥有更快的
  • 如何查找 Java 应用程序中的内存泄漏

    这是我上一个问题的后续问题HERE https stackoverflow com questions 55427497 我在我的 Java 应用程序中目睹了内存泄漏 最初 我认为泄漏来自我的应用程序的服务器组件 但根据其他人的建议 事实并
  • 在 C/C++ 中除了使用 % (模数)之外还有其他选择吗?

    我曾经在某处读到 模数运算符在小型嵌入式设备 例如没有整数除法指令的 8 位微控制器 上效率低下 也许有人可以证实这一点 但我认为差异比整数除法运算慢 5 10 倍 除了保留计数器变量并在 mod 点手动溢出到 0 之外 还有其他方法可以做
  • “sizeof”对不完整类型列表结构 C 的无效应用

    我正在尝试实现一种处理页面错误的替换算法 因此 我尝试使用 malloc 创建一个循环链表 但出现以下错误 无效的应用程序sizeof to incomplete typepageInMemory 以下是代码 typedef struct
  • 跨 dll 边界的内存分配和释放

    我知道在一个 dll 中进行内存分配然后在另一个 dll 中释放内存可能会导致各种问题 尤其是与 CRT 相关的问题 当涉及到导出 STL 容器时 此类问题尤其成问题 我们之前遇到过此类问题 在编写与我们的库链接的自定义 Adob e 插件
  • 读取STM32 MCU SPI数据寄存器的值

    有很多类似的问题 但似乎没有一个问题完全相同 我正在将 STML4 MCU 连接到 6 轴传感器 LSM6DS3 我已经成功地在 I2C 中实现了所有内容 但想要 SPI 的额外速度 和 DMA 如果我能让这些第一步工作起来的话 因此 第一
  • 清理堆分配对象的良好实践或约定?

    我正在学习C 我有 C C ObjC 背景 相当高级的语言 在 C 或 ObjC 上 作为函数或方法的结果返回堆分配的对象是很简单的 因为对象的清理是受管理的 按照惯例 会在适当的时候销毁 但我不知道在 C 中应该如何处理这个问题 例如 s
  • 尝试了解 ARM 二进制映像中的加载内存地址 (LMA) 和二进制文件偏移量

    我在一家ARM 皮质 M4 STM32F4xxxx 我试图了解二进制文件 elf and bin 在内存中构建并闪存 特别是关于内存位置 具体来说 我不明白的是LMA从实际的二进制文件偏移量进行 翻译 让我用一个例子来解释一下 我有一个 e

随机推荐