Convert from FreeRTOS Semaphore to std::mutex

This commit is contained in:
Thomas Basler 2023-09-02 16:46:23 +02:00
parent 986d67a3d0
commit 55afa81cf1
2 changed files with 3 additions and 14 deletions

View File

@ -12,18 +12,10 @@
#include "inverters/HM_4CH.h" #include "inverters/HM_4CH.h"
#include <Arduino.h> #include <Arduino.h>
#define HOY_SEMAPHORE_TAKE() \
do { \
} while (xSemaphoreTake(_xSemaphore, portMAX_DELAY) != pdPASS)
#define HOY_SEMAPHORE_GIVE() xSemaphoreGive(_xSemaphore)
HoymilesClass Hoymiles; HoymilesClass Hoymiles;
void HoymilesClass::init() void HoymilesClass::init()
{ {
_xSemaphore = xSemaphoreCreateMutex();
HOY_SEMAPHORE_GIVE(); // release before first use
_pollInterval = 0; _pollInterval = 0;
_radioNrf.reset(new HoymilesRadio_NRF()); _radioNrf.reset(new HoymilesRadio_NRF());
_radioCmt.reset(new HoymilesRadio_CMT()); _radioCmt.reset(new HoymilesRadio_CMT());
@ -41,7 +33,7 @@ void HoymilesClass::initCMT(int8_t pin_sdio, int8_t pin_clk, int8_t pin_cs, int8
void HoymilesClass::loop() void HoymilesClass::loop()
{ {
HOY_SEMAPHORE_TAKE(); std::lock_guard<std::mutex> lock(_mutex);
_radioNrf->loop(); _radioNrf->loop();
_radioCmt->loop(); _radioCmt->loop();
@ -116,8 +108,6 @@ void HoymilesClass::loop()
} }
} }
} }
HOY_SEMAPHORE_GIVE();
} }
std::shared_ptr<InverterAbstract> HoymilesClass::addInverter(const char* name, uint64_t serial) std::shared_ptr<InverterAbstract> HoymilesClass::addInverter(const char* name, uint64_t serial)
@ -195,9 +185,8 @@ void HoymilesClass::removeInverterBySerial(uint64_t serial)
{ {
for (uint8_t i = 0; i < _inverters.size(); i++) { for (uint8_t i = 0; i < _inverters.size(); i++) {
if (_inverters[i]->serial() == serial) { if (_inverters[i]->serial() == serial) {
HOY_SEMAPHORE_TAKE(); std::lock_guard<std::mutex> lock(_mutex);
_inverters.erase(_inverters.begin() + i); _inverters.erase(_inverters.begin() + i);
HOY_SEMAPHORE_GIVE();
return; return;
} }
} }

View File

@ -43,7 +43,7 @@ private:
std::unique_ptr<HoymilesRadio_NRF> _radioNrf; std::unique_ptr<HoymilesRadio_NRF> _radioNrf;
std::unique_ptr<HoymilesRadio_CMT> _radioCmt; std::unique_ptr<HoymilesRadio_CMT> _radioCmt;
SemaphoreHandle_t _xSemaphore; std::mutex _mutex;
uint32_t _pollInterval = 0; uint32_t _pollInterval = 0;
uint32_t _lastPoll = 0; uint32_t _lastPoll = 0;