| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869 |
- #ifndef _SHARED_DATA_H_
- #define _SHARED_DATA_H_
- #include "freertos/semphr.h"
- template <typename T>
- class SharedData
- {
- public:
- SharedData()
- {
- _mutex = xSemaphoreCreateMutex();
- _data_ready = false;
- }
- ~SharedData()
- {
- if (_mutex != NULL)
- {
- vSemaphoreDelete(_mutex);
- }
- }
- bool write(const T& data)
- {
- if (xSemaphoreTake(_mutex, portMAX_DELAY) == pdTRUE)
- {
- _data = data;
- _data_ready = true;
- xSemaphoreGive(_mutex);
- return true;
- }
- return false;
- }
- bool read(T& data)
- {
- if (xSemaphoreTake(_mutex, pdMS_TO_TICKS(portMAX_DELAY)) == pdTRUE)
- {
- if (_data_ready)
- {
- data = _data;
- _data_ready = false;
- xSemaphoreGive(_mutex);
- return true;
- }
- xSemaphoreGive(_mutex);
- }
-
- return false;
- }
- void clear()
- {
- if (xSemaphoreTake(_mutex, pdMS_TO_TICKS(portMAX_DELAY)) == pdTRUE)
- {
- _data_ready = false;
- xSemaphoreGive(_mutex);
- }
- }
-
- private:
- T _data;
- bool _data_ready;
- SemaphoreHandle_t _mutex;
- };
- #endif // _SHARED_DATA_H_
|