當(dāng)前位置:首頁 > 公眾號精選 > 技術(shù)讓夢想更偉大
[導(dǎo)讀]關(guān)注、星標(biāo)公眾號,直達(dá)精彩內(nèi)容來源:小魚兒飛丫飛整理:技術(shù)讓夢想更偉大|李肖遙前言:本框架實現(xiàn)的目的是在基于51單片機(jī)為控制芯片的產(chǎn)品內(nèi),因為51單片機(jī)的內(nèi)存和堆棧比較有限,此框架比較簡潔高效的。如果用于其他高性能的處理器內(nèi),可以考慮利用鏈表實現(xiàn),實現(xiàn)更自由的操作。一、雙層狀態(tài)機(jī)...

關(guān)注、星標(biāo)公眾號,直達(dá)精彩內(nèi)容



來源:小魚兒飛丫飛


整理:技術(shù)讓夢想更偉大 | 李肖遙



前言:

本框架實現(xiàn)的目的是在基于51單片機(jī)為控制芯片的產(chǎn)品內(nèi),因為51單片機(jī)的內(nèi)存和堆棧比較有限,此框架比較簡潔高效的。如果用于其他高性能的處理器內(nèi),可以考慮利用鏈表實現(xiàn),實現(xiàn)更自由的操作。


一、雙層狀態(tài)機(jī)框架

狀態(tài)機(jī)架構(gòu)


調(diào)度器實現(xiàn)


該狀態(tài)機(jī)有兩個父類狀態(tài)機(jī)(可自由添加更多父類狀態(tài)機(jī))


每個父類狀態(tài)機(jī)內(nèi)部有若干個子狀態(tài)機(jī)(可自由添加更多子類狀態(tài)機(jī))


二、直接上代碼

頭文件如下:


/****************************************************************************
作者:小魚兒飛丫飛
日期:2020-6-19
文件名:FSM層次狀態(tài)機(jī)頭文件
****************************************************************************/
#ifndef  __HSM_H__
#define  __HSM_H__

/****************************************************************************
頭文件
****************************************************************************/
#include "stdio.h"
/****************************************************************************
紅定義
****************************************************************************/
#define KEPP_STATE_CNT (5)
#define uint8_t  unsigned char
/****************************************************************************
變量
****************************************************************************/
typedef   void (*procedure) (void);//--函數(shù)指針
//--定義狀態(tài)
typedef  enum  _FATHER_STATES{
s_father_init =0,
s_father_keep,
s_father_done,
s_father_default,
}E_father_states;
E_father_states  s_father_step;//--父類單個狀態(tài)內(nèi)部轉(zhuǎn)換步驟
typedef  enum  _CHILDER_STATES{
s_childer_init =0,
s_childer_keep,
s_childer_done,
s_childer_default,
}E_childer_states;
E_childer_states  s_childer_step;//--子類單個狀態(tài)內(nèi)部轉(zhuǎn)換步驟
//--定義狀態(tài)成員函數(shù)
typedef  struct  __STATES_FUN{
procedure  steps[4] ;//--函數(shù)指針數(shù)組
}S_state_fun;

S_state_fun  father_state[2];//--超類集合
S_state_fun  childer_state[8];//--子類集合

typedef  enum {
e_static_state =0,
e_run_state ,
}E_hsm_father_state;
E_hsm_father_state  hsm_current_father_state;//--當(dāng)前父狀態(tài)
E_hsm_father_state  hsm_last_father_state;//-上一次父狀態(tài)
typedef  enum {
e_set_state =0,
e_distribution_network_state ,
e_shut_down_state,
e_charge_state,
e_Normal_state,
e_dry_state,
e_besiege_state,
e_avoid_obstacles
}E_hsm_childer_state;
E_hsm_childer_state   hsm_current_childer_state;//--當(dāng)前子狀態(tài)
E_hsm_childer_state   hsm_last_childer_state;//--上一次子狀態(tài)

