KizarmProbe.
 Vše Třídy Soubory Funkce Proměnné Výčty Hodnoty výčtu Definice maker Skupiny Stránky
fifo.h
Zobrazit dokumentaci tohoto souboru.
1 #ifndef FIFO_H
2 #define FIFO_H
3 //#include "core_cm0.h"
4 
5 extern volatile int gblMutex;
6 
8 static inline void fifo_lock (void) {
9  asm volatile ("cpsid i");
10  gblMutex++;
11 }
13 static inline void fifo_unlock (void) {
14  if (--gblMutex) return;
15  asm volatile ("cpsie i");
16 }
17 
18 //#define FIFODEPTH (1<<10)
19 //#define FIFOMASK (FIFODEPTH-1)
49 template <class T> class Fifo {
51  public: // veřejné metody
53  Fifo (const unsigned depth) : max (depth) {
54  buf = new T [depth];
55  rdi = 0; wri = 0; len = 0;
56  };
60  bool Write (const T& c) {
61  if (len < max) { buf [wri++] = c; saturate (wri); safeInc(); return true; }
62  else return false;
63  };
67  bool Read (T& c) {
68  if (len > 0) { c = buf [rdi++]; saturate (rdi); safeDec(); return true; }
69  else return false;
70  };
71  protected: // chráněné metody
74  void saturate (volatile int& index) {
75  //index &= FIFOMASK; // FIFODEPTH je rovno 2 ** n, kde n je celé číslo.
76  if (index < max) return; index = 0; // FIFODEPTH obecně int
77  };
79  void safeInc (void) { fifo_lock(); len++; fifo_unlock(); };
81  void safeDec (void) { fifo_lock(); len--; fifo_unlock(); };
82  private: // privátní data
83  const int max;
84  T * buf;
85  volatile int rdi, wri, len;
86 };
88 
89 #endif // FIFO_H
Fifo(const unsigned depth)
Parametr konstruktoru by měla být hloubka FIFO, ale pak by musela být dynamická alokace paměti...
Definition: fifo.h:53
void safeInc(void)
Atomická inkrementace délky dat.
Definition: fifo.h:79
volatile int gblMutex
Zamykání a odemykání vlákna.
Definition: main.cpp:4
void saturate(volatile int &index)
Definition: fifo.h:74
static void fifo_unlock(void)
V tomto konkrétním případě není lock / unlock potřeba.
Definition: fifo.h:13
static void fifo_lock(void)
V tomto konkrétním případě není lock / unlock potřeba.
Definition: fifo.h:8
void safeDec(void)
Atomická dekrementace délky dat.
Definition: fifo.h:81
bool Write(const T &c)
Definition: fifo.h:60
bool Read(T &c)
Definition: fifo.h:67
[Fifo class example]
Definition: fifo.h:50