Library os_ucos_h



Require Import os_code_defs.
Require Import os_code_notations.
Require Import ZArith.

Open Scope code_scope.

Definition OS_EVENT : type :=
  STRUCT os_event ­{
                    OSEventType @ Int8u;
                    OSEventGrp @ Int8u;
                    OSEventCnt @ Int16u ;
                    OSEventPtr @ STRUCT os_event ;
                    OSEventTbl @ (Tarray Int8u OS_EVENT_TBL_SIZE);
                    OSEventListPtr @ (Void )⌟
                   .

Definition OS_Q_FREEBLK : type :=
  STRUCT os_q_freeblk ­{
                        nextblk @ STRUCT os_q_freeblk ;
                        msgqueuetbl @ (Tarray (Void ) OS_MAX_Q_SIZE)⌟
                       .

Definition OS_Q : type :=
    STRUCT os_q ­{
                  OSQPtr @ Void ;
                  OSQStart @ Void ;
                  OSQEnd @ Void ;
                  OSQIn @ Void ;
                  OSQOut @ Void ;
                  OSQSize @ Int16u ;
                  OSQEntries @ Int16u ;
                  qfreeblk @ OS_Q_FREEBLK
                 .

Definition OS_TCB : type :=
  STRUCT os_tcb ­{
                  OSTCBNext @ STRUCT os_tcb ;
                  OSTCBPrev @ STRUCT os_tcb ;
                  OSTCBEventPtr @ OS_EVENT ;
                  OSTCBMsg @ Void ;
                  OSTCBDly @ Int16u ;
                  OSTCBStat @ Int8u ;
                  OSTCBPrio @ Int8u ;
                  OSTCBX @ Int8u ;
                  OSTCBY @ Int8u ;
                  OSTCBBitX @ Int8u;
                  OSTCBBitY @ Int8u
                  
                 .

Definition OS_STK : type := Int32.

Definition OS_STK_BLK : type :=
  STRUCT os_stk_blk ­{
                      nextblk @ Void ;
                      taskstk @ (Tarray OS_STK TASK_STK_SIZE)⌟
                     .

Definition gvarlist1 : decllist :=
             
              OSCtxSwCtr @ Int32u ;
              OSEventList @ OS_EVENT ;
              OSEventFreeList @ OS_EVENT ;
              OSEventTbl @ (Tarray OS_EVENT OS_MAX_EVENTS);
              OSIntNesting @ Int8u;
              OSIntExitY @ Int8u;
              OSPrioCur @ Int8u;
              OSPrioHighRdy @ Int8u;
              OSRdyGrp @ Int8u;
              OSRdyTbl @ (Tarray Int8u OS_RDY_TBL_SIZE);
              OSRunning @ Int8u
             .

Definition gvarlist2 :decllist :=
             
              OSTaskCtr @ Int8u;
              OSIdleCtr @ Int32u;
              OSTCBCur @ OS_TCB ;
              OSTCBFreeList @ OS_TCB ;
              OSTCBHighRdy @ OS_TCB ;
              OSTCBList @ OS_TCB;
              OSTCBPrioTbl @ (Tarray (OS_TCB ) (OS_LOWEST_PRIO + 1)%Z );
              OSTCBTbl @ (Tarray OS_TCB ∘(OS_LOWEST_PRIO + 1));
              OSQFreeBlk @ OS_Q_FREEBLK ;
              OSQFreeBlkTbl @ (Tarray OS_Q_FREEBLK OS_MAX_QS)
            .

Definition gvarlist3 :decllist :=
             
              OSQFreeList @ OS_Q ;
              OSQTbl @ (Tarray OS_Q OS_MAX_QS);
              OSTime @ Int32u;
              OSMapTbl @ (Tarray Int8u 8);
              OSUnMapTbl @ (Tarray Int8u 256)
             .

Fixpoint plus_decl (d1 d2 : decllist) {struct d1} :=
    match d1 with
     | dnil => d2
     | dcons x t d1´ => dcons x t (plus_decl d1´ d2)
    end.

Definition GlobalVariables :=
  plus_decl (plus_decl gvarlist1 gvarlist2) gvarlist3.

Close Scope code_scope.