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