You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Movesense自定义固件EEPROM日志集成的相关技术疑问

Movesense EEPROM日志集成疑问解答

疑问一:配置有效性与路径匹配问题

咱们先拆解你的配置逻辑:

  1. 代码里的DataLoggerConfig是告诉Movesense日志系统要监控哪些Whiteboard对象,你设置的dEntry.path = "/App/Object1"和dEntry1.path = "/App/Object2"就是明确指定了需要记录日志的对象路径。
  2. YAML文件里的路径是定义Whiteboard对象本身的接口(比如订阅、操作),这俩路径必须完全匹配——日志系统是通过路径来关联到具体的Whiteboard对象的,如果路径不一致,日志系统找不到对应的对象,自然无法记录。

从你给出的代码和YAML片段来看,只要YAML里的路径和代码里的path值完全一致(注意YAML里的格式有点小问题,应该是在同一个paths下定义两个对象,而不是重复写paths:),这个配置是能让固件正确记录这些Whiteboard对象的。举个修正后的YAML结构示例:

paths:
  /App/Object1:
    Subscription:
      # 你的post/delete动作定义
  /App/Object2:
    Subscription:
      # 你的post/delete动作定义

疑问二:日志记录的触发方式

答案是:不需要手动创建wb::LogEntry并调用asyncPost!

当你通过DataLoggerConfig配置好要监控的Whiteboard对象,并且把日志状态设为DATALOGGER_LOGGING后,日志系统会自动监听这些对象的onNotify()事件——只要你在代码里正常触发了对象的通知(比如调用notify()方法),日志系统就会自动把这个通知的内容记录到EEPROM里,完全不需要手动构造日志条目。

那什么时候需要手动创建wb::LogEntry呢?只有当你需要添加自定义的、非Whiteboard对象通知的日志条目时才用得到。如果真的要手动构造,有几个关键点:

  • id:是日志条目的类型ID,你可以在YAML的logEntries节点下自定义,或者使用Movesense预设的ID;
  • timestamp:可以用wb::Timer::getTimestamp()来获取当前的系统时间戳;
  • 数据部分:直接赋值你要记录的Whiteboard对象实例即可,Movesense的框架会自动处理序列化。

举个手动记录的简单示例:

wb::LogEntry customLog;
customLog.id = YOUR_CUSTOM_LOG_ID; // 替换成你定义的ID
customLog.timestamp = wb::Timer::getTimestamp();
customLog.data = YourCustomObjectInstance; // 替换成你的对象实例

auto result = asyncPost(WB_RES::LOCAL::MEM_LOGBOOK_ENTRIES(), AsyncRequestOptions::Empty, customLog);
if(!wb::RETURN_OKC(result)) {
    DebugLogger::info("Failed to post custom log entry: %u", result);
}

内容的提问来源于stack exchange,提问作者Mark Maurer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 09:54:23