📄 que.c
字号:
#define QUE_GLOBALS
/***********************************************************************
Include Files
*************************************************************************/
#include <includes.h>
/*****************************************************************************
Constants/Macros/Enums/Typedefs
*****************************************************************************/
#define disable() ;
#define enable() ;
/*****************************************************************************
Globals variable/Externs
*****************************************************************************/
/*****************************************************************************
Statics variable
*****************************************************************************/
/*****************************************************************************
function Prototypes
*****************************************************************************/
/************************************************************************
*Author: author name
*Name: function name
*Description: 出列 FIFO读取
*Parameter: input parameter
*Return: return parameter
*Note: about additional resource explain if need
*************************************************************************/
int GetQue( _Que * Que, INT8U* Dat, INT32U Len )
{
if((Que->GetIdx != Que->PutIdx) && (Dat != NULL))
{
disable();
if(Len > MaxQueBufSize)
memcpy(Dat, Que->QueBuf[Que->GetIdx], MaxQueBufSize);
else
memcpy(Dat, Que->QueBuf[Que->GetIdx], Len);
Que->GetIdx = ( Que->GetIdx + 1 ) % MaxQueStack;
enable();
return 1;
}
return -1;
}
/**********************************************************************************
入列 FIFO
return = -1: command aborted
= 0: command pushed
***********************************************************************************/
int PushQue( _Que * Que, INT8U* NewDat, INT32U Len )
{
unsigned int Idx;
if( Que->GetIdx == 0 ) Idx = MaxQueStack - 1;
else Idx = Que->GetIdx - 1;
disable();
if(Que->PutIdx == Idx)
{
enable();
return -1;
}
memset( Que->QueBuf[Que->PutIdx], 0, MaxQueBufSize );
if(NewDat != NULL)
{
if(Len > MaxQueBufSize)
memcpy(Que->QueBuf[Que->PutIdx], NewDat, MaxQueBufSize);
else
memcpy(Que->QueBuf[Que->PutIdx], NewDat, Len);
}
Que->PutIdx = ( Que->PutIdx + 1 ) % MaxQueStack;
enable();
return 1;
}
/**************************************************************************************
入列
return = -1: Command abort
= 0: command pushed
***************************************************************************************/
int ISR_PushQue( _Que * Que, INT8U* NewDat, INT32U Len )
{
unsigned int Idx;
if( Que->GetIdx == 0 ) Idx = MaxQueStack - 1;
else Idx = Que->GetIdx - 1;
if( Que->PutIdx == Idx )
{
return -1;
}
memset( Que->QueBuf[Que->PutIdx], 0, MaxQueBufSize );
if(NewDat != NULL)
{
if(Len > MaxQueBufSize)
memcpy(Que->QueBuf[Que->PutIdx], NewDat, MaxQueBufSize);
else
memcpy(Que->QueBuf[Que->PutIdx], NewDat, Len);
}
Que->PutIdx = ( Que->PutIdx + 1 ) % MaxQueStack;
return 0;
}
/**************************************************************************************
初始化任务队列
***************************************************************************************/
void StartQue( _Que * Que )
{
memset( (INT8U*)Que->QueBuf, 0, sizeof(Que->QueBuf) );
Que->GetIdx = Que->PutIdx = 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -