jiangchun9981 发表于 2013-11-17 18:48:57

RTT串口读怎么是分成2次读取完毕的?

串口进来的数据,每次都是分成2次才读取完毕? 第一次是1个字节,第二次是剩余的。用了很多样本测试过都这样,样本数据量不大,1K以内。
是不是设计就是这样的?
RTT版本是GIT MASTER ,应该是1.2.0BETA ,uart1配置用的是默认的RX中断模式,TX STREAM。
部分关键代码:
// 串口的通知函数
static rt_err_t hub_rx_ind(rt_device_t dev, rt_size_t size)
{
          struct rx_msg msg;
    msg.dev = dev;
    msg.size = size;   //这个好像不准,已经读切完毕了还 >0
   
   
    rt_mq_send(&rx_mq, &msg, sizeof(struct rx_msg));
   
    return RT_EOK;
}

读取线程:

while (1)
        {
                /* wait receive */
       
                                result = rt_mq_recv(&rx_mq, &msg, sizeof(struct rx_msg), RT_WAITING_FOREVER);
      
         
      if (result == RT_EOK)
      {

            
                rx_length = rt_device_read(msg.dev, 0, &rx_buffer, rx_length);

         }

测试样板:
00aa: 这个2个字节的会先发送第一个00,然后aa
00aa00bbcc: 这个5个字节的会先发送第一个00,然后剩下的,但是上面的串口回调函数依然会被继续调用多次,尽管每次会读取不到什么,   也就是rx_length 为0


别的样板也是一样,都是第一次会先读取到一个字节,然后会通知读取剩余的字节,然后还会无效通知多次。
                                               

jiangchun9981 发表于 2013-11-17 19:00:35

这样很不好控制了,一个完整的数据包给分成很多个,难道还的判断数据包头,组装数据包?

jiangchun9981 发表于 2013-11-20 22:36:34

搞惯IP了原来串口的自己写协议,看来没有想象中那么容易用啊。
找到个参考的了。

bigbadwolf 发表于 2014-2-18 21:59:52

同问,我用的是1.20正式版,也是RX中断模式。调了2天了。看finsh部分代码,是

bigbadwolf 发表于 2014-2-18 22:01:33

看finsh部分代码,是while (rt_device_read(shell->device, 0, &ch, 1) == 1){……}

bigbadwolf 发表于 2014-2-18 22:03:54

finsh里接收字符串是接收一个消息、接收一个字符的。

bigbadwolf 发表于 2014-2-18 22:05:19

楼主那个usart_frame.rar是裸机的。
页: [1]
查看完整版本: RTT串口读怎么是分成2次读取完毕的?