DA1468x
11个月前
发布的xuguodong0点 8回答说嗨,对话框中,
整合算法库后分配内存失败。处理步骤
我们的算法只需要总ram 9kBytes(数据1.5k bss 7.5k)。
设置以下两个参数后,问题仍然存在:Malloc失败。
- 设置configTOTAL_HEAP_SIZE从11200到25 * 1024。
- OS_TASK_CREATE时,将stack值从756设置为1024*22。
我附上了我的分析,请帮助我检查更多。
谢谢。
附件 | 大小 |
---|---|
编译失败的截图 | 699.47 KB |
11个月前
嗨xuguodong,
您可以使用任意大小的堆。如果系统耗尽RAM,链接器将发出一个错误。请参考https://freertos.org/查阅更多有关FreeRTOS的信息。
谢谢,PM_Dialog
11个月前
如下图所示,如果任务栈> 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
11个月前
/*************************************************************************************************\
*内存配置
*/
#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
11个月前
嗨xuguodong,
vApplicationMallocFailedHook()是一个到FreeRTOS的钩子。当没有足够的连续堆可用于尝试分配的内存时,此触发通知应用程序。我建议增加FreeRTOS堆的大小(在custom_config_txt .h文件中的configTOTAL_HEAP_SIZE)到代码编译的最大数量。
谢谢,PM_Dialog