# LOG_INF vs RTT_Message 的区别

## 问题 1: 为什么手机上看到的是 "Test(BLE)" 而不是完整消息？

### 可能的原因

1. **消息分段发送被截断**
   - `BLE_Message` 发送的消息会被分段（每段最多 19 字节）
   - 如果手机 App 只接收了第一段，可能只显示部分内容
   - "Main Thread Message Test (BLE)" 有 35 个字符，会被分成 2 段发送

2. **手机 App 显示问题**
   - 某些 BLE NUS App 可能只显示最后接收到的片段
   - 或者 App 的缓冲区只保留了部分数据

3. **消息发送失败**
   - 如果第一段发送成功，但第二段失败，可能只显示第一段的部分内容

### 解决方案

检查 `ble_nus_log_send_message` 的实现，确保消息完整发送。

## 问题 2: LOG_INF 和 RTT_Message 的区别

### LOG_INF

**LOG_INF** 是 Zephyr 的日志系统宏，输出格式如下：

```
[00:00:01.210,418] <inf> main: === Debug Message #1 ===
```

包含：
- **时间戳**: `[00:00:01.210,418]` - 系统启动后的时间
- **日志级别**: `<inf>` - INFO 级别
- **模块名**: `main` - 注册的模块名（通过 `LOG_MODULE_REGISTER`）
- **消息内容**: `=== Debug Message #1 ===`

### RTT_Message

**RTT_Message** 是我们自定义的函数，**内部也使用 LOG_INF**：

```c
void RTT_Message(const char *format, ...)
{
    char msg_buf[128];
    va_list args;
    int len;
    
    va_start(args, format);
    len = vsnprintf(msg_buf, sizeof(msg_buf), format, args);
    va_end(args);
    
    if (len > 0 && len < (int)sizeof(msg_buf)) {
        /* 使用 LOG_INF 输出到 RTT */
        LOG_INF("%s", msg_buf);
    }
}
```

**输出格式**：
```
[00:00:01.220,500] <inf> debug_output: Main Thread Message Test (RTT)
```

包含：
- **时间戳**: `[00:00:01.220,500]`
- **日志级别**: `<inf>`
- **模块名**: `debug_output`（因为 `LOG_MODULE_REGISTER(debug_output, LOG_LEVEL_INF)`）
- **消息内容**: `Main Thread Message Test (RTT)`

### 主要区别

| 特性 | LOG_INF | RTT_Message |
|------|---------|-------------|
| **类型** | Zephyr 宏 | 自定义函数 |
| **模块名** | 调用处的模块名（如 `main`） | 固定为 `debug_output` |
| **格式化** | 直接支持格式化字符串 | 需要先格式化再调用 LOG_INF |
| **输出位置** | 所有配置的日志后端（RTT、UART等） | 所有配置的日志后端（RTT、UART等） |
| **时间戳** | ✅ 有 | ✅ 有 |
| **日志级别** | ✅ 有 | ✅ 有 |

### 实际使用建议

1. **使用 LOG_INF**：
   - 正常的应用日志
   - 需要显示模块名和完整格式
   - 例如：`LOG_INF("Debug counter: %u", counter);`

2. **使用 RTT_Message**：
   - 需要统一格式的调试消息
   - 所有消息都显示为 `debug_output` 模块
   - 例如：`RTT_Message("Simple debug message");`

3. **使用 BLE_Message**：
   - 发送到 BLE NUS（远程调试）
   - 不包含时间戳和模块名（纯消息内容）
   - 例如：`BLE_Message("Remote debug: %d", value);`

## 修复建议

### 修复 BLE 消息显示问题

如果手机上只显示部分消息，可以：

1. **检查消息是否完整发送**：
   ```c
   int ret = BLE_Message("Main Thread Message Test (BLE)");
   if (ret < 0) {
       LOG_ERR("BLE message send failed: %d", ret);
   }
   ```

2. **使用更短的消息测试**：
   ```c
   BLE_Message("Test");  // 测试短消息
   ```

3. **检查手机 App**：
   - 确保 App 正确接收所有数据包
   - 检查 App 的缓冲区设置

