W806使用中断方式接收数据,仅打开UART_INTS_RL和 UART_INTS_RTO两个中断
我设置了两个变量,用来统计在接收的时候进入中断的总次数INT_Count和接收用的次数INT_RX_Count,并且打印每次读取FIFO中的数据个数;
现测试,发送一条153字节的数据,打印情况如下:
RF:16
RF:0
RF:16
RF:0
RF:16
RF:0
RF:16
RF:0
RF:16
RF:0
RF:16
RF:0
RF:16
RF:0
RF:16
RF:0
RF:16
RF:0
RF:9
INT_Count=19,INT_RX_Count=18
从上面打印的结果看,仅接收进入中断18次,但其中一半读取的是0值,我尝试在读取后复位RXFIFO,降低系统主频至40MHz,情况仍然是这样的,显然资源浪费了
现在有两个疑问,1.设定的16字节触发中断,为什么会出现0值触发?2.如何避免这种情况,提高效率?
@ZYQ 感谢您的回答!只是您的回答对我来说没有任何帮助。我大概也知道应该是代码的问题,或者说应该是对这个U使用过程中规避一些坑的用法不熟悉;我如果贴代码,只知道是串口部分的,具体贴哪段,如果知道了就不用在这里寻求帮助了。所以,现在反馈的是测试过程和现象;如果您理解不了,还请原谅,个人表达能力有限。
值得庆幸的是,这个问题目前在群友4061N的帮助下已经解决!在次表示感谢!
下面我们说一下这个研究这个问题的原因,
我的串口部分程序是基于原厂固件库修改而来的,因原厂固件库有很多bug,0.6.0版本中断发送方式是不能正常工作的,此处改了两个地方,还有接收完后对指针进行减操作,在频繁大批量传输时很不安全且会数据错乱!
在校正了这些问题后,串口操作时仍然会偶尔死机的情况……由此特做了以上的测试!
官方固件对处理中断的操作是先清中断标识,然后读取FIFO,会出现以上测试的情况;群友4061N的分析,是清过中断后,由于FIFO中还存在数据,二次触发了中断!
最终,在读取完FIFO后再清一次中断,即可解决双倍中断的情况!
希望各位在使用串口的时候特别注意!
至于我在项目中出现的死机情况是否跟此有关,后续会做进一步测试,到时再告知大家,谢谢!
再次感谢群友4061N的帮助!
问题得到解决就行,我的回答,只是想说,你得抓住重点去提问,并没有其他的意思,如果不知道哪里有问题,那么干脆全部打包贴上去,这样想要帮助你的人,才能分析你的代码,才能真正帮助你;就跟去医院看病一样,你只会对医生说我肚子不舒服,就是肚子不舒服,现象确实是你肚子不舒服,你没说错;关键是大家又不是三岁小孩子,总让医生猜测你可能某某某原因么??这让医生怎么去分呢??
上面,反馈的是测试过程和现象!我觉得这些是最接近问题根本所在的
两个变量都很难理解了,全部打包,更多陌生变量,更没人愿意看了!
不过,还是感谢你的热心回答