嗨,对话框中,
整合算法库后分配内存失败。处理步骤
我们的算法只需要总ram 9kBytes(数据1.5k bss 7.5k)。
设置以下两个参数后,问题仍然存在:Malloc失败。
我附上了我的分析,请帮助我检查更多。
谢谢。
嗨xuguodong,
vApplicationMallocFailedHook()是一个到FreeRTOS的钩子。当没有足够的连续堆可用于尝试分配的内存时,此触发通知应用程序。我建议增加FreeRTOS堆的大小(在custom_config_txt .h文件中的configTOTAL_HEAP_SIZE)到代码编译的最大数量。
谢谢,PM_Dialog
什么是FreeRTOS堆的最大大小(configTOTAL_HEAP_SIZE)?
任务栈的最大大小是多少?
您可以使用任意大小的堆。如果系统耗尽RAM,链接器将发出一个错误。请参考https://freertos.org/查阅更多有关FreeRTOS的信息。
设置任务栈大小为>1024*10,错误:将发生分配内存失败。
你能附上一张截图吗?您正在使用的configTOTAL_HEAP_SIZE是什么?
如下图所示,如果任务栈> 10*1024,则内存分配失败。
/*************************************************************************************************\*内存配置*/#define dg_configQSPI_CACHED_OPTIMAL_RETRAM_0_SIZE_AE (64 * 1024)#define dg_configQSPI_CACHED_RAM_SIZE_AE (32 * 1024)#define dg_configQSPI_CACHED_RETRAM_0_SIZE_AE (96 * 1024) #define dg_configQSPI_CACHED_RETRAM_0_SIZE_AE
#define dg_configQSPI_CACHED_RAM_SIZE (56 * 1024)#define dg_configQSPI_CACHED_RETRAM_0_SIZE (72 * 1024)#define dg_configQSPI_CODE_SIZE (256 * 1024)
OS_TASK_CREATE("PXP Reporter", /*分配给任务的文本名称,for调试;不被内核使用。*/pxp_reporter_task, /*实现任务的函数。*/NULL, /*传递给任务的参数。*/#if (dg_configDISABLE_BACKGROUND_FLASH_OPS == 1) / /输出512, /*分配给对象的字节数任务堆栈。*/其他##如果ZSENS_FUSION_ALGO1024*10, /*分配给对象的字节数任务堆栈。*/其他#756年,# endif# endif
#define dg_configQSPI_CACHED_RAM_SIZE (56 * 1024)#define dg_configQSPI_CACHED_RETRAM_0_SIZE (72 * 1024)#define dg_configQSPI_CODE_SIZE (256 * 1024)/*************************************************************************************************\* FreeRTOS的配置*/#define OS_FREERTOS /*使用FreeRTOS */#如果(dg_configUSE_SOC)#如果定义(DEBUG_SOC)#define configTOTAL_HEAP_SIZE 12300 /*这是FreeRTOS总堆大小*/其他#//这是FreeRTOS的堆大小*/#define configTOTAL_HEAP_SIZE 20*1024 /*这是FreeRTOS总堆大小*/# endif其他##define configTOTAL_HEAP_SIZE 11000 /*这是FreeRTOS的总堆大小*/# endif
系统是否仍然用完堆?
嗨xuguodong,
vApplicationMallocFailedHook()是一个到FreeRTOS的钩子。当没有足够的连续堆可用于尝试分配的内存时,此触发通知应用程序。我建议增加FreeRTOS堆的大小(在custom_config_txt .h文件中的configTOTAL_HEAP_SIZE)到代码编译的最大数量。
谢谢,PM_Dialog
嗨,对话框中,
什么是FreeRTOS堆的最大大小(configTOTAL_HEAP_SIZE)?
任务栈的最大大小是多少?
谢谢。
嗨xuguodong,
您可以使用任意大小的堆。如果系统耗尽RAM,链接器将发出一个错误。请参考https://freertos.org/查阅更多有关FreeRTOS的信息。
谢谢,PM_Dialog
嗨,对话框中,
设置任务栈大小为>1024*10,错误:将发生分配内存失败。
谢谢。
嗨xuguodong,
你能附上一张截图吗?您正在使用的configTOTAL_HEAP_SIZE是什么?
谢谢,PM_Dialog
如下图所示,如果任务栈> 10*1024,则内存分配失败。
/*************************************************************************************************\
*内存配置
*/
#define dg_configQSPI_CACHED_OPTIMAL_RETRAM_0_SIZE_AE (64 * 1024)
#define dg_configQSPI_CACHED_RAM_SIZE_AE (32 * 1024)
#define dg_configQSPI_CACHED_RETRAM_0_SIZE_AE (96 * 1024) #define dg_configQSPI_CACHED_RETRAM_0_SIZE_AE
#define dg_configQSPI_CACHED_RAM_SIZE (56 * 1024)
#define dg_configQSPI_CACHED_RETRAM_0_SIZE (72 * 1024)
#define dg_configQSPI_CODE_SIZE (256 * 1024)
OS_TASK_CREATE("PXP Reporter", /*分配给任务的文本名称,for
调试;不被内核使用。*/
pxp_reporter_task, /*实现任务的函数。*/
NULL, /*传递给任务的参数。*/
#if (dg_configDISABLE_BACKGROUND_FLASH_OPS == 1) / /输出
512, /*分配给对象的字节数
任务堆栈。*/
其他#
#如果ZSENS_FUSION_ALGO
1024*10, /*分配给对象的字节数
任务堆栈。*/
其他#
756年,
# endif
# endif
/*************************************************************************************************\
*内存配置
*/
#define dg_configQSPI_CACHED_OPTIMAL_RETRAM_0_SIZE_AE (64 * 1024)
#define dg_configQSPI_CACHED_RAM_SIZE_AE (32 * 1024)
#define dg_configQSPI_CACHED_RETRAM_0_SIZE_AE (96 * 1024) #define dg_configQSPI_CACHED_RETRAM_0_SIZE_AE
#define dg_configQSPI_CACHED_RAM_SIZE (56 * 1024)
#define dg_configQSPI_CACHED_RETRAM_0_SIZE (72 * 1024)
#define dg_configQSPI_CODE_SIZE (256 * 1024)
/*************************************************************************************************\
* FreeRTOS的配置
*/
#define OS_FREERTOS /*使用FreeRTOS */
#如果(dg_configUSE_SOC)
#如果定义(DEBUG_SOC)
#define configTOTAL_HEAP_SIZE 12300 /*这是FreeRTOS总堆大小*/
其他#
//这是FreeRTOS的堆大小*/
#define configTOTAL_HEAP_SIZE 20*1024 /*这是FreeRTOS总堆大小*/
# endif
其他#
#define configTOTAL_HEAP_SIZE 11000 /*这是FreeRTOS的总堆大小*/
# endif
嗨xuguodong,
系统是否仍然用完堆?
谢谢,PM_Dialog