堆尺寸太小,不能和uart?!

⚠️
嗨,...感谢您来论坛。令人兴奋的消息!我们现在正在迁至我们的新论坛平台,将提供更好的功能,并包含在主对话框网站中。所有帖子和帐户都已迁移。我们现在只接受新论坛上的流量 - 请发布任何新线程https://www.dialog-seminile.com/support.。我们将在未来几天修复错误/优化搜索和标记。
5个帖子/ 0新
最后一篇
ethsiplab.
离线
最后一次露面:4个月1周前
加入:2019-09-13 12:58
堆尺寸太小,不能和uart?!

你好呀

我尝试执行以下操作:我使用了BLE_PERITELAL演示和激活的CONFIG_RETARGAR以便能够在UART上使用PRINTF。代码编译,但是在执行时,没有任何工作。使用调试器,我发现了,程序正在使用Assert_error,显然是因为_heap_size太小了。

(init_da1469x.c中的函数* _sbrk())

我增加了configtotal_heap_size,没有效果。我究竟做错了什么?

谢谢你的帮助!

设备:
PM_DIALOG.
离线
最后一次露面:1天21小时前
职员
加入:2018-02-08 11:03
嗨Ethsiplab,

嗨Ethsiplab,

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

谢谢,PM_DIALOG.

ethsiplab.
离线
最后一次露面:4个月1周前
加入:2019-09-13 12:58
嗨PM_DIALOG.

嗨PM_DIALOG.

我已经增加了System_Init和BLE_PERITELAL_TASK(在BLE_PERITELAL_TASK_WORD_WORD和CONFIGTOTAL_HEAP_SIZE到30000的任务大小,以便为PRINTF(激活的CONFIG_RETARGET)住宿。在调试模式下,没有达到断点(即使在Main()的开头),如果我停止执行,则程序陷入函数* _sbrk(int增量)中的init_da1469x.c中

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

void * _sbrk(Int Incl)
{
uint8_t * newheapstart;

if(heapend + cont>&__ heaplimit){
/ *击中此操作,意味着_heap_size的值太小。
*此时Intr的值在Storage_incr中。通过检查等式
*上面,确定缺失的空间很简单。
* /
Volatile Int Store_Incr __Unused;

storage_incr = Inc;
assert_error(0);// <==在这里陷入困境

errno = enomem;
返回(void *) - 1;
}

newheapstart = heapend;
heapend + = Inc;

返回newheapstart;
}

PM_DIALOG.
离线
最后一次露面:1天21小时前
职员
加入:2018-02-08 11:03
嗨Ethsiplab,

嗨Ethsiplab,

这意味着您应该增加__heap_size,否则,它将触发函数_sbrk中的assert_error。我建议您更改BSP_Defaults.h中__heap_size的值。

谢谢,PM_DIALOG.

ethsiplab.
离线
最后一次露面:4个月1周前
加入:2019-09-13 12:58
你好,

你好,

谢谢您的帮助。如果有人遇到这个:我从/sdk/config/bsp_memory_defaults.h中增加__heap_size.h从0x0700到0x0800,现在一切都以它的方式工作。