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

📄 ml_typw.h

📁 是一个手机功能的模拟程序
💻 H
📖 第 1 页 / 共 5 页
字号:
             xmk_SendSimple (SIG_IDNODE);
   #endif
#else
   /*
   ** No simple output function available - use complex one
   ** This output function can handle signal priorities.
   */
   #define SDL_OUTP_NPAR(PRIO,SIG_NAME,SIG_IDNODE,RECEIVER,NUM,SIG_NAME_STRING) \
           PRINTF_OUTPUT(SIG_NAME_STRING); \
           XMK_VOID XMK_SF(SIG_IDNODE,PRIO,0,(void xmk_RAM_ptr) NULL,RECEIVER);
#endif

#define SDL_OUTP_PAR(PRIO,SIG_NAME,SIG_IDNODE,RECEIVER,NUM,SIG_NAME_STRING) \
        PRINTF_OUTPUT(SIG_NAME_STRING); \
        XMK_VOID XMK_SF(SIG_IDNODE,PRIO,sizeof(NUM), \
        (void  xmk_RAM_ptr) xmk_OutputSignalPtr,RECEIVER); }

#define SDL_OUTP_NPAR_ENV(PRIO,SIG_NAME,SIG_IDNODE,RECEIVER,NUM,SIG_NAME_STRING) \
        PRINTF_OUTPUT(SIG_NAME_STRING); \
        XMK_VOID XMK_SF (SIG_IDNODE,PRIO,0,(void xmk_RAM_ptr) NULL,RECEIVER);

#define SDL_OUTP_PAR_ENV(PRIO,SIG_NAME,SIG_IDNODE,RECEIVER,NUM,SIG_NAME_STRING) \
        PRINTF_OUTPUT(SIG_NAME_STRING); \
        XMK_VOID XMK_SF (SIG_IDNODE,PRIO,sizeof (NUM), (void xmk_RAM_ptr) xmk_OutputSignalPtr ,RECEIVER); }

/*
** The following macro is used in SDL_OUTP - macro calls
*/
#ifndef XMK_USED_ONLY_X_1
  #define TO_PROCESS(PROC_NAME, PROC_IDNODE) \
                            xmk_Determine_Receiver(XCAT(XPTID_,PROC_IDNODE))
#else
  #define TO_PROCESS(PROC_NAME, PROC_IDNODE) XCAT(XPTID_,PROC_IDNODE)
#endif

/*
** Macro for use in the environment functions for user
** can be used in xInEnv () or in an interrupt service routine
** Main use is to send the ENV-PID to xmk_Send () ...
*/
#define XMK_SEND_ENV(ENV_ID,SIG_IDNODE,PRIO,SIG_PAR_LEN,SIG_PTR,RECEIVER) \
        xtmpPID = xRunPID ;                                               \
        xRunPID = ENV_ID ;                                                \
        XMK_SF(SIG_IDNODE,PRIO,SIG_PAR_LEN,SIG_PTR,RECEIVER);             \
        xRunPID = xtmpPID;

#define XMK_SEND_TMP_VARS    xPID xtmpPID;


/* ---------------------------- Create --------------------------- */

#define STARTUP_VARS
        /* empty */

#define ALLOC_STARTUP_NPAR(PROC_NAME, STARTUP_IDNODE, STARTUP_PAR_TYPE, XNL)
        /* empty */

/*
** Not relevant for Cmicro in SDT/Tau product release ;
*/
#define ALLOC_STARTUP(PROC_NAME, STARTUP_IDNODE, STARTUP_PAR_TYPE) \
        xmk_OutputSignalPtr = getnewmemoryfor_ALLOC_STARTUP ();

/*
** Not relevant for Cmicro in SDT/Tau product release ;
*/
#define ALLOC_STARTUP_THIS \
        xmk_OutputSignalPtr = getnewmemoryfor_ALLOC_STARTUP_THIS ();

#define STARTUP_ALLOC_ERROR
#define STARTUP_ALLOC_ERROR_END
#define STARTUP_DATA_PTR \
        xmk_OutputSignalPtr->VarP

#define SDL_CREATE(PROC_NAME, PROC_IDNODE, PROC_NAME_STRING, STARTUP_IDNODE, PRIV_DATA_TYPE, PRIO, PAD_FUNCTION) \
        PRINTF_CREATE(PROC_NAME_STRING); \
        XMK_VOID xmk_CreateProcess (XCAT(XPTID_,PROC_IDNODE));