/****************************************************************************
函數(shù)
****************************************************************************/
//--子狀態(tài)是否允許跳轉(zhuǎn)
uint8_t  Childer_State_Is_Allow_Jump(void);
//--子狀態(tài)是否要發(fā)生狀態(tài)轉(zhuǎn)換
uint8_t  Is_Three_A_Childer_State_Transition(void);
//--子類狀態(tài)轉(zhuǎn)換
void  Childer_State_Transition(E_hsm_childer_state  temp);
//--子類更新上一次狀態(tài)
void  Update_Childer_Last_State_Transition(void);
//--子類單個狀態(tài)內(nèi)部轉(zhuǎn)換
void  Childer_Step_Transition(E_childer_states  temp);
//--父狀態(tài)是否允許跳轉(zhuǎn)
uint8_t  Father_State_Is_Allow_Jump(void);
//--父狀態(tài)是否要發(fā)生狀態(tài)轉(zhuǎn)換
uint8_t  Is_Three_A_Father_State_Transition(void);
//--夫類狀態(tài)轉(zhuǎn)換
void  Father_State_Transition(E_hsm_father_state  temp);
//--父類更新上一次狀態(tài)
void  Update_Father_Last_State_Transition(void);
//--夫類狀態(tài)內(nèi)部轉(zhuǎn)換
void  Father_Step_Transition(E_father_states  temp);
/*************************************************
* 靜止?fàn)顟B(tài)(夫類)
* 進(jìn)入函數(shù)
* 保持函數(shù)
* 退出函數(shù)
* 錯誤函數(shù)
* *************************************************/
void  F_Static_Init(void );
void  F_Static_Keep(void);
void  F_Satic_Done(void );
void  F_Static_Default(void );
/*************************************************
* 運(yùn)行狀態(tài)(夫類)
* 進(jìn)入函數(shù)
* 保持函數(shù)
* 退出函數(shù)
* 錯誤函數(shù)
* *************************************************/
void  F_Run_Init(void);
void  F_Run_Keep(void );
void  F_Run_Done(void );
void  F_Run_Default(void );
/*************************************************
* 設(shè)置狀態(tài)(子類)依附靜止(夫類)
* 進(jìn)入函數(shù)
* 保持函數(shù)
* 退出函數(shù)
* 錯誤函數(shù)
* *************************************************/
void  C_Static_Set_Init();
void  C_Static_Set_Keep();
void  C_Satic_Set_Done();
void  C_Static_Set_Default();
/*************************************************
* 配網(wǎng)狀態(tài)(子類)依附靜止(夫類)
* 進(jìn)入函數(shù)
* 保持函數(shù)
* 退出函數(shù)
* 錯誤函數(shù)
* *************************************************/
void  C_Static_Distribution_Network_Init(void );
void  C_Static_Distribution_Network_Keep(void );
void  C_Satic_Distribution_Network_Done(void );
void  C_Static_Distribution_Network_Default(void );
/*************************************************
* 待機(jī)狀態(tài)(子類)依附靜止(夫類)
* 進(jìn)入函數(shù)
* 保持函數(shù)
* 退出函數(shù)
* 錯誤函數(shù)
* *************************************************/
void  C_Static_Shut_Down_Init(void );
void  C_Static_Shut_Down_Keep(void );
void  C_Satic_Shut_Down_Done(void );
void  C_Static_Shut_Down_Default(void );
/*************************************************
* 充電狀態(tài)(子類)依附靜止(夫類)
* 進(jìn)入函數(shù)
* 保持函數(shù)
* 退出函數(shù)
* 錯誤函數(shù)
* *************************************************/
void  C_Static_Charge_Init(void );
void  C_Static_Charge_Keep(void );
void  C_Satic_Charge_Done(void );
void  C_Static_Charge_Default(void );

