打印

求教!uart串口接受数据整合问题

[复制链接]
2516|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
jhzh951753|  楼主 | 2011-9-20 16:38 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
liang7143| | 2011-9-20 17:31 | 只看该作者
:L
看LZ定义的数组
unsigned char code string_rece[]

有code关键字 是分配在代码段
数据是不可能被修改的

使用特权

评论回复
板凳
liang7143| | 2011-9-20 17:39 | 只看该作者
本帖最后由 liang7143 于 2011-9-20 17:40 编辑

建立一个FIFO其实 也是很简单的

比如,先定义一个缓冲区

#define        MAX_FIFO_DEPTH        8

typedef struct _MESSAGE_FIFO
{
        BYTE                IndexHead;
        BYTE                Count;
        KEY_EVENT        Buf[MAX_FIFO_DEPTH];

} MESSAGE_FIFO;

MESSAGE_FIFO MsgFifos;
写缓冲区

BOOL
MessageSend(
        BYTE event
        )                                                       
{       
        MESSAGE_FIFO* pMsgFifo = &MsgFifos;

        if(pMsgFifo->Count >= MAX_FIFO_DEPTH)                //fifo full
        {
                return FALSE;
        }       
        pMsgFifo->Buf[(pMsgFifo->IndexHead + (pMsgFifo->Count++)) % MAX_FIFO_DEPTH] = event;
        return TRUE;
}
从缓冲区中读取数据

//fifo empty return MSG_NONE, else return message
BYTE         MessageGet(
        BYTE MsgFifoIndex
        )                                                       
{
        BYTE event = MSG_NONE;
        MESSAGE_FIFO* pMsgFifo = &MsgFifos;

        if(pMsgFifo->Count)                        //fifo is not empty
        {
                event = pMsgFifo->Buf[pMsgFifo->IndexHead];
                pMsgFifo->IndexHead = (pMsgFifo->IndexHead + 1) % MAX_FIFO_DEPTH;
                pMsgFifo->Count--;
        }                               
        return event;
}

使用特权

评论回复
地板
jhzh951753|  楼主 | 2011-9-20 17:39 | 只看该作者
额 楼上的问题我知道了。。
我是这样做的  把上面的code去掉了。。unsigned char string_rece[]
char uart_receS()
{        unsigned char   *p          ;
        *p = & string_rece[0];
        for(i=0; i<8;i++)
                {
                        *p = uart_receB();
                       
                        p++;
                }
}

但是接收到 然后在发出去就是一堆乱码了。。单独的发事没有问题的。。

使用特权

评论回复
5
jhzh951753|  楼主 | 2011-9-20 17:40 | 只看该作者
路过的高手指点一下啊!

使用特权

评论回复
6
liang7143| | 2011-9-20 17:46 | 只看该作者
LZ 接受 和 发送
是不是 考虑了 临界区
建议LZ接收完数据,发送的时候 关闭中断试一下

使用特权

评论回复
7
jhzh951753|  楼主 | 2011-9-21 09:39 | 只看该作者
6# liang7143
恩!~就是考虑了程序的边界,,和串口终止的问题!~

使用特权

评论回复
8
joyme| | 2011-9-21 10:57 | 只看该作者
  *p = & string_rece[0];

这是错误的,应该是p=string_rece; 或 p = &string_rece[0];
指针的概念还不是很清晰,*p是指针p指向的地址的内容,而&string_rece[0]是取数组的起始地址

使用特权

评论回复
9
jhzh951753|  楼主 | 2014-1-12 19:59 | 只看该作者
mark

使用特权

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

本版积分规则

个人签名:<table><tr><td>我在这里呢!!~ </td></tr></table>

1

主题

127

帖子

1

粉丝