日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

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

關注、星標公眾號,直達精彩內(nèi)容



來源:小魚兒飛丫飛


整理:技術讓夢想更偉大 | 李肖遙



前言:

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


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

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


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


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


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


二、直接上代碼

頭文件如下:


/****************************************************************************
作者:小魚兒飛丫飛
日期:2020-6-19
文件名:FSM層次狀態(tài)機頭文件
****************************************************************************/
#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;//--當前父狀態(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;//--當前子狀態(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);
/*************************************************
* 靜止狀態(tài)(夫類)
* 進入函數(shù)
* 保持函數(shù)
* 退出函數(shù)
* 錯誤函數(shù)
* *************************************************/
void  F_Static_Init(void );
void  F_Static_Keep(void);
void  F_Satic_Done(void );
void  F_Static_Default(void );
/*************************************************
* 運行狀態(tài)(夫類)
* 進入函數(shù)
* 保持函數(shù)
* 退出函數(shù)
* 錯誤函數(shù)
* *************************************************/
void  F_Run_Init(void);
void  F_Run_Keep(void );
void  F_Run_Done(void );
void  F_Run_Default(void );
/*************************************************
* 設置狀態(tài)(子類)依附靜止(夫類)
* 進入函數(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)(子類)依附靜止(夫類)
* 進入函數(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 );
/*************************************************
* 待機狀態(tài)(子類)依附靜止(夫類)
* 進入函數(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)(子類)依附靜止(夫類)
* 進入函數(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)(子類)依附運行(夫類)
* 進入函數(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)(子類)依附運行(夫類)
* 進入函數(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)(子類)依附運行(夫類)
* 進入函數(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)(子類)依附運行(夫類)
* 進入函數(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)機執(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)機調(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;
}
/*************************************************
* 靜止狀態(tài)(夫類)
* 進入函數(shù)
* 保持函數(shù)
* 退出函數(shù)
* 錯誤函數(shù)
* *************************************************/
void  F_Static_Init(void)
{
Update_Father_Last_State_Transition();
//---------------------
//--代碼段
printf("===父類:靜止狀態(tài)====進入函數(shù)>>>>>>>>>>>>>>>>>>>>>\r\n");
//--------------------
Father_Step_Transition(s_father_keep);
}
void  F_Static_Keep(void )
{
//---------------------
//--代碼段
// printf("===父類:靜止狀態(tài)====保持函數(shù)--------------------\r\n");
//==========子類狀態(tài)機調(diào)度器======================
if(Childer_State_Is_Allow_Jump())//--如果允許跳轉(zhuǎn)
{
//--如果父類出現(xiàn)類跳轉(zhuǎn),子類已經(jīng)做好跳轉(zhuǎn)的準備,但是父類還未做好跳轉(zhuǎ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("===父類:靜止狀態(tài)====退出函數(shù)<<<<<<<<<<<<<<<<<<<<<<<<\r\n");
//--------------------
//--內(nèi)部切換
Father_Step_Transition(s_father_init);
}
void  F_Static_Default(void )
{
;
}
/*************************************************
* 運行狀態(tài)(夫類)
* 進入函數(shù)
* 保持函數(shù)
* 退出函數(shù)
* 錯誤函數(shù)
* *************************************************/
void  F_Run_Init(void )
{
Update_Father_Last_State_Transition();
//---------------------
//--代碼段
printf("===父類:運行狀態(tài)====進入函數(shù)>>>>>>>>>>>>>>>>>>>>>>>>>>\r\n");
//--------------------
Father_Step_Transition(s_father_keep);
}
void  F_Run_Keep(void )
{
//---------------------
//--代碼段
//printf("===父類:運行狀態(tài)====保持函數(shù)--------------------\r\n");
//==========子類狀態(tài)機調(diào)度器======================
if(Childer_State_Is_Allow_Jump())//--如果允許跳轉(zhuǎn)
{
//--如果父類出現(xiàn)類跳轉(zhuǎn),子類已經(jīng)做好跳轉(zhuǎn)的準備,但是父類還未做好跳轉(zhuǎ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("===父類:運行狀態(tài)====退出函數(shù)<<<<<<<<<<<<<<<<<<<<<<\r\n");
//--------------------
//--內(nèi)部切換
Father_Step_Transition(s_father_init);
}
void  F_Run_Default(void )
{
;
}
/*************************************************
* 設置狀態(tài)(子類)依附靜止(夫類)
* 進入函數(shù)
* 保持函數(shù)
* 退出函數(shù)
* 錯誤函數(shù)
* *************************************************/
void  C_Static_Set_Init(void )
{
Update_Childer_Last_State_Transition();
//---------------------
//--代碼段
printf("===子類:設置狀態(tài)====進入函數(shù)>>>\r\n");
//--------------------
Childer_Step_Transition(s_childer_keep);
}
void  C_Static_Set_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_Set_Done(void )
{
//---------------------
//--代碼段
printf("===子類:設置狀態(tài)====退出函數(shù)<<<\r\n");
//--------------------
//--內(nèi)部切換
Childer_Step_Transition(s_childer_init);
}
void  C_Static_Set_Default(void)
{
;
}
/*************************************************
* 配網(wǎng)狀態(tài)(子類)依附靜止(夫類)
* 進入函數(shù)
* 保持函數(shù)
* 退出函數(shù)
* 錯誤函數(shù)
* *************************************************/
void  C_Static_Distribution_Network_Init(void )
{
Update_Childer_Last_State_Transition();
//---------------------
//--代碼段
printf("===子類:陪網(wǎng)狀態(tài)====進入函數(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 )
{
;
}
/*************************************************
* 待機狀態(tài)(子類)依附靜止(夫類)
* 進入函數(shù)
* 保持函數(shù)
* 退出函數(shù)
* 錯誤函數(shù)
* *************************************************/
void  C_Static_Shut_Down_Init(void )
{
Update_Childer_Last_State_Transition();
//---------------------
//--代碼段
printf("===子類:待機狀態(tài)====進入函數(shù)>>>\r\n");
//--------------------
Childer_Step_Transition(s_childer_keep);
}
void  C_Static_Shut_Down_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_Shut_Down_Done(void )
{
//---------------------
//--代碼段
printf("===子類:待機狀態(tài)====退出函數(shù)<<<\r\n");
//--------------------
//--內(nèi)部切換
Childer_Step_Transition(s_childer_init);
}
void  C_Static_Shut_Down_Default(void )
{
;
}

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

void  C_Static_Charge_Init(void )
{
Update_Childer_Last_State_Transition();
//---------------------
//--代碼段
printf("===子類:充電狀態(tài)====進入函數(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)(子類)依附運行(夫類)
* 進入函數(shù)
* 保持函數(shù)
* 退出函數(shù)
* 錯誤函數(shù)
* *************************************************/
void  C_Run_Normal_Init(void )
{
Update_Childer_Last_State_Transition();
//---------------------
//--代碼段
printf("===子類:正常狀態(tài)====進入函數(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)(子類)依附運行(夫類)
* 進入函數(shù)
* 保持函數(shù)
* 退出函數(shù)
* 錯誤函數(shù)
* *************************************************/
void  C_Run_Dry_Init(void )
{
Update_Childer_Last_State_Transition();
//---------------------
//--代碼段
printf("===子類:干托狀態(tài)====進入函數(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)(子類)依附運行(夫類)
* 進入函數(shù)
* 保持函數(shù)
* 退出函數(shù)
* 錯誤函數(shù)
* *************************************************/
void  C_Run_Besiege_Init(void )
{
Update_Childer_Last_State_Transition();
//---------------------
//--代碼段
printf("===子類:受困狀態(tài)====進入函數(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)(子類)依附運行(夫類)
* 進入函數(shù)
* 保持函數(shù)
* 退出函數(shù)
* 錯誤函數(shù)
* *************************************************/
void  C_Run_Avoid_Obstacles_Init(void )
{
Update_Childer_Last_State_Transition();
//---------------------
//--代碼段
printf("===子類:避障狀態(tài)====進入函數(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 )
{
;
}

三、運行情況

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


歡迎關注我的視頻號:



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

LED驅(qū)動電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關鍵字: 驅(qū)動電源

在工業(yè)自動化蓬勃發(fā)展的當下,工業(yè)電機作為核心動力設備,其驅(qū)動電源的性能直接關系到整個系統(tǒng)的穩(wěn)定性和可靠性。其中,反電動勢抑制與過流保護是驅(qū)動電源設計中至關重要的兩個環(huán)節(jié),集成化方案的設計成為提升電機驅(qū)動性能的關鍵。

關鍵字: 工業(yè)電機 驅(qū)動電源

LED 驅(qū)動電源作為 LED 照明系統(tǒng)的 “心臟”,其穩(wěn)定性直接決定了整個照明設備的使用壽命。然而,在實際應用中,LED 驅(qū)動電源易損壞的問題卻十分常見,不僅增加了維護成本,還影響了用戶體驗。要解決這一問題,需從設計、生...

關鍵字: 驅(qū)動電源 照明系統(tǒng) 散熱

根據(jù)LED驅(qū)動電源的公式,電感內(nèi)電流波動大小和電感值成反比,輸出紋波和輸出電容值成反比。所以加大電感值和輸出電容值可以減小紋波。

關鍵字: LED 設計 驅(qū)動電源

電動汽車(EV)作為新能源汽車的重要代表,正逐漸成為全球汽車產(chǎn)業(yè)的重要發(fā)展方向。電動汽車的核心技術之一是電機驅(qū)動控制系統(tǒng),而絕緣柵雙極型晶體管(IGBT)作為電機驅(qū)動系統(tǒng)中的關鍵元件,其性能直接影響到電動汽車的動力性能和...

關鍵字: 電動汽車 新能源 驅(qū)動電源

在現(xiàn)代城市建設中,街道及停車場照明作為基礎設施的重要組成部分,其質(zhì)量和效率直接關系到城市的公共安全、居民生活質(zhì)量和能源利用效率。隨著科技的進步,高亮度白光發(fā)光二極管(LED)因其獨特的優(yōu)勢逐漸取代傳統(tǒng)光源,成為大功率區(qū)域...

關鍵字: 發(fā)光二極管 驅(qū)動電源 LED

LED通用照明設計工程師會遇到許多挑戰(zhàn),如功率密度、功率因數(shù)校正(PFC)、空間受限和可靠性等。

關鍵字: LED 驅(qū)動電源 功率因數(shù)校正

在LED照明技術日益普及的今天,LED驅(qū)動電源的電磁干擾(EMI)問題成為了一個不可忽視的挑戰(zhàn)。電磁干擾不僅會影響LED燈具的正常工作,還可能對周圍電子設備造成不利影響,甚至引發(fā)系統(tǒng)故障。因此,采取有效的硬件措施來解決L...

關鍵字: LED照明技術 電磁干擾 驅(qū)動電源

開關電源具有效率高的特性,而且開關電源的變壓器體積比串聯(lián)穩(wěn)壓型電源的要小得多,電源電路比較整潔,整機重量也有所下降,所以,現(xiàn)在的LED驅(qū)動電源

關鍵字: LED 驅(qū)動電源 開關電源

LED驅(qū)動電源是把電源供應轉(zhuǎn)換為特定的電壓電流以驅(qū)動LED發(fā)光的電壓轉(zhuǎn)換器,通常情況下:LED驅(qū)動電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關鍵字: LED 隧道燈 驅(qū)動電源
關閉