背景:
使用DSP C6748裸机,modbus-RTU-Uart2-Timer3,主程序为数据采集算法处理等过程。
其中,波特率9600,Uart2配置中断为INT4,Timer3为INT5,接收到主机的开始工作命令后,主程序开始不间断采集处理数据,一次工作过程1s(实际工作800ms,空闲时间200ms)。
问题:
没有接收到主机开始工作命令时,主程序开始进入到空闲状态,主机发送查询结果命令01 03等共计8字节长度,DSP全部都能正确接收到并解析应答;
接收到主机开始工作命令后,主程序开始进入到工作状态,此时会有20%多的丢包率(此处指的是接收不到完整的01 03等8字节查询指令)。监测串口接收到的数据发现会出现仅接收到8字节中的01或者01 03前面1或2个字节,后面的就没收到,因此怀疑是串口中断没有被触发或者中断服务函数没有响应。但是,问题是开始工作后才会出现这种情况,故屏蔽掉数据处理算法接口(仅调用屏蔽算法接口),同样测试,发现不会丢包。
再继续看算法部分,屏蔽掉其余部分,剩下几句赋值语句和一个很大的for循环,并且前面带有优化指令 #pragma MUST_ITERATE(1,70000,1);算法仅留下上述赋值语句和for循环,同样测试,也会丢包,只是丢包率貌似小了(具体数值待测试)。
综上:
裸机情况下,一个超大for循环会影响中断响应吗?还是优化会影响?或者有什么别的原因吗?
烦请诸位大佬有遇到类似情况或者有啥办法建议,不吝赐教!!!
感谢感谢!!!