通过FIFO读取寄存器的的数值的例程

2019-10-15 01:27发布

求一个通过FIFO读取寄存器的的数值的例程
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
8条回答
zgp0518
2019-10-15 19:50
[mw_shl_code=applescript,true]DataQueue GCodeQueue;                                                //GCODE队列列表
GCodeStruct Line[LINESIZE];                        //队列数组




/********************************************
函数:InitializeGCodeQueue
功能:初始化队列列表
参数:无
返回:无
********************************************/
void InitializeGCodeQueue(void)       
{
    GCodeQueue.Start = &Line[0];
    GCodeQueue.End = &Line[LINESIZE];
    GCodeQueue.In = GCodeQueue.Start;
    GCodeQueue.Out = GCodeQueue.Start;
    GCodeQueue.Size = LINESIZE;
    GCodeQueue.Entries = 0;
}
/********************************************
函数:AddGCodeQueueEntries
功能:增加1列数据到列表
参数:无
返回:无
********************************************/
void AddGCodeQueueEntries(void)
{
    EnterCritical();       
    *GCodeQueue.In++;       
                GCodeQueue.Entries++;       

    if (GCodeQueue.In == GCodeQueue.End)
                {                       
                        GCodeQueue.In = GCodeQueue.Start;
                }
    ExitCritical();       
                while(GCodeQueue.Entries>=LINESIZE)                        //队列已满,等待队列
                {
                        OS.DelayTimeTick(1);
                }
}

/********************************************
函数:SubGCodeQueueEntries
功能:清除1列数据到列表
参数:无
返回:无
********************************************/
void SubGCodeQueueEntries(void)
{
                while(GCodeQueue.Entries==0)                        //队列已空,等待队列
                {
                        OS.DelayTimeTick(1);
                }               
    EnterCritical();                       
    *GCodeQueue.Out++;       
                GCodeQueue.Entries--;       
    if (GCodeQueue.Out == GCodeQueue.End)
                {                       
                        GCodeQueue.Out = GCodeQueue.Start;
                }
    ExitCritical();       
}[/mw_shl_code]

[mw_shl_code=applescript,true]#ifndef __QUEUE_H
#define __QUEUE_H         
#include "stm32f10x.h"       
#include "dk_config.h"


#define LINESIZE                        20
typedef struct
{
        GCodeStruct    * Start;    //指向队列开始
        GCodeStruct    * End;      //指向队列结束
        GCodeStruct    * In;       //插入一个消息  
        GCodeStruct    * Out;      //取出一个消息  
        u8    Size;     // 队列长度
        u8    Entries;  //消息长度      
}DataQueue;
extern DataQueue GCodeQueue;

void InitializeGCodeQueue(void);
void AddGCodeQueueEntries(void);
void SubGCodeQueueEntries(void);
                                                             
#endif[/mw_shl_code]

一周热门 更多>