/* ------------------------- Static Create ------------------------ */
/* Is totally done by Cmicro Kernel, via the <root-process-table>  */


/* ----------------------------- Stop ---------------------------- */
/* A stop in a SDL-Process means a return from the yPAD-Function   */
/* The Cmicro Kernel handles all further actions.                  */

#define SDL_STOP \
        return (XDORMANT);

/*
** Insert free statements when process stops
*/
#if defined(XMK_USED_DYNAMIC_STOP)
  #define XFREEVARS
#endif

/* The following Macro is inserted directly before SDL_STOP and    */
/* can be used to free () Processvariables, if wanted in special   */
/* applications ...                                                */
#ifdef XFREEVARS
    #define FREE_PROCESS_VARS
#endif



/* ---------------------------- Timers --------------------------- */

/* ----- Timermodel 1 ----- */
#ifdef XMK_USE_TIMER_MODEL1

   /* -- Definitions */
   #define DEF_TIMER_VAR(NAME)            /* unnecessary */
   #define INIT_TIMER_VAR(TIMER_VAR)      /* unnecessary */
   #define INPUT_TIMER_VAR(TIMER_VAR)     /* unnecessary */
   #define RELEASE_TIMER_VAR(TIMER_VAR)   /* unnecessary */
   #define SDL_NOW                        xmk_NOW ()


   #ifdef XMK_USE_TIMER_SCALE
     /*
     ** Here is a little help to scale timers.
     ** Timer scaling is always useful only when using the Cmicro Tester,
     ** so the accuracy is not a problem.
     */
     #define SDL_SET(TIME_EXPR, TIMER_NAME, TIMER_IDNODE, TIMER_VAR, TIMER_NAME_STRING) \
             xmk_TimerSet((TIME_EXPR-SDL_NOW)*xmk_TimerScaleFactor+SDL_NOW,TIMER_IDNODE);

     #define SDL_SET_DUR(TIME_EXPR, DUR_EXPR, TIMER_NAME, TIMER_IDNODE, TIMER_VAR, TIMER_NAME_STRING) \
             xmk_TimerSet((TIME_EXPR-SDL_NOW)*xmk_TimerScaleFactor+SDL_NOW,TIMER_IDNODE);

     #define SDL_SET_TICKS(TIME_EXPR, DUR_EXPR, TIMER_NAME, TIMER_IDNODE, TIMER_VAR, TIMER_NAME_STRING) \
             xmk_TimerSet((TIME_EXPR-SDL_NOW)*xmk_TimerScaleFactor+SDL_NOW,TIMER_IDNODE);
   #else
     #define SDL_SET(TIME_EXPR, TIMER_NAME, TIMER_IDNODE, TIMER_VAR, TIMER_NAME_STRING) \
             xmk_TimerSet(TIME_EXPR,TIMER_IDNODE);

     #define SDL_SET_DUR(TIME_EXPR, DUR_EXPR, TIMER_NAME, TIMER_IDNODE, TIMER_VAR, TIMER_NAME_STRING) \
             xmk_TimerSet(TIME_EXPR,TIMER_IDNODE);

     #define SDL_SET_TICKS(TIME_EXPR, DUR_EXPR, TIMER_NAME, TIMER_IDNODE, TIMER_VAR, TIMER_NAME_STRING) \
             xmk_TimerSet(TIME_EXPR,TIMER_IDNODE);
   #endif

   /* -- Reset without parameters */
   #define SDL_RESET(TIMER_NAME, TIMER_IDNODE, TIMER_VAR, TIMER_NAME_STRING) \
           xmk_TimerReset(TIMER_IDNODE);

   /* -- Active (timer active) */
   #define SDL_ACTIVE(TIMER_NAME, TIMER_IDNODE, TIMER_VAR) \
           xmk_TimerActive(TIMER_IDNODE)

#endif /* ... XMK_USE_TIMER_MODEL1 */