/*************************************************
* 正常狀態(tài)(子類)依附運(yùn)行(夫類)
* 進(jìn)入函數(shù)
* 保持函數(shù)
* 退出函數(shù)
* 錯誤函數(shù)
* *************************************************/
void  C_Run_Normal_Init(void );
void  C_Run_Normal_Keep(void );
void  C_Run_Normal_Done(void );
void  C_Run_Normal_Default(void );
/*************************************************
* 干托狀態(tài)(子類)依附運(yùn)行(夫類)
* 進(jìn)入函數(shù)
* 保持函數(shù)
* 退出函數(shù)
* 錯誤函數(shù)
* *************************************************/
void  C_Run_Dry_Init(void );
void  C_Run_Dry_Keep(void );
void  C_Run_Dry_Done(void );
void  C_Run_Dry_Default(void );
/*************************************************
* 受困狀態(tài)(子類)依附運(yùn)行(夫類)
* 進(jìn)入函數(shù)
* 保持函數(shù)
* 退出函數(shù)
* 錯誤函數(shù)
* *************************************************/
void  C_Run_Besiege_Init(void );
void  C_Run_Besiege_Keep(void );
void  C_Run_Besiege_Done(void);
void  C_Run_Besiege_Default(void);
/*************************************************
* 避障狀態(tài)(子類)依附運(yùn)行(夫類)
* 進(jìn)入函數(shù)
* 保持函數(shù)
* 退出函數(shù)
* 錯誤函數(shù)
* *************************************************/
void  C_Run_Avoid_Obstacles_Init(void );
void  C_Run_Avoid_Obstacles_Keep(void );
void  C_Run_Avoid_Obstacles_Done(void );
void  C_Run_Avoid_Obstacles_Default(void );


#endif
實現(xiàn)文件如下:


/****************************************************************************
作者:小魚兒飛丫飛
日期:2020-6-19
文件名:FSM層次狀態(tài)機(jī)執(zhí)行文件
****************************************************************************/
/****************************************************************************
頭文件
****************************************************************************/
#include  "hsm.h"
/****************************************************************************
紅定義
****************************************************************************/

/****************************************************************************
變量
****************************************************************************/

