打印

先进先出FiFO源代码.各位用用吧.张明峰的书里是汇编的,我的

[复制链接]
2192|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
snakeemail|  楼主 | 2007-5-19 20:07 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
//////////////////////////////////////////////////////////////////////////
#define FALSE 0
#define TRUE 0xFF
#define RECBUFFLEN 8    //Recieve buffer lenth
#define WRAP 0x07
extern unsigned char RecBuf[RECBUFFLEN];
extern unsigned char RecCount;//计数器
extern unsigned char PutFifoPt;//存放指针 rearPoint
extern unsigned char GetFifoPt;//读取指针 FrontPoint
extern unsigned char TempFifo;
////////////////////////////////////////////////////////////////////////

/////////////////////////////////////////
// 函数介绍:
// 输入参数:
// 输出参数:
// 返回值 :
// 状态:
////////////////////////////////////////////
void InitialFifo(void)//FIFO 的初始化应该是关闭中断,不可重入
{
//    RecCount=0;    
//    PutPt = GetPt = &RecBuf[0];
    RecCount = PutFifoPt = GetFifoPt = 0;    
}

/////////////////////////////////////////////
// 函数介绍:特殊卷绕FIFO指针
// 输入参数:
// 输出参数:
// 返回值 :
// 状态: 
////////////////////////////////////////////
unsigned char McuPutFifo(void)
{
    //关中断
    if(RecCount==RECBUFFLEN)    
    {
        return 0;    //我是在主程序里判断RecCount Fail, FIFO FULL
    }
    else
    {
        *(RecBuf + PutFifoPt) =RCREG;//put data into fifo
        PutFifoPt++;
        PutFifoPt = PutFifoPt & WRAP;// WRAP Point
        RecCount++;
        return !0;    //successful
    }
        
}

/////////////////////////////////////////////
// 函数介绍:特殊卷绕FIFO指针
// 输入参数:
// 输出参数:
// 返回值 :
// 状态: 不能使用
////////////////////////////////////////////
void McuGetFifo()//unsigned char *datapt)
//unsigned char McuGetFifo(unsigned char *datapt)
{
    if (0 == RecCount)
    {
        return 0;//fail fifo is empty
    }
    else
    {
//        *datapt = *(RecBuf + GetFifoPt);
        TempFifo = *(RecBuf + GetFifoPt);
        GetFifoPt++;
        GetFifoPt = GetFifoPt & WRAP;
        RecCount--;
    
    //    TXREG = 0x44;

        
    }
//return 0;

}

相关帖子

沙发
yewuyi| | 2007-5-19 21:00 | 只看该作者

支持共享精神……

使用特权

评论回复
板凳
xwj| | 2007-5-19 21:10 | 只看该作者

先入先出在很多数据收发程序中都有用到,实在是再平常不

不过贴出来给新手看看也不错:-)

使用特权

评论回复
地板
snakeemail|  楼主 | 2007-5-20 11:28 | 只看该作者

数据结构里我就用了这个,xwj可否再说说其它的再平常不过的

链表我都没有在嵌入式中用过,看过一个中断查询用链表的例子。像什么二叉树可能在电子词典里用到。偶是搞仪表和自动控制的,数据结构这方面搞得少,估计会向pid算法,数字信号处理挺进,pwm和电机控制也想搞搞,尽量向工业方向靠拢,这里的附加值比较高

使用特权

评论回复
5
平常人| | 2007-5-20 11:36 | 只看该作者

再平常不过的数据结构莫过于堆栈了,谁敢说没用过?

使用特权

评论回复
6
snakeemail|  楼主 | 2007-5-20 11:47 | 只看该作者

先进后出的堆栈中断里倒是用到,不过我c,也没有用到

使用特权

评论回复
7
古道热肠| | 2007-5-20 11:54 | 只看该作者

是很平常的代码

    FIFO算法是很基本的,做单片机软件时间长了,肯定会用到,将数据写入FIFO队列的子函数最好带上写入值,不要使用全局变量来传递。
  如我所示会更好些:
  bool McuPutFifo(uchar ucWriteData)




    

使用特权

评论回复
8
zhenglixin| | 2007-5-21 12:10 | 只看该作者

re:

最近学软件,搬着凳子来听课。。。。

使用特权

评论回复
9
huangqi412| | 2007-5-21 20:31 | 只看该作者

新手,学习了,

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

547

主题

1910

帖子

8

粉丝