XCP Slave Recorder 模式

XCP Slave Recorder 模式是一种触发式高速数据录制功能,支持预触发和后触发数据捕获,适用于需要记录特定事件前后数据的场景。

功能入口

Recorder 模式功能通过以下方式使用:

  1. Master 端调用:通过 XCP Master 软件发起录制命令
  2. API 接口调用:在嵌入式代码中直接调用 emXCP API

使用步骤

1. 初始化 Recorder

在使用 Recorder 功能前,需要初始化 emXCP 库并提供内存缓冲区:

#include "emXcp.h"

// 定义缓冲区
#define EMXCP_BUFFER_SIZE    (16 * 1024)  // 16KB
static char g_xcpBuffer[EMXCP_BUFFER_SIZE];

// 初始化
emeye_xcp_init(g_xcpBuffer, EMXCP_BUFFER_SIZE);
emeye_xcp_set_irq(1, 0);  // 设置 1ms 中断周期

2. 配置录制参数

设置采样率、预触发点数和后触发点数:

TXcpRecorderConfig config;
config.sample_rate = 1000;      // 1kHz 采样率
config.pre_trigger = 50;        // 预触发 50 个采样点
config.post_trigger = 150;      // 后触发 150 个采样点
config.triggerType = XCP_TRIG_TYPE_MANUAL;  // 手动触发

emeye_xcp_recorder_config(&config);

3. 启动录制

配置完成后启动录制:

emeye_xcp_recorder_start();

4. 触发录制

根据配置的触发类型,选择触发方式:

触发类型 说明
TRIG_TYPE_NONE 0x00 无触发,立即开始录制
TRIG_TYPE_MANUAL 0x01 手动触发,由 Master 发送触发命令
TRIG_TYPE_SINGLE 0x02 单次触发,表达式触发后自动停止
TRIG_TYPE_REPEAT 0x03 重复触发,表达式触发后继续录制

手动触发示例:

emeye_xcp_recorder_trigger();

5. 停止录制

录制完成后停止:

emeye_xcp_recorder_stop();

6. 查询状态

可随时查询录制状态:

TXcpRecorderStatus status;
emeye_xcp_recorder_get_status(&status);
// status.state - 当前状态
// status.bufferUsage - 缓冲区使用量
// status.triggerStatus - 触发状态

核心概念

工作原理

时间轴 ──────────────────────────────────────────────────────>

        |←── 预触发数据 ──→|← 触发点 →|←── 后触发数据 ──→|

        ┌──────────────────┬──────────┬──────────────────┐
        │   Pre-Trigger    │ Trigger  │   Post-Trigger   │
        │   (环形缓冲)      │  Point   │   (线性缓冲)     │
        └──────────────────┴──────────┴──────────────────┘

预触发阶段:触发前持续采集数据到环形缓冲区,保留触发前的历史数据。

后触发阶段:触发后继续采集数据到线性缓冲区,记录触发后的数据。

状态流程

IDLE → ARMED → PRE_TRIGGER → POST_TRIGGER → UPLOAD → COMPLETE
                      │              │
                      └──────────────┴──→ 可随时停止 → IDLE

注意事项

内存需求

Recorder 功能需要用户提供内存缓冲区,最小 512 字节。可通过以下方式计算所需内存:

uint32_t requiredSize = emeye_xcp_get_required_mem_size(
    50,   // 预触发点数
    150,  // 后触发点数
    8     // 变量条目数量
);

缓冲区大小建议

配置 内存需求 说明
最小配置 4KB 2 变量,100ms 缓冲
标准配置 16KB 8 变量,200ms 缓冲
最大配置 64KB 16 变量,500ms 缓冲

状态限制

  • SET_RECORDER_PARAMS:仅在 IDLE 状态下接受
  • START_RECORDER:仅在 ARMED 状态下接受
  • STOP_RECORDER:在 PRE_TRIGGER 或 POST_TRIGGER 状态下接受
  • TRIGGER_RECORDER:仅在 PRE_TRIGGER 状态下接受

性能要求

操作 目标时间 说明
单次采样 < 5μs 8 个变量,32 位
批量发送 < 20μs 8 帧,64 字节数据

相关文档