Browse Source

update

master
zhaohe 1 year ago
parent
commit
f29631c2b4
  1. 4
      stm32/gins.h
  2. 26
      stm32/stm32irq.c
  3. 41
      zqueue.cpp
  4. 34
      zqueue.hpp

4
stm32/gins.h

@ -75,6 +75,10 @@ EXTERN_GLOBAL_PTR(DMA_HandleTypeDef, hdma_usart3_tx);
EXTERN_GLOBAL_PTR(DMA_HandleTypeDef, hdma_usart4_rx);
EXTERN_GLOBAL_PTR(DMA_HandleTypeDef, hdma_usart4_tx);
// void HAL_UARTEx_RxEventCallback(UART_HandleTypeDef *huart, uint16_t Size);
#ifdef __cplusplus
}
#endif

26
stm32/stm32irq.c

@ -51,4 +51,28 @@ void UART4_IRQHandler(void) { HAL_UART_IRQHandler(&huart4); }
/***********************************************************************************************************************
* EXT *
***********************************************************************************************************************/
***********************************************************************************************************************/
void HAL_UARTEx_RxEventCallback(UART_HandleTypeDef *huart, uint16_t Size) { //
huart->USR_DMARxSize = Size;
}
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) {
static uint8_t rx;
if (huart->USR_UartITRxing) {
if (huart->USR_UartITRxOff < huart->USR_UartITRxBufSize) {
huart->USR_UartITRxBuf[huart->USR_UartITRxOff] = huart->USR_UartITRxBufCache;
huart->USR_UartITRxOff++;
} else {
}
huart->USR_UartITLastRxTicket = HAL_GetTick();
HAL_UART_Receive_IT(huart, &huart->USR_UartITRxBufCache, 1);
}
}
void HAL_UART_ErrorCallback(UART_HandleTypeDef *huart) {
if (huart->USR_UartITRxing) {
HAL_UART_Receive_IT(huart, &huart->USR_UartITRxBufCache, 1);
}
}

41
zqueue.cpp

@ -3,44 +3,3 @@
#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;
}
}

34
zqueue.hpp

@ -1,6 +1,8 @@
#pragma once
#include "cmsis_os.h"
#include "logger.h"
namespace iflytop {
template <typename T>
class ZQueue {
private:
int32_t m_num = 0;
@ -8,13 +10,33 @@ class ZQueue {
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);
void initialize(int32_t num, int32_t eachsize) {
xQueue = xQueueCreate(num, eachsize);
ZASSERT(xQueue);
}
void clear() { xQueueReset(xQueue); }
bool isFull();
bool isEmpty();
bool send(T *data, int32_t overtime) { return _send((uint8_t *)data, sizeof(T), overtime); }
bool receive(T *data, int32_t overtime) { return _receive((uint8_t *)data, overtime); }
bool isFull() {
BaseType_t xStatus = xQueueIsQueueFullFromISR(xQueue);
return xStatus == pdTRUE;
}
bool isEmpty() {
BaseType_t xStatus = xQueueIsQueueEmptyFromISR(xQueue);
return xStatus == pdTRUE;
}
private:
bool _send(uint8_t *data, int32_t len, int32_t overtime) {
BaseType_t xStatus = xQueueSend(xQueue, data, overtime);
return xStatus == pdPASS;
}
bool _receive(uint8_t *data, int32_t overtime) {
BaseType_t xStatus = xQueueReceive(xQueue, data, overtime);
return xStatus == pdPASS;
}
};
} // namespace iflytop
Loading…
Cancel
Save