你好,
我试图在项目ble_app_profile中添加3个特征到服务CUST1。当我在Training_02_custom_profile_example_v1.0附加文件中写入特征时,我成功地添加了一个特征,但当我执行完全相同的过程添加更多特征(并且项目编译良好)时,函数wrap_platform_reset中的项目中断。为什么会这样?每项服务的特征数量有限制吗?
问候,
关键词:
设备:
嗨,盎司,
发生Wrap_platform_reset()的最明显原因是由于内存分配故障,这意味着您的软件中存在内存泄漏,您可以在某处分配数据,并且您从未释放它们(您可以在参数错误中验证函数,应该是reset_mem_alloc_fail)。为应用程序选择最佳堆,您应该通过更改DA1458x_config_Advanced.h文件中的堆的大小进行实验。
谢谢,PM_DIALOG.
嗨PM_Dialog,
感谢您的回复,我不使用任何睡眠模式,因此似乎定义了以下行:
#define reinit_descript_buf 1 // 0 // 0:保持在逆行状态,1:需要重新init(使用延长睡眠时设置为0)
#定义USE_MEMORY_MAP EXT_SLEEP_SETUP
而堆只能在CFG_MEM_MAP_DEEP_SLEEP模式下定义。
以下是在da1458x_config_advanced.h文件中编写的内容:
如果选择CFG_MEM_MAP_EXT_SLEEP或未选择睡眠模式,则会自动配置堆内存大小
您是否有任何建议来解决这个问题?
在您的回复中,您提到我可以验证是否在函数的参数错误中,这应该是reset_mem_alloc_fail。
你的意思是哪个函数?
问候,
盎司
嗨,盎司,
在一个服务中添加更多的特性没有任何限制,例如添加10个特性也没有任何问题。添加任何Services/Chars时,内存将从DB_HEAP_SZ分配。所以,wrap_platform_reset命中的原因是由于内存分配,正如我在之前的文章中提到的。尝试从da1458x_config_advanced定义并增加DB_HEAP_SZ,例如,您可以将值设置为2048。关于RESET_MEM_ALLOC_FAIL,请查看arch.h头文件中wrap_platform_reset()函数的注释。
谢谢,PM_DIALOG.
嗨PM_Dialog,
我喜欢你说和它有效,但我的下一步是创建第三服务,所以我做了写的https://support.dialog-semiconductor.com/forums/post/dialog-smartbond-bl..。
我添加了第二个服务,就像在这个指南中写的,但当我做了第三个服务,我得到了以下消息错误。
我怀疑它发生的原因是相同的,因为当我把下一行放到注释中:
{TASK_CUSTS1,
custs1_att_db,
CUST1_IDX_NB,
#如果(BLE_APP_PRESENT)
app_custs1_create_db app_custs1_enable,
其他#
空,空,
#万一
custs1_init,null.
},
在cust_prf_funcs数组中,它看起来我可以编译代码。
你能帮我找出这个问题,还是有更好的建议?
问候,
盎司
Mantioned错误:
.\ \ \ \ \ \ \ \ \ \sdk\common_project_files\da1458x_scatter_config.h:错误:L6406E:执行区域中没有空间与。any选择器匹配custs1.o(.constdata)。
。\ .. \ .. \ .. \ .. \ .. \ .. \ .. \。
。\ .. \ .. \ .. \ .. \ .. \ .. \ ... \ sdk \ common_project_files \ da1458x_catter_config.h:错误:l6406e:没有执行区域的空间.Anany选择器匹配app_diss_task.o(.constdata)。
.\ \ \ \ \ \ \ \ \ \sdk\common_project_files\da1458x_scatter_config.h:错误:L6406E:执行区域中没有空间与。any选择器匹配custs3.o(.constdata)。
。\ .. \ .. \ .. \ .. \ .. \ .. \。\ sdk \ common_project_files \ da1458x_catter_config.h:错误:l6406e:与执行区域中没有空间.Anany选择器匹配user_profile.o(.constdata)。
。\ .. \ .. \ .. \ .. \ .. \ .. \。\。
。\ .. \ .. \ .. \ .. \ .. \ .. \。\ .. \。
.\ \ \ \ \ \ \ \ \ \sdk\common_project_files\da1458x_scatter_config.h:错误:L6406E:执行区域中没有空间与。any选择器匹配gapc_task.obj(.constdata)。
.\ \ \ \ \ \ \ \ \sdk\common_project_files\da1458x_scatter_config.h:错误:L6406E:执行区域中没有空间与。any选择器匹配gpio.o(.constdata)。
.\ \ \ \ \ \ \ \ \ \sdk\common_project_files\da1458x_scatter_config.h:错误:L6406E:执行区域中没有空间与。any选择器匹配usercusts3_def.o(.conststring)。
.\ \ \ \ \ \ \ \ \ \sdk\common_project_files\da1458x_scatter_config.h:错误:L6406E:执行区域中没有空间与。any选择器匹配mvars.o(.data)。
.\ \ \ \ \ \ \ \ \ \sdk\common_project_files\da1458x_scatter_config.h:错误:L6406E:执行区域中没有空间与。any选择器匹配mvars.o(.data)。
。\ .. \ .. \ .. \ .. \ .. \。\。
。\ .. \ .. \ .. \ .. \ .. \ .. \。
.\ \ \ \ \ \ \ \ \ \sdk\common_project_files\da1458x_scatter_config.h:错误:L6407E:聚合大小0x84字节的节无法放入任何选择器(s)。
没有足够的信息来生成Symdefs文件。
没有足够的信息来生成一个反馈文件。
没有足够的信息来列出图像符号。
没有足够的信息来列出图像映射中的加载地址。
完成:4个信息,0警告和15条错误消息。
”。\ out_580 \ ble_app_profile_580。axf" - 15个错误,1个警告。
嗨,盎司,
似乎从分散文件中分配的空间不够。对您的问题的一个可能的解决方案是重新排列scatterfile,以便能够执行更大的应用程序。我强烈建议你阅读一个论坛过去的帖子,在那里你可以找到适当的步骤,以重新安排散点文件。请点击下面的链接:
https://support.dialog-semiconductor.com/how-build-program-code-larger-32kb
正如在此帖子中提到的那样,您可以从我们的支持门户中找到有关UM-B-011文档中的散点文件的更多信息。您能够从下面的链接下载此文档:
https://support.dialog-semiconductor.com/resource/um-b-011-da14580-memory-map-and-scatter-file
https://support.dialog-seminile.com/resource/um-b-011-da14580-memory-map-excel-tool.
我建议您尝试一下,如果您有任何其他问题,或者您的问题尚未解决,请回复我。
谢谢,PM_DIALOG.
嗨PM_Dialog,
感谢您的回复,我将优化级别更改为3,现在似乎它正常工作。这是一个在如此高的优化水平工作的问题吗?
问候,
盎司
嗨,盎司,
高优化级别,例如O0,增加应用程序的大小,因此从散射文件分配的空间可能足够了。很高兴你识上你的问题。我想让你知道,如果你发现上述任何答案有用请标记其中一个接受。
谢谢,PM_DIALOG.