代码拉取完成,页面将自动刷新
同步操作将从 yang_hfff/环形队列缓冲 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
/**
* @file ringQueue.h
* @author YangHaifeng(阳海峰)
* @email 2995339193@qq.com
* @version V0.0
* @license GNU General Public License (GPL)
* @detail please follow the license!!!
* @attention
* this file is aim to do something with ringQueue,it just fou usart and
* other communication part of MCU such as IIC,SPI,CAN,MODMOS etc.
* in some MCU such as STM32,MSP432,MSP430,ESP32,ch32,gd32 etc.
* (本程序为了提高速度和简化,删减了一些不需要用到的功能)
* @htmlonly
* <span style="font-weight: bold">History</span>
* @endhtmlonly
* Version|Auther|Describe
* ------|----|--------
* V0.0|YangHaifeng|Create File
* <h2><center>©COPYRIGHT YangHaifeng All Rights Reserved.</center></h2>
*/
#ifndef __RINGQUEUE_H
#define __RINGQUEUE_H
#include <stdint.h>
/*使用宏加速(用函数会有调用开销)*/
#define USE_INLINE_SPEED_UP 0
/**
* @brief 环形队列结构体
* @note 此结构体主要用于数据传输的
* 环形缓冲,解决单片机处理数据时卡死的现象
*/
typedef struct ringQueue
{
uint32_t front;
uint32_t rear;
uint32_t size;
uint8_t *base;
}RQ;
#if !USE_INLINE_SPEED_UP
void RQ_init(RQ *queue,uint8_t *base,uint32_t size);
uint8_t RQ_isEmpty(RQ *queue);
uint8_t RQ_isFull(RQ *queue);
void RQ_enQueue(RQ *queue,uint8_t item);
uint8_t RQ_deQueue(RQ *queue);
#else
/**
* @brief 队列初始化
* @param queue 队列指针
* @param size 数据存储区大小
* @param base 数据存储区首地址
* @retval None
* @note 一定要为队列结构体分配内存
*/
static inline void RQ_init(RQ *queue,uint8_t *base,uint32_t size)
{
queue->front = 0;
queue->rear = 0;
queue->size = size;
queue->base = base;
}
/**
* @brief 判断队列是否为空
* @param queue 队列结构体指针
* @retval 空返回1,非空返回0
*/
static inline uint8_t RQ_isEmpty(RQ *queue)
{
if(queue->front == queue->rear)
{
return 1;
}
else
{
return 0;
}
}
/**
* @brief 判断队列是否为空
* @param queue 队列结构体指针
* @retval 空返回1,非空返回0
*/
static inline uint8_t RQ_isFull(RQ *queue)
{
if(queue->front == (queue->rear + 1) % queue->size)
{
return 1;
}
else
{
return 0;
}
}
/**
* @brief 数据入队
* @param queue 队列结构体指针
* @param item 数据
* @retval None
* @note 入队前一定要判断是否满(防止满溢)
*/
static inline void RQ_enQueue(RQ *queue,uint8_t item)
{
queue->rear = (queue->rear + 1) % queue->size;
queue->base[queue->rear] = item;
}
/**
* @brief 数据出队
* @param queue 队列结构体指针
* @retval 返回出队的数据
* @note 出队前一定要判断是否空(防止空溢)
*/
static inline uint8_t RQ_deQueue(RQ *queue)
{
queue->front = (queue->front + 1) % queue->size;
return queue->base[queue->front];
}
#endif //!USE_INLINE_SPEED_UP
#endif //__RINGQUEUE_H
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。