⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 que.c

📁 ucos2.83在LPC2148上的例子
💻 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 + -