1 changed files with 108 additions and 0 deletions
@ -0,0 +1,108 @@ |
|||
#include <stdint.h> |
|||
#include <stdbool.h> |
|||
|
|||
// 1. 通用函数指针类型集合
|
|||
typedef void (*Func_RetVoid_ParamVoid)(void); |
|||
typedef void (*Func_RetVoid_ParamInt32)(int32_t); |
|||
typedef bool (*Func_RetBool_ParamVoid)(void); |
|||
typedef bool (*Func_RetBool_ParamInt32)(int32_t); |
|||
|
|||
// 2.1 基础控制功能
|
|||
typedef enum { |
|||
CTRL_ENTER_AUTO_MODE, // 进入自动模式
|
|||
CTRL_ENTER_MANUAL_MODE, // 进入手动模式
|
|||
CTRL_START_MOVE, // 开始运动
|
|||
CTRL_LANE_CHANGE, // 换道
|
|||
CTRL_DIR_ADJUST, // 方向调整
|
|||
CTRL_FUNC_MAX // 基础控制功能数量
|
|||
} RobotCtrlFuncType; |
|||
|
|||
// 2.2 状态检测功能
|
|||
typedef enum { |
|||
CHECK_BATTERY, // 检测电池状态
|
|||
CHECK_SENSOR, // 检测传感器状态
|
|||
CHECK_COMM, // 检测通信状态
|
|||
CHECK_FUNC_MAX // 状态检测功能数量
|
|||
} RobotCheckFuncType; |
|||
|
|||
// 3. 通用函数指针载体
|
|||
typedef void* GenericFuncPtr; |
|||
|
|||
// 4. 声明所有业务函数
|
|||
// 基础控制函数
|
|||
void AutoDriveMode(void); |
|||
void ManualDriveMode(void); |
|||
void StartMove(void); |
|||
bool LaneChange(int32_t lane_num); |
|||
bool DirAdjust(void); |
|||
|
|||
// 状态检测函数
|
|||
bool CheckBatteryStatus(void); |
|||
bool CheckSensorStatus(int32_t sensor_id); |
|||
void CheckCommStatus(void); |
|||
|
|||
// 5. 重构函数向量表结构体:包含多组功能数组
|
|||
typedef struct { |
|||
GenericFuncPtr ctrl_funcs[CTRL_FUNC_MAX]; // 基础控制函数数组
|
|||
GenericFuncPtr check_funcs[CHECK_FUNC_MAX]; // 状态检测函数数组
|
|||
// 可继续扩展:如 alarm_funcs[ALARM_FUNC_MAX] 告警函数数组
|
|||
} RobotControlTable; |
|||
|
|||
// 6. 定义默认的函数向量表实例(初始化多组数组)
|
|||
const RobotControlTable DEFAULT_ROBOT_TABLE = { |
|||
// 初始化基础控制函数数组
|
|||
.ctrl_funcs = { |
|||
[CTRL_ENTER_AUTO_MODE] = (GenericFuncPtr)(Func_RetVoid_ParamVoid)AutoDriveMode, |
|||
[CTRL_ENTER_MANUAL_MODE] = (GenericFuncPtr)(Func_RetVoid_ParamVoid)ManualDriveMode, |
|||
[CTRL_START_MOVE] = (GenericFuncPtr)(Func_RetVoid_ParamVoid)StartMove, |
|||
[CTRL_LANE_CHANGE] = (GenericFuncPtr)(Func_RetBool_ParamInt32)LaneChange, |
|||
[CTRL_DIR_ADJUST] = (GenericFuncPtr)(Func_RetBool_ParamVoid)DirAdjust |
|||
}, |
|||
// 初始化状态检测函数数组
|
|||
.check_funcs = { |
|||
[CHECK_BATTERY] = (GenericFuncPtr)(Func_RetBool_ParamVoid)CheckBatteryStatus, |
|||
[CHECK_SENSOR] = (GenericFuncPtr)(Func_RetBool_ParamInt32)CheckSensorStatus, |
|||
[CHECK_COMM] = (GenericFuncPtr)(Func_RetVoid_ParamVoid)CheckCommStatus |
|||
} |
|||
}; |
|||
|
|||
// 7. 业务逻辑函数:调用多组功能数组的函数
|
|||
void robot_run(RobotControlTable *table) { |
|||
if (table == NULL) return; |
|||
|
|||
// ========== 调用基础控制函数 ==========
|
|||
((Func_RetVoid_ParamVoid)table->ctrl_funcs[CTRL_ENTER_AUTO_MODE])(); |
|||
((Func_RetVoid_ParamVoid)table->ctrl_funcs[CTRL_START_MOVE])(); |
|||
if (((Func_RetBool_ParamInt32)table->ctrl_funcs[CTRL_LANE_CHANGE])(1)) { |
|||
((Func_RetBool_ParamVoid)table->ctrl_funcs[CTRL_DIR_ADJUST])(); |
|||
} |
|||
|
|||
// ========== 调用状态检测函数 ==========
|
|||
// 检测电池状态
|
|||
if (((Func_RetBool_ParamVoid)table->check_funcs[CHECK_BATTERY])()) { |
|||
// 电池正常,检测传感器(传入传感器ID 0)
|
|||
if (((Func_RetBool_ParamInt32)table->check_funcs[CHECK_SENSOR])(0)) { |
|||
// 传感器正常,检测通信状态
|
|||
((Func_RetVoid_ParamVoid)table->check_funcs[CHECK_COMM])(); |
|||
} |
|||
} |
|||
} |
|||
|
|||
// 8. 具体函数实现
|
|||
// 基础控制函数
|
|||
void AutoDriveMode(void) {} |
|||
void ManualDriveMode(void) {} |
|||
void StartMove(void) {} |
|||
bool LaneChange(int32_t lane_num) { (void)lane_num; return true; } |
|||
bool DirAdjust(void) { return true; } |
|||
|
|||
// 状态检测函数
|
|||
bool CheckBatteryStatus(void) { return true; } // 电池正常
|
|||
bool CheckSensorStatus(int32_t sensor_id) { (void)sensor_id; return true; } // 传感器正常
|
|||
void CheckCommStatus(void) {} // 通信检测逻辑
|
|||
|
|||
// 9. 主函数:调用逻辑不变
|
|||
int main() { |
|||
robot_run((RobotControlTable*)&DEFAULT_ROBOT_TABLE); |
|||
return 0; |
|||
} |
|||
Loading…
Reference in new issue