You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

87 lines
1.3 KiB

2 days ago
/*
* bsp_FSM.h
*
* Created on: Aug 2, 2024
* Author: akeguo
*/
#ifndef INC_FSM_TXT_
#define INC_FSM_TXT_
#include "BHBF_ROBOT.h"
#include "BSP/bsp_include.h"
#include "robot_state.h"
typedef enum
{
Manual=0,
Auto,
Abnormal,
SetLaneChangeDistance,
SetBackwardsDistance,
LaneChangeMode,
Forwards,
Backwards,
TurnLeft,
TurnRight
} STATE_t;
typedef void (*STATE_ACTION)(void);
typedef struct ACTION_MAP
{
STATE_t stStateID;
STATE_ACTION EnterAct;
STATE_ACTION RunningAct;
STATE_ACTION ExitAct;
} ACTION_MAP_t;
extern ACTION_MAP_t actionMap[];
typedef enum
{
EVENT_Manual=0,
EVENT_Auto,
EVENT_Abnormal,
EVENT_SetLaneChangeDistance,
EVENT_SetBackwardsDistance,
EVENT_LaneChangeMode,
EVENT_Forwards,
EVENT_Backwards,
EVENT_TurnLeft,
EVENT_TurnRight,
EVENT_MAP_END
} EVENT_t;
//注:定义EVENT_MAP_END的目的是为了方便查表。
//
//定义EVENT_MAP_t结构体类型,表示事件表属性:
typedef struct EVENT_MAP
{
EVENT_t stEventID;
STATE_t stCurState;
STATE_t stNextState;
} EVENT_MAP_t;
extern EVENT_MAP_t eventMap[];
typedef struct FSM
{
STATE_t stCurState;
STATE_t stNextState;
ACTION_MAP_t *pActionMap;
EVENT_MAP_t *pEventMap;
} FSM_t;
extern FSM_t RobotFSM; //定义状态机
void fsm_state_transfer(FSM_t *pFsm, EVENT_t stEventID);
#endif /* INC_BSP_BSP_FSM_H_ */