/* ----- Timermodel 2 ----- */
#ifdef XMK_USE_TIMER_MODEL2
  /*
  ** CAUTION !
  ** ===================
  ** This timermodel 2 is not applicable for usual Cmicro Kernel
  ** Integrations. There might be some customized applications
  ** not included in Cmicro product, handling timers in a
  ** different way, but these cannot be used.
  */
  #ifdef  XMK_USE_TIMER_ROM_TABLE
    typedef struct _XTIMER_ROM_TABLE_ENTRY
    {
      xPID          Ownerprocess;
      xmk_T_SIGNAL  timer_id;
      xmk_T_TIME    timer_startval;
      unsigned int  offset;
    } XTIMER_ROM_TABLE_ENTRY ;
    #define XDEFTIMER_ROM_TABLE_ENTRY(a,b,c,d) a, b, c, d,
    #define X_END_TIMER_ROM  (xPID) 0xff
    #define MAXN                                1
  #endif /* ... XMK_USE_TIMER_ROM_TABLE */

  #ifdef  XMK_USE_TIMER_RAM_TABLE
    #define MAXI                                1
    typedef struct _XTIMER_RAM_TABLE_ENTRY
    {
      /*   xPID          Ownerprocess;  */
      /*   xmk_T_SIGNAL  timer_id;      */
           xmk_T_TIME    timer_val;
      /*   unsigned int  offset;        */
    } XTIMER_RAM_TABLE_ENTRY ;
  #endif /* ... XMK_USE_TIMER_RAM_TABLE */
#endif /* ... XMK_USE_TIMER_MODEL2 */


/* --------------------------- Nextstate ------------------------- */
#define SDL_NEXTSTATE(STATE_NAME, STATE_IDNODE, STATE_NAME_STRING)  \
        XOS_TRACE_NEXTSTATE(STATE_IDNODE); \
        return(STATE_IDNODE);

#define SDL_DASH_NEXTSTATE \
        XOS_TRACE_DASHSTATE; \
        return(XDASHSTATE);

/* --------------------------- Decision -------------------------- */
#define XDECISION_ERROR ErrorHandler (ERR_N_SDL_DECISION_ELSE);


/* --------------------------- SDL Array ------------------------- */
#define XRANGE_ERROR    ErrorHandler (ERR_N_SDL_RANGE);
#define XINDEX_ERROR    ErrorHandler (ERR_N_SDL_RANGE);

#ifdef XECSOP
  extern void xSDLOpError XPP((char*, char*));
#else
  #define xSDLOpError(p1,p2) ErrorHandler(ERR_N_PREDEFINED_OPERATOR_CALL);
#endif


/****+***************************************************************
05   Utility #ifdef
********************************************************************/
#ifndef NIL
  #define NIL 0
#endif

/****+***************************************************************
06   Constants
********************************************************************/
#define XMK_STOP              1      /* xmk_RunSDL () */
#define XMK_NORMALRETURN      0      /* xmk_RunSDL () */
#define XMK_RECORDER_TAPE_END 2      /* xmk_RunSDL () */



/****+***************************************************************
07   Forward Declarations
********************************************************************/

/****+***************************************************************
08   SDL predefined types (except SDL_PId)
********************************************************************/

/****+***************************************************************
09   SDL_PId
********************************************************************/

#define SDL_pid xPID
#define SDL_Pid xPID
#define SDL_PId xPID
#define SDL_PID xPID


#ifdef XMK_USED_ONLY_X_1
  /* Each SDL-Process in the System is defined as (1,1) or (0,1) or (,1) */
  /* +---------------------------+                                       */
  /* +    <process-type-id>      +                                       */
  /* +---------------------------+                                       */
  /* + xPID = unique process-id  +                                       */
  /* +---------------------------+                                       */
  typedef unsigned char xPID; /* char is enough to handle >250 Processes */

  #define GLOBALPID(ptype,pinst)    ptype
  #define EPIDTYPE(globalpid)       globalpid
  #define EPIDINST(globalpid)       0

  /* Reserved Values, not available for ordinary Process-type-IDs     */
  #define xNULLTYPE         0xff
  #define xNULLINST         0xff
  #define xNULLPID          0xff
  #define SDL_NULL          xNULLPID
  #define ENV               0xfe
  #define MICROKERNEL       0xfc      /* internal purposes */
  #define SET_ENVIRONMENT   xRunPID = ENV;

