IM920地温観測システム CQ 2017ARMセミナー用サンプルプログラム

Dependencies:   C027_Support_ForIM920

Fork of C027_SupportTest by u-blox

Committer:
ntaka206
Date:
Thu Jul 13 00:49:14 2017 +0000
Revision:
36:b89a6e114339
Parent:
35:7838543282c2
IM920????????; CQ 2017ARM??????????????

Who changed what in which revision?

UserRevisionLine numberNew contents of line
ntaka206 35:7838543282c2 1 #if !defined(__RINGBUF_H__)
ntaka206 35:7838543282c2 2 #define __RINGBUF_H__
ntaka206 35:7838543282c2 3 #include "mbed.h"
ntaka206 35:7838543282c2 4
ntaka206 35:7838543282c2 5
ntaka206 35:7838543282c2 6 /**
ntaka206 35:7838543282c2 7 * プロトンデータとタイムスタンプを保持する
ntaka206 35:7838543282c2 8 *
ntaka206 35:7838543282c2 9 * RingBuf classで使う
ntaka206 35:7838543282c2 10 *
ntaka206 35:7838543282c2 11 */
ntaka206 35:7838543282c2 12 typedef struct {
ntaka206 35:7838543282c2 13 int sn;
ntaka206 35:7838543282c2 14 int ad[3]; // LSB
ntaka206 35:7838543282c2 15 } RingBufType;
ntaka206 35:7838543282c2 16
ntaka206 35:7838543282c2 17 /**
ntaka206 35:7838543282c2 18 * プロトンデータとタイムスタンプを保持するリングバッファclass
ntaka206 35:7838543282c2 19 *
ntaka206 35:7838543282c2 20 */
ntaka206 35:7838543282c2 21 class RingBuf {
ntaka206 35:7838543282c2 22 public:
ntaka206 35:7838543282c2 23 RingBuf(int size);
ntaka206 35:7838543282c2 24 ~RingBuf();
ntaka206 35:7838543282c2 25 /**
ntaka206 35:7838543282c2 26 * リングバッファにデータを1つpush
ntaka206 35:7838543282c2 27 * @param *d データ構造体へのpinter
ntaka206 35:7838543282c2 28 */
ntaka206 35:7838543282c2 29 void push(RingBufType *d);
ntaka206 35:7838543282c2 30 /**
ntaka206 35:7838543282c2 31 * リングバッファからデータを1つpop
ntaka206 35:7838543282c2 32 * @return データ構造体へのpointerを返す。データが無い時はNULLを返す。
ntaka206 35:7838543282c2 33 */
ntaka206 35:7838543282c2 34 RingBufType* pop(void);
ntaka206 35:7838543282c2 35 /**
ntaka206 35:7838543282c2 36 * バッファ内にある読み出し可能なデータ数を返す
ntaka206 35:7838543282c2 37 */
ntaka206 35:7838543282c2 38 int len_get(void);
ntaka206 35:7838543282c2 39 /**
ntaka206 35:7838543282c2 40 * バッファ全体のサイズを返す
ntaka206 35:7838543282c2 41 */
ntaka206 35:7838543282c2 42 int size_get(void);
ntaka206 35:7838543282c2 43 /**
ntaka206 35:7838543282c2 44 * バッファをクリアする
ntaka206 35:7838543282c2 45 */
ntaka206 35:7838543282c2 46 void clear();
ntaka206 35:7838543282c2 47 /**
ntaka206 35:7838543282c2 48 * 最新のデータ位置
ntaka206 35:7838543282c2 49 */
ntaka206 35:7838543282c2 50 volatile int latest;
ntaka206 35:7838543282c2 51 /**
ntaka206 35:7838543282c2 52 * リングバッファから指定位置のデータを1得る
ntaka206 35:7838543282c2 53 * @return データ構造体へのpointerを返す。データが無い時はNULLを返す。
ntaka206 35:7838543282c2 54 */
ntaka206 35:7838543282c2 55 RingBufType* peek(int p);
ntaka206 35:7838543282c2 56 private:
ntaka206 35:7838543282c2 57 int size;
ntaka206 35:7838543282c2 58 volatile int wp;
ntaka206 35:7838543282c2 59 volatile int rp;
ntaka206 35:7838543282c2 60 RingBufType *buf;
ntaka206 35:7838543282c2 61 };
ntaka206 35:7838543282c2 62
ntaka206 35:7838543282c2 63 #endif