# 日志输出问题排查

## 问题：LOG_INF 没有出现在 VSCode Serial Monitor

## 可能的原因和解决方案

### 1. 检查日志配置

确保 `prj.conf` 中包含以下配置：

```kconfig
CONFIG_LOG=y
CONFIG_LOG_MODE_IMMEDIATE=y
CONFIG_LOG_DEFAULT_LEVEL=4
CONFIG_LOG_BACKEND_UART=y
CONFIG_UART_CONSOLE=y
```

### 2. 检查设备树配置

确保 `nrf52832dk_nrf52832.overlay` 中配置了 UART：

```dts
&uart0 {
	status = "okay";
	current-speed = <115200>;
	tx-pin = <6>;
	rx-pin = <8>;
};
```

### 3. 检查 VSCode Serial Monitor 设置

在 VSCode 中：
1. 打开 Serial Monitor（按 `Ctrl+Shift+P`，输入 "Serial Monitor"）
2. 选择正确的串口（通常是 `COMx` 或 `/dev/ttyACMx`）
3. 设置波特率为 **115200**
4. 确保连接已建立

### 4. 检查日志级别

确保日志级别设置正确：

```c
LOG_MODULE_REGISTER(main, LOG_LEVEL_DBG);  // 允许所有级别的日志
```

日志级别：
- `LOG_LEVEL_NONE` = 0
- `LOG_LEVEL_ERR` = 1
- `LOG_LEVEL_WRN` = 2
- `LOG_LEVEL_INF` = 3
- `LOG_LEVEL_DBG` = 4

### 5. 使用 RTT 作为替代方案

如果 UART 不工作，可以使用 RTT（Real-Time Transfer）：

1. **配置 RTT**：
```kconfig
CONFIG_LOG_BACKEND_RTT=y
CONFIG_LOG_BACKEND_UART=n
```

2. **使用 J-Link RTT Viewer**：
   - 下载 J-Link RTT Viewer
   - 连接到设备
   - 选择 RTT 通道

### 6. 测试日志输出

在代码中添加简单的测试：

```c
LOG_INF("Test log message");
printk("Test printk message\n");  // 直接使用 printk 测试
```

### 7. 检查硬件连接

- 确保开发板已正确连接
- 检查 USB 线是否正常
- 尝试重新插拔 USB 线

## 常见问题

### Q: 为什么使用 `LOG_MODE_IMMEDIATE=y`？
A: 立即模式确保日志立即输出，不会缓冲。这对于调试很重要。

### Q: 为什么需要 `CONFIG_UART_CONSOLE=y`？
A: 这会将 UART 配置为系统控制台，日志会输出到控制台。

### Q: 如何知道日志是否真的在输出？
A: 可以尝试：
1. 使用 `printk()` 直接输出（不经过日志系统）
2. 使用 RTT Viewer 查看 RTT 输出
3. 检查串口是否被其他程序占用

## 下一步

如果问题仍然存在：
1. 检查编译输出，确认配置已生效
2. 尝试使用 RTT 作为替代方案
3. 检查设备树是否正确生成（查看 `build/zephyr/zephyr.dts`）

