⚠️
大家好. .感谢来到论坛。令人兴奋的消息!我们现在正在转移到新的论坛平台的过程中,它将提供更好的功能,并包含在主对话网站。所有的帖子和账号已经迁移。我们现在只接受新论坛的流量-请发布任何新的帖子在//www.xmece.com/support.我们会在接下来的几天修复bug /优化搜索和标记。
2个职位/ 0个新职位
最后发表
mattisfjallstrom
离线
最后看到:3年2个月前
加入:2017-03-01 01:29
uart2_write调递归?

你好,

我在ble_app_all_in_one示例中使用uart2_write有问题。输出工作一段时间,但随后崩溃。我似乎可以通过插入睡眠来让它工作得更好,但最终还是失败了。

所以我开始遵循代码,似乎软件中有一个递归,对我来说有点奇怪。
在arch_console.c中,我们有以下内容:


Static void uart_callback(uint8_t res)

Printf_msg * MSG = remove_from_list(&printf_msg_list);
delete_msg(味精);

# ifdef CFG_PRINTF_UART2
uart2_finish_transfers ();
其他#
uart_finish_transfers ();
# endif

如果(printf_msg_list) {
char *p = printf_msg_list->pBuf;
# ifdef CFG_PRINTF_UART2
Uart2_write ((uint8_t *)p, arch_strlen(p), uart_callback);
其他#
Uart_write ((uint8_t *)p, arch_strlen(p), uart_callback);
# endif

其他}
arch_restore_sleep_mode ();

所以在uart_callback内部,我们用uart_callback作为参数调用uart2_write。再往下几层调用uart_callback。
这样做真的安全吗?14583没有太多的空闲RAM,所以这对我来说可能是个问题。

设备:
MT_dialog
离线
最后看到:6个月,4个星期前
工作人员
加入:2015-06-08 34
嗨mattisfjallstrom,

嗨mattisfjallstrom,

arch_printf()主要是一个调试模块,是的,如果你推入特定数量的消息而没有提供它们,设备最终将失败分配更多的内存,是的,它将结束在platform_reset由于内存分配失败。这个模块存在(并存储消息)的原因是,我们希望确保在XTAL16确定并激活时使用UART打印,这就是为什么我们存储任何UART数据并在设备可以实际打印它们时打印它们。

由于MT_dialog