EEPROM 写入时白板断言失败
Whiteboard assertion failure on EEPROM write
我正在尝试将我在模拟器上编写的代码移植到 HR+ 传感器上,但我遇到了一个在模拟器上没有的问题。
该代码尝试使用 Whiteboard 的 EEPROM API 在 EEPROM 上写入一个相当大的缓冲区 (7.5KB),方法是将其拆分为 16 字节长的临时缓冲区,调用 asyncPut
并忙于等待完成 (onPutResult
在写入下一个块之前设置一个标志。
几千次迭代后(它并不总是在同一次迭代中失败)执行停止并显示此消息我正在通过 RTT:860:Whiteboard.cpp
我认为这是断言失败。是否有关于此错误的更多信息?我究竟做错了什么?我写大量数据的方法是否正确?
当传感器无法及时处理来自订阅的通知时,Whiteboard.cpp 的第 860 行的 ASSERT 被触发。我确实在您的描述中注意到了一个“危险信号”:“...正忙着等待完成...” 这可能就是原因。
Movesense 框架是完全异步的,这意味着任何类型的忙循环都是严格禁止的,因为它会阻止传感器的正常运行(如上述通知处理)。
为避免繁忙循环,在 onPutResult() 回调中触发下一个 asyncPut,并确保为调用指定 AsyncRequestOptions::ForceAsync 选项。
完全披露:我为 Movesense 团队工作
我正在尝试将我在模拟器上编写的代码移植到 HR+ 传感器上,但我遇到了一个在模拟器上没有的问题。
该代码尝试使用 Whiteboard 的 EEPROM API 在 EEPROM 上写入一个相当大的缓冲区 (7.5KB),方法是将其拆分为 16 字节长的临时缓冲区,调用 asyncPut
并忙于等待完成 (onPutResult
在写入下一个块之前设置一个标志。
几千次迭代后(它并不总是在同一次迭代中失败)执行停止并显示此消息我正在通过 RTT:860:Whiteboard.cpp
我认为这是断言失败。是否有关于此错误的更多信息?我究竟做错了什么?我写大量数据的方法是否正确?
当传感器无法及时处理来自订阅的通知时,Whiteboard.cpp 的第 860 行的 ASSERT 被触发。我确实在您的描述中注意到了一个“危险信号”:“...正忙着等待完成...” 这可能就是原因。
Movesense 框架是完全异步的,这意味着任何类型的忙循环都是严格禁止的,因为它会阻止传感器的正常运行(如上述通知处理)。
为避免繁忙循环,在 onPutResult() 回调中触发下一个 asyncPut,并确保为调用指定 AsyncRequestOptions::ForceAsync 选项。
完全披露:我为 Movesense 团队工作