UART2_WRITE回调递归?

⚠️
嗨,...感谢您来论坛。令人兴奋的消息!我们现在正在迁至我们的新论坛平台,将提供更好的功能,并包含在主对话框网站中。所有帖子和帐户都已迁移。我们现在只接受新论坛上的流量 - 请发布任何新线程https://www.dialog-seminile.com/support.。我们将在未来几天修复错误/优化搜索和标记。
2个帖子/ 0新
最后一篇
Mattisfjallstrom.
离线
最后一次露面:2年10个月前
加入:2017-03-01 01:29.
UART2_WRITE回调递归?

你好,

我在BLE_APP_ALL_IN_ONE示例中使用UART2_WRITE遇到问题。输出工作一段时间,但是它崩溃了。似乎我可以通过插入睡眠和慢速关闭,但最终它仍然失败了。

所以我开始关注代码,似乎在软件中看起来有点奇怪。
在ARCH_CONSOLE.C中我们有以下内容:


静态void UART_CALLBALL(UINT8_T RES)
{
printf_msg * msg = remove_from_list(&printf_msg_list);
delete_msg(msg);

#ifdef cfg_printf_uart2.
UART2_FINISH_TRANSFERS();
#别的
UART_FINISH_TRANSFERS();
#万一

if(printf_msg_list){
char * p = printf_msg_list-> pbuf;
#ifdef cfg_printf_uart2.
UART2_WRITE((UINT8_T *)P,ARCH_STREN(P),UART_CALLBACK);
#别的
UART_WRITE((UINT8_T *)P,ARCH_STREN(P),UART_CALLBALL);
#万一

} 别的
ARCH_RESTORE_SLEEP_MODE();
}

所以在UART_CALLBACK中,我们将UART_CALLBALL致电UART2_WRITE作为参数。我们调用了几个级别的uart_callback。
这真的是一个安全的事情吗?14583没有多少免费RAM,所以这对我来说看起来可能是有问题的。

设备:
mt_dialog.
离线
最后一次露面:2个月1周前
职员
加入:2015-06-08 11:34
嗨Mattisfjallstrom,

嗨Mattisfjallstrom,

ARCH_PRINTF()主要是一个调试模块,是如果您在不为其服务的情况下按下特定量的消息,则设备将最终无法分配更多内存,并且由于内存分配故障导致的PLATFORP_RESET将最终启动。存在此模块的原因存在(和存储消息)是我们希望确保在XTal16结算并激活时使用UART打印,为什么我们存储任何UART数据并在设备实际打印时打印它们。

谢谢mt_dialog.