Other Parts Discussed in Thread: CC1354P10, SYSBIOS, SYSCONFIG
部件号: CC1354P10
主题中讨论的其他器件: SYSBIOS、 SysConfig
您好:
当尝试使用同一 UART 打印 ns_trace 消息和应用温度读数时、我看到系统冻结。
硬件/软件
MCU:CC1354P10
板:LaunchPad(板载 XDS110)
SDK:SimpleLink SDK 8.x
堆栈:Wi-SUN FAN
RTOS:TI-RTOS7/SYSBIOS
UART:UART2 @ 115200
UART 输出通过路由 板载 XDS110 虚拟 COM 端口 (USB CDC) 连接到 PC。
ns_trace 输出单独 正常
-在没有 UART 打印的情况下运行 的温度任务正常
-仅应用程序记录器 即可
温度值时自动重置 当 ns_trace 处于活动状态时 、系统将冻结。
示例:printf(“TEMP:%.1f C\r\n“,温度);
启用此功能后、系统会在引导后立即停止。
看到的最后一条消息:UART 就绪
那么:
- 日程安排器被阻止
- 检测信号 LED 停止
- 未发生硬故障
//ns_trace UART 绑定
ns_trace_init();
ns_trace_set_uart_handle (gUartHandle);
//ns_trace put char 实现
void ns_put_char_blocking (const char ch)
{
If (g_traceUartHandle!= NULL)
{
size_t bytesWritten;
UART2_write (g_traceUartHandle、&ch、1、&bytesWritten);
}
}
观察结果
-UART 打开成功
-仅当两个输出都处于活动状态时才会冻结
-删除温度打印可解决问题
-将 ns_trace 重定向到 ITM、而不是 UART→系统正常运行
可疑原因
我怀疑冻结可能是由以下原因造成的:
- 阻止来自多个上下文的 UART 写入
- UART 驱动器内部锁定
- 信标死锁或优先级反转
- XDS110 VCOM 缓冲和阻塞行为
- 逐字符跟踪输出
我的问题是:
在同一 UART 上使用 ns_trace 和应用程序打印是否安全?
阻止多个任务的 UART 写入是否会导致死锁?
TI UART 驱动程序是否在内部锁定、从而使嵌套写入不安全?
XDS110 USB CDC 缓冲区可以阻止 UART 写入吗?
组合 ns_trace 和应用程序日志的建议架构是什么?
请提供任何指导。
谢谢你。
