2026-03-07 01:49:39 +08:00
|
|
|
|
// ==================== 1. 包含必要的头文件 ====================
|
|
|
|
|
|
#include "dev_cmd.h"
|
|
|
|
|
|
#include "general_def.h"
|
|
|
|
|
|
#include "bsp_log.h"
|
|
|
|
|
|
// 引入你的功率计头文件
|
|
|
|
|
|
#include "cmsis_os2.h"
|
|
|
|
|
|
#include "xidipwmeter.h"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// ==================== 2. 定义局部指针 ====================
|
2026-03-09 01:57:43 +08:00
|
|
|
|
static XidiPowerMeterInstance *chassis_power_meter; // 功率计实例指针
|
2026-03-07 01:49:39 +08:00
|
|
|
|
|
|
|
|
|
|
// 存放读取到的功率数据(也可以直接放进发给底盘的结构体里)
|
|
|
|
|
|
static float current_power_w = 0.0f;
|
|
|
|
|
|
static float current_voltage_v = 0.0f;
|
|
|
|
|
|
static float current_energy_j = 0.0f;
|
|
|
|
|
|
|
|
|
|
|
|
// ==================== 3. 在初始化函数中注册 ====================
|
2026-03-09 01:57:43 +08:00
|
|
|
|
// 1. 定义为静态变量(static),确保它的内存空间常驻,防止底层指针悬垂!
|
|
|
|
|
|
static XidiPowerMeter_Init_Config_s xidi_pm_config = {
|
|
|
|
|
|
.can_config = {
|
2026-03-09 21:43:44 +08:00
|
|
|
|
.can_handle = &hfdcan2, // 原来直接传的句柄,现在放进结构体里
|
2026-03-09 17:47:13 +08:00
|
|
|
|
.rx_id = 0x213, // 接收 ID
|
2026-03-09 18:28:45 +08:00
|
|
|
|
.tx_id = 0x000, // 发送 ID (不发送填0)
|
2026-03-09 01:57:43 +08:00
|
|
|
|
},
|
|
|
|
|
|
.daemon_config = {
|
2026-03-09 17:47:13 +08:00
|
|
|
|
.reload_count = 5, // 守护进程超时周期 (例如:5次没收到算离线)
|
2026-03-09 01:57:43 +08:00
|
|
|
|
}
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
// 2. 初始化任务
|
2026-03-07 01:49:39 +08:00
|
|
|
|
void RobotCMDInit()
|
|
|
|
|
|
{
|
2026-03-09 01:57:43 +08:00
|
|
|
|
// 传入配置结构体的地址,而不是直接传 hfdcan1
|
|
|
|
|
|
chassis_power_meter = XidiPowerMeterInit(&xidi_pm_config);
|
|
|
|
|
|
|
2026-03-07 21:59:47 +08:00
|
|
|
|
if (chassis_power_meter == NULL)
|
2026-03-07 01:49:39 +08:00
|
|
|
|
{
|
|
|
|
|
|
LOGERROR("[CMD] Power Meter Init Failed!");
|
|
|
|
|
|
}
|
2026-03-09 01:57:43 +08:00
|
|
|
|
else
|
|
|
|
|
|
{
|
|
|
|
|
|
// 建议加一句成功日志,方便上机调试时确认
|
|
|
|
|
|
LOGINFO("[CMD] Power Meter Init Success!");
|
|
|
|
|
|
}
|
2026-03-07 01:49:39 +08:00
|
|
|
|
}
|
2026-03-09 17:47:13 +08:00
|
|
|
|
|
2026-03-07 01:49:39 +08:00
|
|
|
|
// ==================== 4. 在控制任务中读取使用 ====================
|
2026-03-09 02:35:08 +08:00
|
|
|
|
void CmdTask(void *argument)
|
2026-03-07 01:49:39 +08:00
|
|
|
|
{
|
2026-03-07 21:59:47 +08:00
|
|
|
|
RobotCMDInit();
|
2026-03-09 02:35:08 +08:00
|
|
|
|
DaemonReload(chassis_power_meter->daemon);
|
2026-03-07 21:59:47 +08:00
|
|
|
|
while (1)
|
2026-03-07 01:49:39 +08:00
|
|
|
|
{
|
2026-03-07 21:59:47 +08:00
|
|
|
|
osDelay(10); // 根据实际需要调整读取频率
|
|
|
|
|
|
}
|
2026-03-09 17:47:13 +08:00
|
|
|
|
}
|