现在一个程序中要用串口读外面数据并实时画在界面上。是用定时器每隔200毫秒读一次外面传给串口的数据。现发现界面上数据变化极其缓慢。
怀疑是界面刷新不过来,把定时器延到5秒也解决不了。确认不是刷新问题。
后怀疑是解析不出数据,故在从串口读数据,解析出数据中加了一变量并在界面上显示出来,如果数据解析正确,则反映数据,否则反映出0. 结果发现数据都解析出来了,所以解析是没问题的。但外面数据如重量值从100公斤变化到150公斤,但解析出的数据在很长时间(有时长达30秒)内还是100公斤,然后变成150公斤。
给人感觉是串口里堆积了大堆历史数据,没有处理完,要等100公斤数据的帧全部搞完了,处理到150公斤的数据帧才能显示出150公斤。150公斤的数据帧一直等在后面才显得缓慢的。
想改小串口缓冲区的size,或者是自已读数据的rx_buff弄大一点,如从原来的128扩大到1024.好是好了一点,但没有从根本解决。
请问各位贤达如何是好?

解决方案 »

  1.   

    是不是串口缓冲区要flush一下
      

  2.   

    首先,我认为你的程序设计的思路有严重的问题。怎么能用定时器来定时接收数据呀???并且还是间隔200ms才取一次数据,你简直实在糟蹋串口。估计你用的是RS232串口吧,按照最常用的波特率9600BT,你自己算算每200ms它能传多少个16进制数?串口不堵死才怪呢?所以你出现的问题跟界面刷新速度、数据解析和串口通信没有一毛钱关系。
    建议:(1)删掉定时器
          (2)打开串口开始接收数据,没接收到一个新的数据的时候,立即给你的绘图函数发送消息通知其画图再或者直接调用绘图函数(如果数据量不大的话可以直接Invalidate,把你的绘图函数放到OnPaint()里面;如果数据量太大的话;“最好是读多少显示多少”)。
               一句话:整个程序的心跳由串口控制。
    补充:我用RS232串口,以115200的比特率接收数据并画图显示,爽着呢。