完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
我试图提高我的串行消息解析的可靠性(16MHz XTAL,19200波特,循环缓冲区)。在此过程中,我编写了一些代码(XC8 v1.41),这些代码没有按预期执行,除非我逐步完成,并且我试图理解我做错了什么。在自由运行时,即使没有发送串行消息,每次调用函数时,我都会陷入最后一个“.”(已经迷路了);我可以看到DBG2行每10ms运行一次,这是调用任务的频率。我知道有16位的数学,返回和比较,所以操作偶尔会被中断,但不是每次,对吗?而且,当没有消息进入时,这些中断中的值没有改变。然后我尝试了以下步骤:在自由运行时,我仍然看到DBG2行每10ms运行一次,即使没有消息被pc机发送。如果我使用PICKIT3,代码就可以工作。当我在DBG2_HI设置断点时,即使MPLab X(v3.51)说rxbuf_cnt是0,我每次都掉进去。然后我尝试了以下步骤:如上所述,我显著地减少了看到DBG2行转到hi的频率,但仍然是3.8s左右。据我所知,如果没有消息被发送,它就不会再掉进最后一个。最后,我必须做下面的事情……通过双重检查,我看不到运行时的BG2行HI和没有收到消息。我写的第二或第三组代码有什么不对吗?为什么需要在RXBUFFCNT和6的比较中关闭全局中断?为什么我需要一个双重检查代码是100%可靠?关于可能发生什么的想法欢迎!下面是一些支持CODEDTMR1包装~1ms,并调用TSKYCNTRI减缩()
|
|
相关推荐
7个回答
|
|
如果关闭中断可以防止问题,那么ISR中的某些问题就会引起问题。我没有看到你的ISR,可能发布你的ISR代码。
|
|
|
|
RX缓冲区为200字节。是的,rs232_1_rxbuf_cnt()可以返回一个char,rxbuf_cnt也可以是一个char,以便避免必须关闭中断,但是我应该能够安全地完成这些事情,而不必经历所有这些措施,不是吗?
|
|
|
|
还没有看到您的中断代码。最大的危险在于有16位变量可以被中断访问,因为当非中断代码正在访问时,高字节或低字节可能会发生变化。正如Jack所说,显然,您的中断正在造成一些问题,但是您并没有拥有那个代码。
|
|
|
|
我注意到一件事,如果您使用的变量在中断和主代码中使用,那么它们可能需要声明为volatile。如果它们不止一个字节,它们可能需要是“原子”的。我同意中断一般应该避免调用函数。
|
|
|
|
在XC8中调用函数的中断对OCG来说可能不会那么糟糕。它不太可能推不需要的东西,无论如何,可以内联调用。我投票赞成PStechPaul。
|
|
|
|
@ CinziaG:谢谢你发现了,是的,一个0不见了。我还没有使用那个代码,因为我的tx是基于任务和阻塞的,而不是基于中断的,但是我希望在不久的将来改变它,并且由于您发现了它,我将避免这个错误。我使用中断内部的函数调用来实现极大的可移植性。无论使用函数调用还是将代码放在ISR中,中断代码和主线代码都将访问变量。因此,无论哪种情况,我都必须小心。由中断代码和主线代码访问并且是16位的变量都被声明为易失性的。当然,这并不能保证原子的使用。因此,当在主线代码中使用这些变量时,在访问这些变量之前,我禁用了关联的中断。因此,任务计数器从未被重置,而函数在每次while循环中被调用,实际上比每100ms更频繁。一旦我修复它,代码就会按预期执行。然而,我不理解为什么代码没有按预期执行。如果“RxBufcCNT”是0,那么每次都应该返回,不管我问这个问题有多频繁。但也许有些事情我不明白。当然,可能会对时间造成影响。谢谢大家的输入!!
|
|
|
|
请注意,仅因为禁用了Rx中断,当发生另一个中断(例如,TMR)时,不会停止Rx中断的服务。有些中断同时检查IE和IF标志,但不是全部,也不检查Rx中断。正如其他人所说,最好改为8位原子访问,这样就不必担心这些内容和所有“访问”例程。您可以在缓冲区大小上放置一个编译器检查警告,以确保没有人在它的范围内增加超过256个字节。
|
|
|
|
只有小组成员才能发言,加入小组>>
5244 浏览 9 评论
2035 浏览 8 评论
1955 浏览 10 评论
请问是否能把一个ADC值转换成两个字节用来设置PWM占空比?
3209 浏览 3 评论
请问电源和晶体值之间有什么关系吗?PIC在正常条件下运行4MHz需要多少电压?
2260 浏览 5 评论
779浏览 1评论
672浏览 1评论
有偿咨询,关于MPLAB X IPE烧录PIC32MX所遇到的问题
598浏览 1评论
PIC Kit3出现目标设备ID(00000000)与预期的设备ID(02c20000)不匹配。是什么原因
682浏览 0评论
579浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-25 05:57 , Processed in 1.309429 second(s), Total 90, Slave 74 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号