My Project
 All Classes Functions Variables Pages
FreeRTOS.h
1 /*
2  * FreeRTOS.h
3  *
4  * Created on: Feb 24, 2017
5  * Author: kolban
6  */
7 
8 #ifndef MAIN_FREERTOS_H_
9 #define MAIN_FREERTOS_H_
10 #include <stdint.h>
11 #include <string>
12 #include <pthread.h>
13 
14 #include <freertos/FreeRTOS.h> // Include the base FreeRTOS definitions.
15 #include <freertos/task.h> // Include the task definitions.
16 #include <freertos/semphr.h> // Include the semaphore definitions.
17 #include <freertos/ringbuf.h> // Include the ringbuffer definitions.
18 
19 
23 class FreeRTOS {
24 public:
25  static void sleep(uint32_t ms);
26  static void startTask(void task(void*), std::string taskName, void* param = nullptr, uint32_t stackSize = 2048);
27  static void deleteTask(TaskHandle_t pTask = nullptr);
28 
29  static uint32_t getTimeSinceStart();
30 
31  class Semaphore {
32  public:
33  Semaphore(std::string owner = "<Unknown>");
34  ~Semaphore();
35  void give();
36  void give(uint32_t value);
37  void giveFromISR();
38  void setName(std::string name);
39  bool take(std::string owner = "<Unknown>");
40  bool take(uint32_t timeoutMs, std::string owner = "<Unknown>");
41  std::string toString();
42  uint32_t wait(std::string owner = "<Unknown>");
43 
44  private:
45  SemaphoreHandle_t m_semaphore;
46  pthread_mutex_t m_pthread_mutex;
47  std::string m_name;
48  std::string m_owner;
49  uint32_t m_value;
50  bool m_usePthreads;
51 
52  };
53 };
54 
55 
59 class Ringbuffer {
60 public:
61  Ringbuffer(size_t length, ringbuf_type_t type = RINGBUF_TYPE_NOSPLIT);
62  ~Ringbuffer();
63 
64  void* receive(size_t* size, TickType_t wait = portMAX_DELAY);
65  void returnItem(void* item);
66  bool send(void* data, size_t length, TickType_t wait = portMAX_DELAY);
67 private:
68  RingbufHandle_t m_handle;
69 };
70 
71 #endif /* MAIN_FREERTOS_H_ */
void * receive(size_t *size, TickType_t wait=portMAX_DELAY)
Receive data from the buffer.
Definition: FreeRTOS.cpp:244
void setName(std::string name)
Set the name of the semaphore.
Definition: FreeRTOS.cpp:218
uint32_t wait(std::string owner="<Unknown>")
Wait for a semaphore to be released by trying to take it and then releasing it again.
Definition: FreeRTOS.cpp:64
bool send(void *data, size_t length, TickType_t wait=portMAX_DELAY)
Send data to the buffer.
Definition: FreeRTOS.cpp:265
void give()
Give a semaphore. The Semaphore is given.
Definition: FreeRTOS.cpp:114
void returnItem(void *item)
Return an item.
Definition: FreeRTOS.cpp:253
std::string toString()
Create a string representation of the semaphore.
Definition: FreeRTOS.cpp:207
Ringbuffer(size_t length, ringbuf_type_t type=RINGBUF_TYPE_NOSPLIT)
Create a ring buffer.
Definition: FreeRTOS.cpp:228
Ringbuffer.
Definition: FreeRTOS.h:59
static void sleep(uint32_t ms)
Definition: FreeRTOS.cpp:23
static void startTask(void task(void *), std::string taskName, void *param=nullptr, uint32_t stackSize=2048)
Definition: FreeRTOS.cpp:35
void giveFromISR()
Give a semaphore from an ISR.
Definition: FreeRTOS.cpp:143
static void deleteTask(TaskHandle_t pTask=nullptr)
Definition: FreeRTOS.cpp:44
Definition: FreeRTOS.h:31
static uint32_t getTimeSinceStart()
Definition: FreeRTOS.cpp:53
Interface to FreeRTOS functions.
Definition: FreeRTOS.h:23
bool take(std::string owner="<Unknown>")
Take a semaphore. Take a semaphore and wait indefinitely.
Definition: FreeRTOS.cpp:159