IM920地温観測システム CQ 2017ARMセミナー用サンプルプログラム
Dependencies: C027_Support_ForIM920
Fork of C027_SupportTest by
RingBuf.h@36:b89a6e114339, 2017-07-13 (annotated)
- 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?
User | Revision | Line number | New 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 |