集成算法库后分配内存失败

了解更多常见问题教程

9个职位/0个新职位
最后一篇文章
徐国栋
离线
最后一次见到:1个月2周前
已加入:2020-06-04 13:34
集成算法库后分配内存失败

嗨,对话,

集成算法库后分配内存失败

我们的算法只需要9千字节的内存(数据1.5千字节,bss 7.5千字节)。

设置了以下两个参数后,问题仍然存在:Malloc fail。

  1. 设置配置总堆大小从11200到25*1024.
  2. 创建操作系统任务时,将堆栈从756设置为1024*22。

我附上我的分析,请帮我检查更多。

谢谢。

附件:
设备:
PM\U对话框
离线
最后一次见到:8小时28分钟前
工作人员
已加入:2018-02-08 11:03
你好,徐国栋,

你好,徐国栋,

vaApplicationAllocFailedHook()是FreeRTOS的一个钩子。当没有足够的连续堆可用于尝试的内存分配时,此hoot会通知应用程序。我建议将FreeRTOS堆的大小(custom\u config\u XXXX.h文件中的configTOTAL\u heap\u size)增加到代码编译的最大值。

谢谢,下午好

徐国栋
离线
最后一次见到:1个月2周前
已加入:2020-06-04 13:34
嗨,对话,

嗨,对话,

FreeRTOS堆的最大大小是多少(configTOTAL\u heap\u size)?

任务堆栈大小的最大值是多少?

谢谢。

PM\U对话框
离线
最后一次见到:8小时28分钟前
工作人员
已加入:2018-02-08 11:03
你好,徐国栋,

你好,徐国栋,

可以使用任意大的堆大小。如果系统内存不足,链接器将发出错误。请参阅https://freertos.org/有关FreeRTOS的更多信息。

谢谢,下午好

徐国栋
离线
最后一次见到:1个月2周前
已加入:2020-06-04 13:34
嗨,对话,

嗨,对话,

将任务堆栈大小设置为>1024*10,错误:将发生分配内存失败。

谢谢。

PM\U对话框
离线
最后一次见到:8小时28分钟前
工作人员
已加入:2018-02-08 11:03
你好,徐国栋,

你好,徐国栋,

你能附上一张截图吗?您使用的配置总堆大小是多少?

谢谢,下午好

徐国栋
离线
最后一次见到:1个月2周前
已加入:2020-06-04 13:34
如下所示,如果任务堆栈>10

如下所示,如果任务堆栈>10*1024,则内存分配失败。

/*************************************************************************************************\
*内存特定配置
*/
#定义dg\u configQSPI\u CACHED\u OPTIMAL\u RETRAM\u 0\u SIZE\u AE(64*1024)
#定义dg\u configQSPI\u CACHED\u RAM\u SIZE\u AE(32*1024)
#定义dg\u configQSPI\u CACHED\u RETRAM\u 0\u SIZE\u AE(96*1024)

#定义dg\u configQSPI\u CACHED\u RAM\u大小(56*1024)
#定义dg\u configQSPI\u CACHED\u RETRAM\u 0\u大小(72*1024)
#定义dg\配置QSPI\代码\大小(256*1024)

OS\u TASK\u CREATE(“PXP Reporter”,/*分配给任务的文本名称,例如
只调试;内核不使用。*/
pxp\u reporter\u task,/*实现任务的函数。*/
NULL,/*传递给任务的参数。*/
#如果(dg\u configDISABLE\u BACKGROUND\u FLASH\u OPS==1)
512,/*要分配给
任务的堆栈。*/
#其他
#如果ZSENS\u FUSION\u ALGO
1024*10,/*要分配给
任务的堆栈。*/
#其他
756,
#结束
#结束

徐国栋
离线
最后一次见到:1个月2周前
已加入:2020-06-04 13:34
/****************************

/*************************************************************************************************\
*内存特定配置
*/
#定义dg\u configQSPI\u CACHED\u OPTIMAL\u RETRAM\u 0\u SIZE\u AE(64*1024)
#定义dg\u configQSPI\u CACHED\u RAM\u SIZE\u AE(32*1024)
#定义dg\u configQSPI\u CACHED\u RETRAM\u 0\u SIZE\u AE(96*1024)

#定义dg\u configQSPI\u CACHED\u RAM\u大小(56*1024)
#定义dg\u configQSPI\u CACHED\u RETRAM\u 0\u大小(72*1024)
#定义dg\配置QSPI\代码\大小(256*1024)
/*************************************************************************************************\
*FreeRTOS特定配置
*/
#define OS\u FREERTOS/*定义此项以使用FREERTOS*/
#如果(dg_configUSE_SOC)
#如果已定义(DEBUG\ U SOC)
#define configTOTAL\u HEAP\u SIZE 12300/*这是FreeRTOS的总堆大小*/
#其他
//#define configTOTAL_HEAP_SIZE 11200/*这是FreeRTOS的总堆大小*/
#define configTOTAL\u HEAP\u SIZE 20*1024/*这是FreeRTOS的总堆大小*/
#结束
#其他
#define configTOTAL\u HEAP\u SIZE 11000/*这是FreeRTOS的总堆大小*/
#结束

PM\U对话框
离线
最后一次见到:8小时28分钟前
工作人员
已加入:2018-02-08 11:03
你好,徐国栋,

你好,徐国栋,

系统是否仍然耗尽堆?

谢谢,下午好