#else
  /* Anywhere in the System there is a process, which is not defined as */
  /* (1,1) or (0,1) or (,1)                                             */
  /* +---------------------------+------------------------+             */
  /* +     higher Byte           +  lower Byte            +             */
  /* +---------------------------+------------------------+             */
  /* +    <process-inst-id>      + <process-type-id>      +             */
  /* +---------------------------+------------------------+             */
  /* +               xPID = unique process-id             +             */
  /* +---------------------------+------------------------+             */
  typedef unsigned int  xPID;/* int  is enough to handle >250 P.types   */
                             /* and 255 Instances per Type, easy to     */
                             /* calculate                               */

  #define GLOBALPID(ptype,pinst)   ( ptype | (pinst << 8) )
  #define EPIDTYPE(globalpid)      ( (unsigned char) globalpid & 0xff)
  #define EPIDINST(globalpid)      ( (unsigned char) (globalpid >> 8) & 0xff)

  /* Reserved Value, not available for ordinary Process-type-IDs     */
  #define xNULLTYPE         0xff
  #define xNULLINST         0xff
  #define xNULLPID          0xffff
  #define SDL_NULL          xNULLPID
  #define ENV               0xfffe
  #define MICROKERNEL       0xfffc      /* internal purposes */
  #define SET_ENVIRONMENT   xRunPID = ENV;

#endif





/* if xPID is of a basic C-type like unsigned char or int  */
/* Assignment of PIDs in Process are easy .... .           */
#ifndef XMK_USED_ONLY_X_1
#define xEq_SDL_PId(pid1,pid2) (pid1==pid2)
#define xEq_SDL_PIdNULL(pid)   (pid==xNULLPID)
#define xDef_SDL_PId(V)       *(V) = xNULLPID;
#define yDef_SDL_PId(V)       xDef_SDL_PId(V)
#define yAssF_SDL_PId(V,E,A)  { V = E; }
#define yEqF_SDL_PId(E1,E2)   (E1==E2)
#define yNEqF_SDL_PId(E1,E2)  (E1!=E2)
#else
#define xEq_SDL_PId(pid1,pid2) (pid1==pid2)
#define xEq_SDL_PIdNULL(pid)   (pid==xNULLPID)
#define xDef_SDL_PId(V)       *(V) = xNULLPID;
#define yDef_SDL_PId(V)       xDef_SDL_PId(V)
#define yAssF_SDL_PId(V,E,A)  { V = E; }
#define yEqF_SDL_PId(E1,E2)   (E1==E2)
#define yNEqF_SDL_PId(E1,E2)  (E1!=E2)
#endif

#define yDef_xPID             yDef_SDL_PId
#define yAssF_xPID            yAssF_SDL_PId
#define yEqF_xPID             yEqF_SDL_PId
#define yNEqF_xPID            yNEqF_SDL_PId




/****+***************************************************************
10   Signal Set
********************************************************************/

/****+***************************************************************
11   Procedure ( = Prd )
********************************************************************/
  #define YPRD_YSVARP

  #define YPRD_TEMP_VARS \
          unsigned char *xmk_OutputSignalPtr;

  #define YPRD_YVARP(VDEF_TYPE) \
          VDEF_TYPE *yVarP = (VDEF_TYPE*) pRunData;

  /*
  ** Define the following macros outside this headerfile in tight
  ** integrations to be able to access pid expressions in global procedures
  ** like in output to (SENDER|PARENT|OFFSPRING|SELF).
  **
  ** The macros cover :
  **    -function declaration (XGP_.*P),
  **    -function call        (XGP_.*C),
  **    -function definition for ANSI C (XGP_.*D).
  **    -function definition for KR C (XGP_.*K and XGP_.*_KD).
  ** For each of the above, there is one macro for a GP with parameters (XGP_PARAM_.*)
  ** and one further macro for a GP without parameters (XGP_NOPARAM.*).
  */

  /* Global PRD with FPAR */

  #ifndef XGP_PARAM_P
    #define XGP_PARAM_P
  #endif

  #ifndef XGP_PARAM_C
    #define XGP_PARAM_C
  #endif

  #ifndef XGP_PARAM_D
    #define XGP_PARAM_D
  #endif

  #ifndef XGP_PARAM_K
    #define XGP_PARAM_K
  #endif

  #ifndef XGP_PARAM_KD
    #define XGP_PARAM_KD
  #endif

  /* Global PRD without FPAR */

  #ifndef XGP_PARAM_PE
    #define XGP_PARAM_PE
  #endif

  #ifndef XGP_PARAM_CE
  

⌨️ 快捷键说明

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