S_state_fun father_state[2] ={
{F_Static_Init,F_Static_Keep,F_Satic_Done,F_Static_Default},
{F_Run_Init,F_Run_Keep,F_Run_Done,F_Run_Default }
};//--超類/夫類
S_state_fun childer_state[8]={
{ C_Static_Set_Init,C_Static_Set_Keep,C_Satic_Set_Done,C_Static_Set_Default},
{C_Static_Distribution_Network_Init,C_Static_Distribution_Network_Keep,C_Satic_Distribution_Network_Done,C_Static_Distribution_Network_Default},
{C_Static_Shut_Down_Init,C_Static_Shut_Down_Keep,C_Satic_Shut_Down_Done,C_Static_Shut_Down_Default},
{C_Static_Charge_Init,C_Static_Charge_Keep,C_Satic_Charge_Done,C_Static_Charge_Default},
{ C_Run_Normal_Init,C_Run_Normal_Keep,C_Run_Normal_Done,C_Run_Normal_Default},
{ C_Run_Dry_Init,C_Run_Dry_Keep, C_Run_Dry_Done,C_Run_Dry_Default},
{ C_Run_Besiege_Init,C_Run_Besiege_Keep,C_Run_Besiege_Done, C_Run_Besiege_Default},
{C_Run_Avoid_Obstacles_Init,C_Run_Avoid_Obstacles_Keep,C_Run_Avoid_Obstacles_Done,C_Run_Avoid_Obstacles_Default}
};//--子類1
E_father_states s_father_step=s_father_init ; //--父類單個狀態(tài)內(nèi)部轉(zhuǎn)換步驟
E_childer_states s_childer_step = s_childer_init;
E_hsm_father_state hsm_current_father_state =  e_static_state;//--父類初始化
E_hsm_father_state hsm_last_father_state =  e_static_state ;
E_hsm_childer_state hsm_current_childer_state = e_set_state;//--子類初始化
E_hsm_childer_state hsm_last_childer_state = e_set_state;
/****************************************************************************
函數(shù)
狀態(tài)函數(shù)命名規(guī)則
例 : C_Static_Set_Init
C   _  Static_   Set  _    Init
C:子類 F:父類_依附的父類_子類本身名字_該子類狀態(tài)內(nèi)部階段
****************************************************************************/
int  main(void)
{
int update_cnt = 10;
int run_cnt =1;
int cnt;
while(1)
{

if(update_cnt==80)
{
hsm_current_father_state =0;
hsm_current_childer_state = 0;
}
else if(update_cnt==70)
{
hsm_current_father_state =0;
hsm_current_childer_state = 1;
}
else if(update_cnt==60)
{
hsm_current_father_state =0;
hsm_current_childer_state = 2;
}
else if(update_cnt==50)
{
hsm_current_father_state =0;
hsm_current_childer_state = 3;
}
else if(update_cnt==40)
{
hsm_current_father_state =1;
hsm_current_childer_state = 4;
}
else if(update_cnt==30)
{
hsm_current_father_state =1;
hsm_current_childer_state = 5;
}
else if(update_cnt==20)
{
hsm_current_father_state =1;
hsm_current_childer_state = 6;
}
else if(update_cnt==10)
{
hsm_current_father_state =1;
hsm_current_childer_state = 7;
}
update_cnt--;
if(update_cnt==0)
{update_cnt =80;}
// printf("hsm_current_father_state:%d hsm_current_childer_state:%d\r\n",hsm_current_father_state,hsm_current_childer_state);
//=================================父類狀態(tài)機(jī)調(diào)度器=========================================
if(Father_State_Is_Allow_Jump())//--如果允許跳轉(zhuǎn)
father_state[hsm_current_father_state].steps[s_father_step]();//--父類狀態(tài)
else
father_state[hsm_last_father_state].steps[s_father_step]();//--父類狀態(tài)
//==========================================================================

}
return 0;
}
//--子狀態(tài)是否允許跳轉(zhuǎn)
uint8_t  Childer_State_Is_Allow_Jump(void)
{
if(s_childer_step == s_childer_init)
return 1;
else
return 0;
}
//--子狀態(tài)是否要發(fā)生狀態(tài)轉(zhuǎn)換
uint8_t  Is_Three_A_Childer_State_Transition(void)
{
if(hsm_last_childer_state == hsm_current_childer_state)
return 0;
else
return 1;
}
//--子類狀態(tài)轉(zhuǎn)換
void  Childer_State_Transition(E_hsm_childer_state  temp)
{
hsm_current_childer_state = temp;
}
//--子類更新上一次狀態(tài)
void  Update_Childer_Last_State_Transition(void)
{
hsm_last_childer_state = hsm_current_childer_state;
}
//--子類單個狀態(tài)內(nèi)部轉(zhuǎn)換
void  Childer_Step_Transition(E_childer_states  temp)
{
s_childer_step = temp;
}
//--父狀態(tài)是否允許跳轉(zhuǎn)
uint8_t  Father_State_Is_Allow_Jump(void)
{
if(s_father_step == s_father_init)
return 1;
else
return 0;
}
//--父狀態(tài)是否要發(fā)生狀態(tài)轉(zhuǎn)換
uint8_t  Is_Three_A_Father_State_Transition(void)
{
if(hsm_last_father_state == hsm_current_father_state)
return 0;
else
return 1;
}
//--夫類狀態(tài)轉(zhuǎn)換
void  Father_State_Transition(E_hsm_father_state  temp)
{
hsm_current_father_state = temp;
}
//--父類更新上一次狀態(tài)
void  Update_Father_Last_State_Transition(void)
{
hsm_last_father_state = hsm_current_father_state;
}
//--夫類狀態(tài)內(nèi)部轉(zhuǎn)換
void  Father_Step_Transition(E_father_states  temp)
{
s_father_step = temp;
}
/*************************************************
* 靜止?fàn)顟B(tài)(夫類)
* 進(jìn)入函數(shù)
* 保持函數(shù)
* 退出函數(shù)
* 錯誤函數(shù)
* *************************************************/
void  F_Static_Init(void)
{
Update_Father_Last_State_Transition();
//---------------------
//--代碼段
printf("===父類:靜止?fàn)顟B(tài)====進(jìn)入函數(shù)>>>>>>>>>>>>>>>>>>>>>\r\n");
//--------------------
Father_Step_Transition(s_father_keep);
}
void  F_Static_Keep(void )
{
//---------------------
//--代碼段
// printf("===父類:靜止?fàn)顟B(tài)====保持函數(shù)--------------------\r\n");
//==========子類狀態(tài)機(jī)調(diào)度器======================
if(Childer_State_Is_Allow_Jump())//--如果允許跳轉(zhuǎn)
{
//--如果父類出現(xiàn)類跳轉(zhuǎn),子類已經(jīng)做好跳轉(zhuǎn)的準(zhǔn)備,但是父類還未做好跳轉(zhuǎn)的準(zhǔn)備,此時不執(zhí)行子類跳轉(zhuǎn)
if(Is_Three_A_Father_State_Transition())
{
Father_Step_Transition(s_father_done);
return;
}
else
Father_Step_Transition(s_father_keep);
childer_state[hsm_current_childer_state].steps[s_childer_step]();//--子類狀態(tài)
}
else
childer_state[hsm_last_childer_state].steps[s_childer_step]();//--子類狀態(tài)
//--------------------

}
void  F_Satic_Done(void)
{
//---------------------
//--代碼段
printf("===父類:靜止?fàn)顟B(tài)====退出函數(shù)<<<<<<<<<<<<<<<<<<<<<<<<\r\n");
//--------------------
//--內(nèi)部切換
Father_Step_Transition(s_father_init);
}
void  F_Static_Default(void )
{
;
}
/*************************************************
* 運(yùn)行狀態(tài)(夫類)
* 進(jìn)入函數(shù)
* 保持函數(shù)
* 退出函數(shù)
* 錯誤函數(shù)
* *************************************************/
void  F_Run_Init(void )
{
Update_Father_Last_State_Transition();
//---------------------
//--代碼段
printf("===父類:運(yùn)行狀態(tài)====進(jìn)入函數(shù)>>>>>>>>>>>>>>>>>>>>>>>>>>\r\n");
//--------------------
Father_Step_Transition(s_father_keep);
}
void  F_Run_Keep(void )
{
//---------------------
//--代碼段
//printf("===父類:運(yùn)行狀態(tài)====保持函數(shù)--------------------\r\n");
//==========子類狀態(tài)機(jī)調(diào)度器======================
if(Childer_State_Is_Allow_Jump())//--如果允許跳轉(zhuǎn)
{
//--如果父類出現(xiàn)類跳轉(zhuǎn),子類已經(jīng)做好跳轉(zhuǎn)的準(zhǔn)備,但是父類還未做好跳轉(zhuǎn)的準(zhǔn)備,此時不執(zhí)行子類跳轉(zhuǎn)
if(Is_Three_A_Father_State_Transition())
{
Father_Step_Transition(s_father_done);
return;
}
else
Father_Step_Transition(s_father_keep);
childer_state[hsm_current_childer_state].steps[s_childer_step]();//--子類狀態(tài)
}
else
childer_state[hsm_last_childer_state].steps[s_childer_step]();//--子類狀態(tài)
}
void  F_Run_Done(void)
{
//---------------------
//--代碼段
printf("===父類:運(yùn)行狀態(tài)====退出函數(shù)<<<<<<<<<<<<<<<<<<<<<<\r\n");
//--------------------
//--內(nèi)部切換
Father_Step_Transition(s_father_init);
}
void  F_Run_Default(void )
{
;
}
/*************************************************
* 設(shè)置狀態(tài)(子類)依附靜止(夫類)
* 進(jìn)入函數(shù)
* 保持函數(shù)
* 退出函數(shù)
* 錯誤函數(shù)
* *************************************************/
void  C_Static_Set_Init(void )
{
Update_Childer_Last_State_Transition();
//---------------------
//--代碼段
printf("===子類:設(shè)置狀態(tài)====進(jìn)入函數(shù)>>>\r\n");
//--------------------
Childer_Step_Transition(s_childer_keep);
}
void  C_Static_Set_Keep(void )
{
//---------------------
//--代碼段
printf("===子類:設(shè)置狀態(tài)====保持函數(shù)\r\n");
//--------------------
if(Is_Three_A_Childer_State_Transition())
Childer_Step_Transition(s_childer_done);
else
Childer_Step_Transition(s_childer_keep);
}
void  C_Satic_Set_Done(void )
{
//---------------------
//--代碼段
printf("===子類:設(shè)置狀態(tài)====退出函數(shù)<<<\r\n");
//--------------------
//--內(nèi)部切換
Childer_Step_Transition(s_childer_init);
}
void  C_Static_Set_Default(void)
{
;
}
/*************************************************
* 配網(wǎng)狀態(tài)(子類)依附靜止(夫類)
* 進(jìn)入函數(shù)
* 保持函數(shù)
* 退出函數(shù)
* 錯誤函數(shù)
* *************************************************/
void  C_Static_Distribution_Network_Init(void )
{
Update_Childer_Last_State_Transition();
//---------------------
//--代碼段
printf("===子類:陪網(wǎng)狀態(tài)====進(jìn)入函數(shù)>>>\r\n");
//--------------------
Childer_Step_Transition(s_childer_keep);
}
void  C_Static_Distribution_Network_Keep(void )
{
//---------------------
//--代碼段
printf("===子類:陪網(wǎng)狀態(tài)====保持函數(shù)\r\n");
//--------------------
if(Is_Three_A_Childer_State_Transition())
Childer_Step_Transition(s_childer_done);
else
Childer_Step_Transition(s_childer_keep);
}
void  C_Satic_Distribution_Network_Done(void )
{
//---------------------
//--代碼段
printf("===子類:陪網(wǎng)狀態(tài)====退出函數(shù)<<<\r\n");
//--------------------
//--內(nèi)部切換
Childer_Step_Transition(s_childer_init);
}
void  C_Static_Distribution_Network_Default(void )
{
;
}
/*************************************************
* 待機(jī)狀態(tài)(子類)依附靜止(夫類)
* 進(jìn)入函數(shù)
* 保持函數(shù)
* 退出函數(shù)
* 錯誤函數(shù)
* *************************************************/
void  C_Static_Shut_Down_Init(void )
{
Update_Childer_Last_State_Transition();
//---------------------
//--代碼段
printf("===子類:待機(jī)狀態(tài)====進(jìn)入函數(shù)>>>\r\n");
//--------------------
Childer_Step_Transition(s_childer_keep);
}
void  C_Static_Shut_Down_Keep(void )
{
//---------------------
//--代碼段
printf("===子類:待機(jī)狀態(tài)====保持函數(shù)\r\n");
//--------------------
if(Is_Three_A_Childer_State_Transition())
Childer_Step_Transition(s_childer_done);
else
Childer_Step_Transition(s_childer_keep);
}
void  C_Satic_Shut_Down_Done(void )
{
//---------------------
//--代碼段
printf("===子類:待機(jī)狀態(tài)====退出函數(shù)<<<\r\n");
//--------------------
//--內(nèi)部切換
Childer_Step_Transition(s_childer_init);
}
void  C_Static_Shut_Down_Default(void )
{
;
}

/*************************************************
* 充電狀態(tài)(子類)依附靜止(夫類)
* 進(jìn)入函數(shù)
* 保持函數(shù)
* 退出函數(shù)
* 錯誤函數(shù)
* *************************************************/

void  C_Static_Charge_Init(void )
{
Update_Childer_Last_State_Transition();
//---------------------
//--代碼段
printf("===子類:充電狀態(tài)====進(jìn)入函數(shù)>>>\r\n");
//--------------------
Childer_Step_Transition(s_childer_keep);
}
void  C_Static_Charge_Keep(void )
{
//---------------------
//--代碼段
printf("===子類:充電狀態(tài)====保持函數(shù)\r\n");
//--------------------
if(Is_Three_A_Childer_State_Transition())
Childer_Step_Transition(s_childer_done);
else
Childer_Step_Transition(s_childer_keep);
}
void  C_Satic_Charge_Done(void )
{
//---------------------
//--代碼段
printf("===子類:充電狀態(tài)====退出函數(shù)<<<\r\n");
//--------------------
//--內(nèi)部切換
Childer_Step_Transition(s_childer_init);
}
void  C_Static_Charge_Default(void )
{
;
}

/*************************************************
* 正常狀態(tài)(子類)依附運(yùn)行(夫類)
* 進(jìn)入函數(shù)
* 保持函數(shù)
* 退出函數(shù)
* 錯誤函數(shù)
* *************************************************/
void  C_Run_Normal_Init(void )
{
Update_Childer_Last_State_Transition();
//---------------------
//--代碼段
printf("===子類:正常狀態(tài)====進(jìn)入函數(shù)>>>\r\n");
//--------------------
Childer_Step_Transition(s_childer_keep);
}
void  C_Run_Normal_Keep(void )
{
//---------------------
//--代碼段
printf("===子類:正常狀態(tài)====保持函數(shù)\r\n");
//--------------------
if(Is_Three_A_Childer_State_Transition())
Childer_Step_Transition(s_childer_done);
else
Childer_Step_Transition(s_childer_keep);
}
void  C_Run_Normal_Done(void)
{
//---------------------
//--代碼段
printf("===子類:正常狀態(tài)====退出函數(shù)<<<\r\n");
//--------------------
//--內(nèi)部切換
Childer_Step_Transition(s_childer_init);
}
void  C_Run_Normal_Default(void)
{
;
}
/*************************************************
* 干托狀態(tài)(子類)依附運(yùn)行(夫類)
* 進(jìn)入函數(shù)
* 保持函數(shù)
* 退出函數(shù)
* 錯誤函數(shù)
* *************************************************/
void  C_Run_Dry_Init(void )
{
Update_Childer_Last_State_Transition();
//---------------------
//--代碼段
printf("===子類:干托狀態(tài)====進(jìn)入函數(shù)>>>\r\n");
//--------------------
Childer_Step_Transition(s_childer_keep);
}
void  C_Run_Dry_Keep(void )
{
//---------------------
//--代碼段
printf("===子類:干托狀態(tài)====保持函數(shù)\r\n");
//--------------------
if(Is_Three_A_Childer_State_Transition())
Childer_Step_Transition(s_childer_done);
else
Childer_Step_Transition(s_childer_keep);
}
void  C_Run_Dry_Done(void )
{
//---------------------
//--代碼段
printf("===子類:干托狀態(tài)====退出函數(shù)<<<\r\n");
//--------------------
//--內(nèi)部切換
Childer_Step_Transition(s_childer_init);
}
void  C_Run_Dry_Default(void )
{
;
}
/*************************************************
* 受困狀態(tài)(子類)依附運(yùn)行(夫類)
* 進(jìn)入函數(shù)
* 保持函數(shù)
* 退出函數(shù)
* 錯誤函數(shù)
* *************************************************/
void  C_Run_Besiege_Init(void )
{
Update_Childer_Last_State_Transition();
//---------------------
//--代碼段
printf("===子類:受困狀態(tài)====進(jìn)入函數(shù)>>>\r\n");
//--------------------
Childer_Step_Transition(s_childer_keep);
}
void  C_Run_Besiege_Keep(void )
{
//---------------------
//--代碼段
printf("===子類:受困狀態(tài)====保持函數(shù)\r\n");
//--------------------
if(Is_Three_A_Childer_State_Transition())
Childer_Step_Transition(s_childer_done);
else
Childer_Step_Transition(s_childer_keep);
}
void  C_Run_Besiege_Done(void )
{
//---------------------
//--代碼段
printf("===子類:受困狀態(tài)====退出函數(shù)<<<\r\n");
//--------------------
//--內(nèi)部切換
Childer_Step_Transition(s_childer_init);
}
void  C_Run_Besiege_Default(void )
{
;
}
/*************************************************
* 避障狀態(tài)(子類)依附運(yùn)行(夫類)
* 進(jìn)入函數(shù)
* 保持函數(shù)
* 退出函數(shù)
* 錯誤函數(shù)
* *************************************************/
void  C_Run_Avoid_Obstacles_Init(void )
{
Update_Childer_Last_State_Transition();
//---------------------
//--代碼段
printf("===子類:避障狀態(tài)====進(jìn)入函數(shù)>>>\r\n");
//--------------------
Childer_Step_Transition(s_childer_keep);
}
void  C_Run_Avoid_Obstacles_Keep(void )
{
//---------------------
//--代碼段
printf("===子類:避障狀態(tài)====保持函數(shù)\r\n");
//--------------------
if(Is_Three_A_Childer_State_Transition())
Childer_Step_Transition(s_childer_done);
else
Childer_Step_Transition(s_childer_keep);
}
void  C_Run_Avoid_Obstacles_Done(void )
{
//---------------------
//--代碼段
printf("===子類:避障狀態(tài)====退出函數(shù)<<<\r\n");
//--------------------
//--內(nèi)部切換
Childer_Step_Transition(s_childer_init);
}
void  C_Run_Avoid_Obstacles_Default(void )
{
;
}

