gpt4 book ai didi

movesense - 在 moveense 自定义固件中实现到 EEPROM 的日志记录

转载 作者:行者123 更新时间:2023-12-04 19:27:56 25 4
gpt4 key购买 nike

我希望在我的自定义移动感应固件中将日志记录集成到 EEPROM。阅读有关日志记录服务的文档,我已验证我已使用自定义白板对象配置了日志记录系统,并且启用了日志记录(日志记录状态设置为 3),代码如下:

WB_RES::DataLoggerConfig dConfig;
WB_RES::DataEntry dEntry, dEntry1;
WB_RES::DataLoggerStateValues::Type dlstate = WB_RES::DataLoggerStateValues::Type::DATALOGGER_LOGGING;

dEntry.path = "/App/Object1";
dEntry1.path = "/App/Object2";
dConfig.dataEntries.dataEntry = {dEntry, dEntry1};

result = asyncPut(WB_RES::LOCAL::MEM_DATALOGGER_CONFIG(), AsyncRequestOptions::Empty, dConfig);
if(!wb::RETURN_OKC(result))
DebugLogger::info("asyncPut::datalogger config threw error: %u", result);

result = asyncPut(WB_RES::LOCAL::MEM_DATALOGGER_STATE(), AsyncRequestOptions::Empty, dlstate);
if(!wb::RETURN_OKC(result))
DebugLogger::info("asyncPut::datalogger start threw error: %u", result);

我在yaml文件中配置的白板对象路径是:
paths: /App/Object1/Subscription:
<blah, post/delete actions defined>
paths: /App/Object2/Subscription:
<blah, post/delete actions defined>

首先,在让 moveense 固件记录这些白板对象时,这是正确的吗? yaml文件中定义的白板路径和我们在代码中配置的数据录入路径有什么关系?它们必须完全匹配吗?

其次,如果我有上述正确,那么当我向订阅的消费者发布通知时,条目是否会被自动记录(目前在 onNotify() 方法中完成),或者我是否必须创建一个特定的 wb::LogEntry 对象,并填充它,然后对 MEM_LOGBOOK_ENTRIES() 目标执行 asyncPost,如下所示:
wb::LogEntry foo;
result = asyncPost(WB_RES::LOCAL::MEM_LOGBOOK_ENTRIES(), AsyncRequestOptions::Empty, foo);

如果是这种情况,它们是否有任何帮助函数来帮助填充 wb::LogEntry 对象,因为看起来您需要一个 id、时间戳和白板数据对象?还是我们必须自己生成这些?

最佳答案

你的基本想法是正确的,但有些细节有些偏差。

首先是两个组件DataLogger和Logbook的划分:

  • DataLogger 负责将数据存储到 EEPROM 存储器的一切工作
  • 日志可用于从 EEPROM 存储器读取数据(并将其删除到清洁状态)

  • DataLogger 的工作方式是订阅/Mem/DataLogger/Config 中给定的路径,然后存储这些订阅的通知(无需对/Logbook/Entries 执行任何操作)。

    简单流程:
  • PUT 路径以记录到/Mem/DataLogger/Config
  • PUT 3 到/Mem/DataLogger/State 开始记录

  • --- 记录发生在这里---
  • PUT 2 到/Mem/DataLogger/State 以停止记录

  • 但是,您的代码中有一些细节错误。 Config 和 State PUT 操作的结果出现在 onPutResult() 回调中。因此,为了确保配置正确,您必须在/Config PUT 的回调中获得 status = 200 后触发状态更改。

    对于可以记录的内容也有一些限制。主要是:
  • 如果有多个数组,它们的长度必须相同(如/Meas/IMU9)
  • 不支持字符串

  • 要查看通知值对象如何存储到 EEPROM 中,请参阅/generated/sbem-code/sbem_definitions.cpp。如果您的类型没有出现在那里,那么您的服务 yaml 中的某些内容会阻止序列化。

    要试用 DataLogger 和 Logbook API,请参阅 DataLoggerSample Android app在 moveense-mobile-lib 存储库中。

    关于movesense - 在 moveense 自定义固件中实现到 EEPROM 的日志记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50497055/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com