This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

急急急



我用SCI FIFO发送中断发数,过程是我先讲要发送的数组一个一个的放入缓存区,然后触发中断,直到发送完成。

现在我要发送256个数据,有时候它发的正确,有时候它只能发送100多个,并且头和尾都在,中间数据都丢了。

下边是我用来测试的,放到WHILE循环中

while(1)
 {
  data->sendSCIChannel = SCI1;
  SendData(data);
  DELAY_US(2000000L);

 }

 

下边是我监视到的结果:

只收到80个数据,头尾一样,中间的数据丢了很多,而且还不一样

A5 5A 00 ED FF 73 CF B1 B3 6A E4 9F E7 6F AF C3 12 06 BA F2 FD 8F 1D BA 3C 30 EA 6B 4D B4 B9 AD 6E 30 6F 5A 73 B3 BF 5F 06 AA 94 A2 26 2C 9D 1E 6D 87 07 5D 86 10 41 42 65 58 BE E4 67 DB 99 5A E2 66 AF 4C FC 08 BD 12 8E F0 0F 59 93 D3 BA CF

A5 5A 00 ED FF 73 CF B1 B3 6A E4 9F E7 6F AF C3 12 06 BA F2 FD 17 D4 90 E3 82 52 6B 4D B4 B9 AD 6E 30 6F 5A 73 B3 BF 5F 06 AA 94 A2 26 2C 9D 1E 6D 87 07 5D 86 10 41 42 65 58 BE E4 67 DB 99 5A E2 66 AF 4C FC 08 BD 12 8E F0 0F 59 93 D3 BA CF

后来,我换了SCI的波特率,就没问题了,而且只有256000是没问题的,中间接了个485

  • 建议你下别接485看看  是不是会出现丢数据的问题   

    我觉得应该是中间转化出现了问题

  •  你好,从你的表述中,其实已经隐含着一个情况,头尾一定不会丢,但是中间会丢。

    速率最高也不会丢,这其实已经说明了问题了。

    你的软件设计架构上有问题,每一次的单元数据发送,你只触发了发送,确没有判断有没有发完。

    所问题的根源在于,某次数据没有发送完,你却写入了下一次需要发送的数据,而再一次写入时很有可能会覆盖掉待发送的数据。

    也就是说你的工作场景是一个快速设备访问低速设备,但你的设计场景却没有好好处理两者的衔接。

    希望对你有帮助!