我现在正在做一个项目,其中一个功能如下:
    采用两个缓冲区,每个缓冲区有170个数据元素,程序运行时,后台缓冲区从硬件获取数据,前台缓冲区的数据通过串口发送出去。
    该项目中需要用到了8个串口,我采用115200的波特率发送数据,主要有一下两个方案:
  (1)每一个串口对应一个发送线程,根据协议发送前台缓冲区的170帧数据,在获取数据的线程中,从硬件中读取数据到前台缓冲区中,并且当后台缓冲区填满了170帧后检查前台缓冲区的所有数据,即每个串口是否发送完毕,只要有一个没有发送完,就报警,同时切换前后台缓冲区,即前台缓冲区切换到后台,后台缓冲区切换到前台。这样作的问题是:系统线程太多,如果有其他程序干扰时,很容易出现数据没有发送完毕的情况。
 (2)所有串口对应一个发送线程,在这个线程中采用异步的方式逐个发送每个串口发送数据,这样做效果好像有所改进,但是需要每次等待所有串口发送发功完毕,才能进行下一帧数据发送。目前我没有进行等待,只是简单的调用了一下sleep函数,不知道这样做有没有问题。
  希望有经验的大侠给一些思路,谢谢

解决方案 »

  1.   

    不是很清楚你的题意
    1、所有串口共用同样的前后台缓冲区?为什么这样做?
    2、系统线程太多,如果有其他程序干扰时,很容易出现数据没有发送完毕的情况?怎么会这样?
      

  2.   

    (1)之所以要用前后台缓冲,是因为协议规定,每个串口只是从一帧数据中取出某一部分发送
    (2)由于加上串口线程,系统一共十个线程,当系统任务繁忙时,很容易导致串口线程分配的时间不够,由于数据获取硬件不停的向后台缓冲区添加数据帧,导致后台缓冲区已满,而前台缓冲区的数据还没有发送完毕
      

  3.   

    这个问题难道到现在还没有解决???