일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 공부집중
- Firebase
- 명심보감
- Android
- 공자명언
- 이모지메모
- DART
- 파이썬
- 넷플릭스
- androidx
- 좋은글필사하기
- Flutter
- Freesound
- ASMR
- 코틀린
- Linux
- kotlin
- bash
- jetpack compose
- 벤자민플랭클린
- Streaming
- 오픈소스
- recyclerview
- 이모지
- Coroutine
- 1인개발자
- 장자명언
- 명언모음
- FSM
- 소울칼리버6
Archives
- Today
- Total
Vintage appMaker의 Tech Blog
fsm 본문
fsm
FSM(Finite state machine)의 가장 큰 目的은
if문을 적게 사용하면서 상태를 관리하고자 하는 것이다.
어떤 상태에 따라 어떤 이벤트가 들어오면 처리하는 구조로
수많은 방법들이 있다. 예제에서는 macro와 class상속을 이용했다.
그러므로 fsm.h를 include하고 CFSM을 상속받아 처리하면된다.
/*
제목 : 상태관리자-FSM
목적 : 프로그램의 한정된 흐름을 규칙적으로 제어한다.
작성자: 박성완
작성일: 2005.04.20
참고 : 1) 상태와 이벤트로 분기점을 가진다.
2) Handler 테이블로 관리할 수 있다.
3) 상태전이에 대한 메소드를 제공한다.
4) 상태는 내부에서 제어한다. 이벤트는 외부 입력항목이다.
수정일: 2007.08.02
1) 좀더 간략하게 처리 하기 위해 TABLE 삭제
수정일: 2017.08.22 <- 10년만!!
1) VC6.0 소스를 C++ 11 및 g++에 맞게 수정
*/
#ifndef __PSW_SNAKE_CFSM_BASE__
#define __PSW_SNAKE_CFSM_BASE__
// 매크로 정의부
#define STATE( a ) SetAction( static_cast<CFSM::Action>( a ) );
#define BEGIN_EVT_MAP( e ) switch(e.EVT){
#define END_EVT_MAP }
#define CNT_EVT return CFSM::CONTINUE;
#define END_EVT break;
#define ONEVENT( a ) case a:
#define PASS_EVT( a ) STATE( a ) CNT_EVT;
// 이벤트와 매개변수
// 처리 클래스
class CFSM_EVT
{
public:
unsigned EVT;
long pParam;
};
// 한정상태기계(Finate State Machine)
// BASE 클래스
class CFSM
{
public:
typedef int (CFSM::*Action)(CFSM_EVT);
CFSM(){StateHandler = &CFSM::doNothing; }
enum state{
COMPLETE = 0, // 메시지 처리 완료
CONTINUE // 상태변화 메시지, 처리 진행 한번더..
};
// >>외부 이벤트 처리
// 설정된 이벤트와 상태값을 X,Y로
// 핸들러테이블의 함수를 호출한다.
void DoEvent(CFSM_EVT evt)
{
int nRst = 1;
while (nRst){
nRst = (this->*StateHandler)(evt);
}
}
// 아무것도 안하는 함수는 어디서나 필요하다.
int doNothing(CFSM_EVT e) { return COMPLETE;}
protected:
// 상태를 전이한다.
inline void SetAction(Action a)
{
StateHandler = a;
}
private:
Action StateHandler;
};
#endif
- 컴파일
- 디버깅
'Source code or Tip > Others' 카테고리의 다른 글
HTML5 튜토리얼 사이트 - W3School(javascript, css, ...) (0) | 2020.09.23 |
---|---|
Online Compiler(Playground) - Kotlin, Swift, SwiftUI, Dart, Flutter (0) | 2020.09.11 |
라즈베리파이 3 – SDCard에 파일설정해서 Wifi 접속 (0) | 2020.08.07 |
java에서 fsm구현을 위해 reflection 사용 (0) | 2020.07.20 |
fsm-c-style- FSM을 사용하는 이유 (0) | 2020.07.20 |
Comments