⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fsm.h

📁 介绍ROCK OS操作系统.一般用于汽车电子,类似OCVX.里面是个DEMO文档,内附说明.
💻 H
字号:
/******************************************************************************
    Copyright (c) 2006 by RockOS.
    All rights reserved.

    This software is supported by the Rock Software Workroom only.

    Any bugs please contact the author with e-mail or QQ:
     E-mail : baobaoba520@yahoo.com.cn
         QQ : 59681888
*******************************************************************************
File name   : fsm.h
Description : header file for fsm management for RockOS.
            : 
            : 
Auther      : sunxinqiu
History     :
  2006-3-15   first release.
******************************************************************************/
#ifndef __FSM_H__
#define __FSM_H__

#ifdef __cplusplus
extern "C" {
#endif

#define FSM_DUMP_ALL_INST   ((HANDLE)0xFFFFFFFE)
enum
{
    OS_FSM_FREE = 0,
    OS_FSM_BUSY = 1
};

enum
{
    FSM_STATE_NAME  = 0,
    FSM_EVENT_NAME  = 1,
    FSM_ACTION_NAME = 2
};

/* action for a state-event combination. */
typedef void (*FSM_ACTION)(HANDLE hInst, void * param);

/* fsm map provide by application. */
typedef struct
{
    U16 oldState;
    U16 event;

    FSM_ACTION action;
}FSM_MAP;

typedef struct
{
    U32 value;
    char name[MAX_NAME_LEN+1];    /* its name. */
}FSM_NAME_TBL;

/* to get the current state. */
typedef U16 (* GET_OLD_STATE)(HANDLE hInst);

/* to dump the FSM scheduler track. */
typedef void (* FSM_DUMP)(HFSM hFsm, HANDLE hInst, U16 oldState, U16 event, void *action);

/* this is a copy of fsm map, but it is sorted for search.*/
typedef struct
{
    U32 index;  /* combined by oldState and event from FSM_MAP. */
    FSM_ACTION action;
}FSM_IDX_MAP;

/* the FSM CB. */
typedef struct
{
    U16 state;  /* free or registered. */

    HTASK owner;
    char  name[MAX_NAME_LEN+1];

    GET_OLD_STATE getOldState;

    FSM_DUMP    dumpFsm;

    U16 nIdxCount;    /* the count of index map entry. */
    FSM_IDX_MAP * pIndexMap;

    U32 stateTblSize;
    FSM_NAME_TBL * pStateTbl;

    U32 eventTblSize;
    FSM_NAME_TBL * pEventTbl;

    U32 actionTblSize;
    FSM_NAME_TBL * pActionTbl;
}FSMCB;

STATUS fsm_init(void);
HFSM fsmCreate(FSM_MAP * pfsmMap, U16 counter, HTASK owner, const char * name);
STATUS fsmReg(HFSM hFsm, GET_OLD_STATE getOldState, FSM_DUMP dumpFsm);
STATUS fsmRegNameTable(HFSM hFsm, U32 type, U32 size, const FSM_NAME_TBL * pNameTbl);
STATUS fsmSetTrig (HFSM hFsm, HANDLE hInst, U16 event, void * pData);
STATUS fsmDestroy (HFSM hFsm);
FSM_IDX_MAP * fsmCreateIdxMap (HFSM hFsm, FSM_MAP * pfsmMap, U16 counter);
FSM_ACTION fsmGetAction(HFSM hFsm, U16 oldState, U16 event);
const char * fsmGetName(HFSM hFsm, U32 type, U32 value);
void fsmDumpDefault (HFSM hFsm, HANDLE hInst, U16 oldState, U16 event, void *action);

void fsmShowAll(void);
void fsmShowSingle(HFSM hfsm);

#ifdef __cplusplus
}
#endif

#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -