-
Notifications
You must be signed in to change notification settings - Fork 7.6k
/
Copy pathRTOS.h
81 lines (71 loc) · 1.99 KB
/
RTOS.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
/*
* FreeRTOS.h
*
* Created on: Feb 24, 2017
* Author: kolban
*/
#ifdef __cplusplus
#ifndef MAIN_FREERTOS_H_
#define MAIN_FREERTOS_H_
#include "Arduino.h"
#include <stdint.h>
#include <pthread.h>
#include <freertos/FreeRTOS.h> // Include the base FreeRTOS definitions.
#include <freertos/task.h> // Include the task definitions.
#include <freertos/semphr.h> // Include the semaphore definitions.
#include <freertos/ringbuf.h> // Include the ringbuffer definitions.
/**
* @brief Interface to %FreeRTOS functions.
*/
class FreeRTOS {
public:
static void sleep(uint32_t ms);
static void startTask(void task(void *), String taskName, void *param = nullptr, uint32_t stackSize = 2048);
static void deleteTask(TaskHandle_t pTask = nullptr);
static uint32_t getTimeSinceStart();
class Semaphore {
public:
Semaphore(String owner = "<Unknown>");
~Semaphore();
void give();
void give(uint32_t value);
void giveFromISR();
void setName(String name);
bool take(String owner = "<Unknown>");
bool take(uint32_t timeoutMs, String owner = "<Unknown>");
String toString();
uint32_t wait(String owner = "<Unknown>");
bool timedWait(String owner = "<Unknown>", uint32_t timeoutMs = portMAX_DELAY);
uint32_t value() {
return m_value;
};
private:
SemaphoreHandle_t m_semaphore;
pthread_mutex_t m_pthread_mutex;
String m_name;
String m_owner;
uint32_t m_value;
bool m_usePthreads;
};
};
/**
* @brief Ringbuffer.
*/
class Ringbuffer {
public:
#ifdef ESP_IDF_VERSION_MAJOR
Ringbuffer(size_t length, RingbufferType_t type = RINGBUF_TYPE_NOSPLIT);
#else
Ringbuffer(size_t length, ringbuf_type_t type = RINGBUF_TYPE_NOSPLIT);
#endif
~Ringbuffer();
void *receive(size_t *size, TickType_t wait = portMAX_DELAY);
void returnItem(void *item);
bool send(void *data, size_t length, TickType_t wait = portMAX_DELAY);
private:
RingbufHandle_t m_handle;
};
#endif /* MAIN_FREERTOS_H_ */
#else
#include "freertos/FreeRTOS.h"
#endif