feat(esp32): 添加多电机OTA中继功能并优化调试日志系统

- 新增多电机状态、版本和OTA中继监控模块(monitor/motor_state.cpp,
  monitor/motor_version.cpp, monitor/motor_ota_relay.cpp)
- 在CAN反馈任务中添加0xC5/0xC6/0xD2类型消息处理,支持多电机状态推送
- 重构调试日志系统,将一次性JSON分配改为512B栈缓冲流式发送,降低内存峰值
- 调试UART波特率从115200提升至30000
- 修改版本管理方式,从自动生version.h改为手动维护
- 更新VSCode设置以支持ESP-IDF开发环境配置
- 在OTA协调器中添加电机OTA互斥机制,防止并发冲突
- 完善中继状态机异常处理,添加远程取消通知机制
This commit is contained in:
小龙虾
2026-07-26 20:40:16 +08:00
parent 770ae14156
commit 2138a572ee
47 changed files with 6469 additions and 799 deletions
+62
View File
@@ -0,0 +1,62 @@
/*
* motor_version.h - 被动接收 GD32 多电机版本推送(SPI TYPE 0xC6)
*
* 与 0xC5 电机状态同模型:GD32 收到电机版本应答(0x00FF)后事件驱动按铃推送,
* ESP32 takeEvent 侧解析入库。版本为按需查询的低频数据,独立于 0xC5 周期推送。
* 是否推送由 GD32 CONFIG_MOTOR_VERSION_ENABLE 决定;ESP32 无本地开关,有帧即解析。
*
* payload 格式(单帧,Header 2B + 每 entry 29B):
* [0] count 本帧节点数
* [1] rsvd 保留
* [2..] 每个 entry 29B:
* [0] node_id, [1..4] seq (LE), [5..28] version[24] (原始版本 payload)
*/
#ifndef MOTOR_VERSION_H
#define MOTOR_VERSION_H
#include <stdint.h>
#include <stdbool.h>
#include <stddef.h>
#ifdef __cplusplus
extern "C" {
#endif
#define MOTORVER_MAX_NODES 9
#define MOTORVER_DLC 24
#define MOTORVER_ENTRY_SIZE 29 /* node(1) + seq(4) + version(24) */
#define MOTORVER_HEADER_LEN 2
/** @brief 单电机版本快照。 */
typedef struct {
uint8_t node_id; ///< 1-9, 0=空槽
uint32_t seq; ///< GD32 侧更新序号(判新鲜用)
uint8_t version[MOTORVER_DLC]; ///< 原始版本 payload
int64_t recv_ms; ///< ESP32 收到时 esp_timer ms
bool valid; ///< 该槽已收到过版本
} motor_version_slot_t;
/** @brief 全局电机版本表。 */
typedef struct {
motor_version_slot_t slots[MOTORVER_MAX_NODES]; ///< 按 node_id-1 索引
bool have_data; ///< 至少收到过一帧
} motor_version_table_t;
/**
* @brief 处理一帧 0xC6 EVENT payload(由 can_fb 任务 takeEvent 分发)。
* @return true 表示已接受并更新。
*/
bool onMotorVersionEvent(const uint8_t *payload, size_t len);
/**
* @brief 拷贝最新电机版本表(线程安全)。
* @param[out] out 输出缓冲
* @return true 表示至少收到过一帧
*/
bool getLatestMotorVersion(motor_version_table_t *out);
#ifdef __cplusplus
}
#endif
#endif /* MOTOR_VERSION_H */