Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
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; } }