teamALI / Mbed 2 deprecated HB2018

Dependencies:   mbed FreeRTOS

globalFlags.cpp

Committer:
takeru0x1103
Date:
2018-12-05
Revision:
19:4b0fe9a5ec38
Parent:
18:5aa48aec9cae
Child:
20:0394e15412c3

File content as of revision 19:4b0fe9a5ec38:


#include "globalFlags.h"
#define STATE_BUF_SIZ 8

DigitalOut led1(LED1);
DigitalOut led2(LED2);
DigitalOut led3(LED3);
DigitalOut led4(LED4);

char            g_CmdBuf[G_CMD_BUF_SIZ] ;// コマンド受け渡しバッファ
bool            gf_CmdPrs = false;

typPrintFlag    gf_Print            ;//
typPrintFlag    gf_Mon              ;//
typCalFlag      gf_Cal              ;//
typChkFlag      gf_Chk              ;//チェックフラグ
typAccel        gf_AxReq[2] ={0,}   ;//アクセル更新
typAccel        gf_MtReq[4] ={0,}   ;//モーター更新
bool            gf_AttCntEna        ;//姿勢制御イネーブル

GlobalFlags     gf;

//===========================================
//コンストラクタ
//===========================================
GlobalFlags::GlobalFlags(){
    //初期ステート
    state   = WAKEUP;
    //ステートキュー初期化
    for(int i=0; i<STATE_QUE_SIZ; i++){
      stateQueue[i] = NONE;
    } 
    rp = wp = 0;//先頭を指す
    full = false;//最初はエンプティ
    empty = true;
}

//-----------------------------------
//ステートのFIFOにプッシュする
//-----------------------------------
bool GlobalFlags::push(enmHbState iState){
    if(full){
        return false;//FFULLフラグが立ってら入力を受け付けない
    }else{
        stateQueue[wp] = iState;//キューに突っ込んで
        wp    = (wp==STATE_QUE_SIZ) ? 0 : wp+1;//ライトポインタを進める
        full  = (wp == rp)? true : false; //次ライト予定の場所がリードポインタに追いついたらFULLを立てる
        empty = false;
        return true;
    }
}

//-----------------------------------
//ステートFIFOから次の予約ステートを引き抜く
//-----------------------------------
bool GlobalFlags::pull(){
    if(empty){
        return false;//EMPTYだったら引き抜けない
    }else{
        state = stateQueue[rp];//リードポインタの指すデータをステートに移す
        stateQueue[rp] = NONE;//バッファを消す
        rp = (rp==STATE_QUE_SIZ) ? 0 : rp+1;//リードポインタを進める
        full  = false; //フルではなくなる
        empty = (stateQueue[rp] == NONE) ? true : false;//次にリードする場所がNONEだったらEMPTYを立てる
        return true;
    }
}