diff --git a/sdk.hpp b/sdk.hpp index 143a53e..1382447 100644 --- a/sdk.hpp +++ b/sdk.hpp @@ -9,4 +9,5 @@ extern "C" { #include "ticket.hpp" #include "critical_context.hpp" #include "zthread.hpp" +#include "zqueue.hpp" void sdkinit(); \ No newline at end of file diff --git a/stm32/critical.c b/stm32/critical.c index a174fc5..a971f47 100644 --- a/stm32/critical.c +++ b/stm32/critical.c @@ -1,15 +1,6 @@ +#include "FreeRTOS.h" #include "main.h" static uint8_t g_port_exit_critical_count; -void stm32_critical_enter(void) { - if (g_port_exit_critical_count == 0) { - __disable_irq(); - } - g_port_exit_critical_count++; -} -void stm32_critical_exit(void) { - g_port_exit_critical_count--; - if (g_port_exit_critical_count == 0) { - __enable_irq(); - } -} +void stm32_critical_enter(void) { vPortEnterCritical(); } +void stm32_critical_exit(void) { vPortExitCritical(); } diff --git a/zqueue.cpp b/zqueue.cpp new file mode 100644 index 0000000..caffb21 --- /dev/null +++ b/zqueue.cpp @@ -0,0 +1,46 @@ +#include "zqueue.hpp" + +#include "logger.h" +using namespace iflytop; +#define TAG "ZQueue" +void ZQueue::initialize(int32_t num, int32_t eachsize) { // + xQueue = xQueueCreate(num, eachsize); + ZASSERT(xQueue); +} +void ZQueue::clear() { xQueueReset(xQueue); } + +bool ZQueue::send(uint8_t *data, size_t len, int32_t overtime) { + BaseType_t xStatus; + xStatus = xQueueSend(xQueue, data, overtime); + if (xStatus == pdPASS) { + return true; + } else { + return false; + } +} +bool ZQueue::receive(uint8_t *data, size_t *len, int32_t overtime) { + BaseType_t xStatus; + xStatus = xQueueReceive(xQueue, data, overtime); + if (xStatus == pdPASS) { + return true; + } else { + return false; + } +} + +bool ZQueue::isFull() { + BaseType_t xStatus = xQueueIsQueueFullFromISR(xQueue); + if (xStatus == pdTRUE) { + return true; + } else { + return false; + } +} +bool ZQueue::isEmpty() { + BaseType_t xStatus = xQueueIsQueueEmptyFromISR(xQueue); + if (xStatus == pdTRUE) { + return true; + } else { + return false; + } +} \ No newline at end of file diff --git a/zqueue.hpp b/zqueue.hpp new file mode 100644 index 0000000..7b81318 --- /dev/null +++ b/zqueue.hpp @@ -0,0 +1,20 @@ +#pragma ocne +#include "cmsis_os.h" +namespace iflytop { +class ZQueue { + private: + int32_t m_num = 0; + int32_t m_eachsize = 0; + QueueHandle_t xQueue; + + public: + void initialize(int32_t num, int32_t eachsize); + void clear(); + bool send(uint8_t *data, size_t len, int32_t overtime); + bool receive(uint8_t *data, size_t *len, int32_t overtime); + + bool isFull(); + bool isEmpty(); +}; + +} // namespace iflytop