zoukankan      html  css  js  c++  java
  • 再论FreeRTOS中的configTOTAL_HEAP_SIZE

    关于任务栈和系统栈的基础知识,可以参考之前的随笔。(点击这里

    这里再次说明:#define configTOTAL_HEAP_SIZE ( ( size_t ) ( 17 * 1024 ) )

    这个宏,官方文档解释:

    FreeRTOS堆中可用的RAM总量。

    只有在configSUPPORT_DYNAMIC_ALLOCATION设置为1并且应用程序使用FreeRTOS源代码下载中提供的一个示例内存分配方案时(heap1,2,3,4,5.c源文件,这里我使用的是heap4),才会使用此值。有关详细信息,请参阅内存分配部分。

    我全局搜索工程,并没有发现configSUPPORT_DYNAMIC_ALLOCATION这个宏,然后,直接看官方解释:

     现在我们知道了,这个宏不定义,默认是1,即启用状态。

    具体的configTOTAL_HEAP_SIZE 需要分配多大,确实没有一个简单可行的方式,但是,当我们遇到程序莫名崩溃或者卡死的时候,先试试把configTOTAL_HEAP_SIZE 的大小增大试试看。就在上一个项目中,我增加了一个任务中的几百行代码,然后发现我的系统会出现崩溃情况,我试着把

    任务栈从512提高到1024,依然还是出现崩溃,再然后,我明白不是任务栈的大小问题,但应该就是某个内存分配出了问题(当然,这是建立在我已经检查过代码没有非法操作的情况下),最后,我试着把configTOTAL_HEAP_SIZE 改成20* 1024,果然,立马系统正常运行了。

    这说明确实是RAM不够用了,特此记录。

    期间还遇到了一个问题,keil 5.20中,使用结构体内存强制一字节对齐之后,出现访问数据错误。一个全局变量的结构体,第一个元素默认是0,但是我取出来访问居然是一个随机值。例子和具体解决方法待续。。。

  • 相关阅读:
    如何理解cat的输入输出重定向
    Vagrant网络设置
    Vagrant入门
    设计模式的原则
    单例模式
    LRU 实现缓存
    java注解
    java8---lambda表达式
    JUC--Callable 以及Lock同步锁
    JUC--闭锁 CountDownLatch
  • 原文地址:https://www.cnblogs.com/yangguang-it/p/8419525.html
Copyright © 2011-2022 走看看