三、運(yùn)行情況

版權(quán)歸原作者所有,如有轉(zhuǎn)載請聯(lián)系我,如有侵權(quán),請聯(lián)系刪除。????????????????  END  ????????????????
關(guān)注我的微信公眾號,回復(fù)“加群”按規(guī)則加入技術(shù)交流群。


歡迎關(guān)注我的視頻號:



本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫?dú)角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

加利福尼亞州圣克拉拉縣2024年8月30日 /美通社/ -- 數(shù)字化轉(zhuǎn)型技術(shù)解決方案公司Trianz今天宣布,該公司與Amazon Web Services (AWS)簽訂了...

關(guān)鍵字: AWS AN BSP 數(shù)字化

倫敦2024年8月29日 /美通社/ -- 英國汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動 BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時企業(yè)卻面臨越來越多業(yè)務(wù)中斷的風(fēng)險,如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報道,騰訊和網(wǎng)易近期正在縮減他們對日本游戲市場的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會開幕式在貴陽舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點: 有效應(yīng)對環(huán)境變化,經(jīng)營業(yè)績穩(wěn)中有升 落實提質(zhì)增效舉措,毛利潤率延續(xù)升勢 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競爭力 堅持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競爭優(yōu)勢...

關(guān)鍵字: 通信 BSP 電信運(yùn)營商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺與中國電影電視技術(shù)學(xué)會聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會上宣布正式成立。 活動現(xiàn)場 NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會上,軟通動力信息技術(shù)(集團(tuán))股份有限公司(以下簡稱"軟通動力")與長三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