堆大小对ble和uart来说太小?!

⚠️
大家好. .谢谢你来到论坛。令人兴奋的消息!我们现在正在转移到新的论坛平台,它将提供更好的功能,包含在主对话网站中。所有岗位和账户都已迁移。我们现在只接受新论坛的流量-请在上面发布任何新帖子//www.wsdof.com/support.我们将在未来几天修复bug /优化搜索和标记。
5个职位/ 0个新
最后发表
ethsiplab
离线
最后看到:三个月三个星期前
加入:2019-09-13 12:58
堆大小对ble和uart来说太小?!

大家好

我尝试做以下工作:我使用ble_peripheral演示和激活CONFIG_RETARGET,以便能够在UART上使用printf。代码编译后,但是在执行时,什么都不起作用。使用调试器,我发现,程序正在使用一个ASSERT_ERROR显然是因为_HEAP_SIZE太小。

(在函数*_sbrk()在init_da1469x.c)

我增加了configTOTAL_HEAP_SIZE,但没有效果。我做错什么了?

谢谢你的帮助!

设备:
PM_Dialog
离线
最后看到:2天6小时前
工作人员
加入:2018-02-08 11:03
嗨ethsiplab,

嗨ethsiplab,

由于您正在使用printf(),我建议您增加任务的大小。请在调试模式下运行代码。你能告诉我代码在哪里卡住了吗?

谢谢,PM_Dialog

ethsiplab
离线
最后看到:三个月三个星期前
加入:2019-09-13 12:58
嗨PM_Dialog

嗨PM_Dialog

我已经增加了system_init和ble_peripheral_task的任务大小(在ble_peripheral的例子中)到2048* OS_STACK_WORD_SIZE和configTOTAL_HEAP_SIZE到30000,以便容纳printf(激活的CONFIG_RETARGET)。在调试模式中,没有达到断点(甚至在main()开始时也没有),如果我停止执行,程序会卡在init_da1469x.c中的函数*_sbrk(int incr)中

在上述函数的来源的评论表明,某个_HEAP_SIZE太小,但我不明白如何使它更大,因为我已经增加了总体堆大小和任务堆栈大小。

void * _sbrk (int增加)

uint8_t * newheapstart;

if (heapend + incr > &__HeapLimit) {
/*点击这个,意味着_HEAP_SIZE的值太小了。
*此时incr的值在stored_incr中。通过检查方程
*,它是直接确定缺少的空间。
*/
volatile int stored_incr __UNUSED;

stored_incr =增加;
ASSERT_ERROR (0);// <==卡在这里

errno = ENOMEM;
返回(void *) 1;

newheapstart = heapend;
heapend + =增加;

返回newheapstart;

PM_Dialog
离线
最后看到:2天6小时前
工作人员
加入:2018-02-08 11:03
嗨ethsiplab,

嗨ethsiplab,

这意味着你应该增加__HEAP_SIZE,否则,它将在函数_sbrk中触发ASSERT_ERROR。我建议您更改bsp_defaults.h中的__HEAP_SIZE的值。

谢谢,PM_Dialog

ethsiplab
离线
最后看到:三个月三个星期前
加入:2019-09-13 12:58
你好,

你好,

谢谢你的帮助。如果有人遇到这个:我增加了__HEAP_SIZE在/sdk/config/bsp_memory_defaults.h从0x0700到0x0800,现在一切工作的方式,它应该。