现象:
我的程序 定时中断=12ms,中断服务程序大约执行时间=0.5ms
我用MODSCAN32软件读取保持寄存器,寄存器数量=125,即:
上位机发送8字节的请求命令,从机返回254字节的应答命令,发送通讯间隔=100ms.
A.RS232测试结果
(1).波特率在9600,19200,38400时,通讯质量非常好,成功率100%. 但是当波特率=57600,115200时,通讯质量说得过去,只达到99.1%左右.
(2).当屏蔽中断服务程序中的代码,则当波特率=57600,115200时,通讯质量也非常好,成功率100%
B.RS485测试结果
(1).波特率在9600,19200时,通讯质量非常好,成功率100%. 但是当波特率=38400,57600,115200时,通讯质量非常差,只达到2%左右.
【1】.虽然中断嵌套能够解决通讯问题,我不想使用中断嵌套.
因为通讯只是次要工作,而定时中断中的代码是非常重要的代码,我不希望其它中断打断它.
【2】.数据接收:采用中断+缓存的方法
【3】.数据发送:采用"空中断"+"完成中断"方式
由于硬件上可能焊接485芯片,因此数据发送:采用"空中断"+"完成中断"方式.
即为确保最后一个字节到达上位机,最后一个字节采用发送完成中断发送.
由于数据发送时,采用了"空中断"+"发送完成中断",根据马潮老师所说的,达到了最佳的流水性性能,即:不停的装载数据发送.
但是却又增加了系统的负荷.导致频繁的产生"数据空中断".
解决方法1:
仅仅使用"发送完成中断"发送数据,通讯质量有所好转,在波特率=115200时,通讯成功率至少达到90%
解决方法2:
使用"查询方式"发送数据,在波特率=115200时,通讯成功率达到100%
结论:
当定时中断中的代码执行时间稍微长时,应该禁止使用"空中断"+"完成中断"方式发送数据,
最好仅仅使用"完成中断"发送数据.
只有当仅仅使用"完成中断"发送数据时,通讯质量不好(没有达到100%)时,才在主程序中使用"查询方式"发送数据. |