第一次提交

This commit is contained in:
2025-07-05 20:11:15 +08:00
commit 89b0708dfb
56 changed files with 10876 additions and 0 deletions

145
app/app_param_manage.h Normal file
View File

@@ -0,0 +1,145 @@
#ifndef APP_PARAM_MANAGE_H
#define APP_PARAM_MANAGE_H
#ifdef __cplusplus
extern "C"
{
#endif
#include "app_config.h"
// 定义参数列表宏
#define PARAM_LIST \
X(whl_bas) \
X(max_rpm) \
X(whl_dia) \
X(max_acc) \
X(spd_kp) \
X(spd_ki) \
X(spd_kd) \
X(spd_il) \
X(spd_ol) \
X(crv_kp) \
X(crv_ki) \
X(crv_kd) \
X(crv_il) \
X(crv_ol) \
X(brk_on) \
X(brk_off) \
X(maxTorq) \
X(feedPwr) \
X(dispPwr) \
X(VehMass) \
X(gRatio) \
X(prCTime) \
X(brk_pos) \
X(pwr_sta) \
X(high_sw) \
X(stop_sw) \
X(lightSt) \
X(pwr_btn) \
X(sleepTm) \
X(wakeTm) \
X(Ospd_kp) \
X(Ospd_ki) \
X(Ospd_kd) \
X(Ospd_il) \
X(Ospd_ol) \
X(Ocrv_kp) \
X(Ocrv_ki) \
X(Ocrv_kd) \
X(Ocrv_il) \
X(Ocrv_ol) \
X(minTorq) \
X(test)
// 定义一个包含所有参数名称的结构体
typedef struct {
#define X(name) const char* name;
PARAM_LIST
#undef X
} ParamNames;
// 参数结构体不能使用位域不要超过E2的大小, 1K byte
typedef struct
{
#define X(name) float name;
PARAM_LIST
#undef X
} ParamData;
typedef union
{
ParamData bit_data; // 使用定义的结构体变量名
uint8_t arr[sizeof(ParamData)]; // 通过结构体类型确定大小
} UnParamManager;
// 定义信号操作类型
typedef enum
{
READ_OPERATION,
WRITE_OPERATION
} OperationType;
// 定义信号数据结构
typedef struct
{
void *param_ptr; // 参数数据的指针
OperationType type; // 操作类型
size_t offset; // 参数在结构体中的偏移
size_t size; // 参数大小
} ParamSignal;
#pragma pack(push, 1)
typedef struct _StrParamRequest {
//--------------------------------------------------
uint16_t frame_header; // 帧头 固定值0xFF80 (16位)
uint16_t frame_type; // 帧类型 固定值0x002A (16位)
uint16_t frame_length; // 帧长 根据参数数据的长度动态设置 (16位)
uint8_t accumulated; // 累加值 按帧累加 (8位)
uint16_t request_id; // 请求帧ID 请求ID 100表示读101 表示写参数 (16位)
char param_name[256][8]; // 参数名称 标识要写入或读出的参数
uint8_t data[256][4]; // 数据 用于写入或读出的参数值一个参数最大4字节 (8位*4)
uint8_t crc; // CRC 按字节累加之和 取低8位 (8位)
} StrParamRequest;
typedef union _UnParamRequest {
StrParamRequest bit_data; // 使用定义的结构体变量名
unsigned char arr[sizeof(StrParamRequest)]; // 通过结构体类型确定大小
} UnParamRequest;
typedef struct {
UnParamRequest *param_request; // 指向 UnParamRequest 的指针
uint32_t sender_ip; // 发送方的 IP 地址使用标准的32位整数表示
uint16_t sender_port; // 发送方的端口号使用标准的16位整数表示
} RequestContext;
#pragma pack(pop)
extern UnParamRequest un_param_request;// 声明用于参数响应的帧实例
extern RequestContext request_context;
// 声明全局信号实例
extern ParamNames param_names;
extern UnParamManager param_manager; // 全局参数管理实例
extern ParamSignal param_signal;
extern uint8_t read_write_e2_finished;
extern RequestContext request_send;// 待发送的参数请求信号
uint8_t access_eeprom(size_t offset, void *data, size_t size, OperationType type);
void paramAppInit(void);
// 在适当的位置添加以下函数声明
float getParam(const char *param_name);
uint8_t setParam(const char *param_name, float value);
void printParams(void);
void handleParamOp(void *data);
void OnParamSignal(void *data);
#ifdef __cplusplus
}
#endif
#endif // APP_PARAM_MANAGE_H