关于一个非常奇怪的问题

2019-07-20 10:11发布

之前遇到了一个关于FLASH编程的问题,和原子哥遇到的某个问题是差不多的,帖子在这:http://www.openedv.com/forum.php?mod=viewthread&tid=24177

也就是在擦除FLASH的时候,运行printf就能正常擦除,调试也能进行擦除,但如果不printf也不调试,则必须得关闭数据缓存才能擦除,这个问题我当时也遇到了,后来看了原子哥的这帖子解决了。

但是就在昨天,我又遇到了类似的问题,运行freertos的时候,有多个任务,其中有个任务在频繁的分别从网口接收数据,一个任务接收串口的数据但不是一直有数据,另一个任务会对这两组数据进行解析并且把数据从串口发出去,然后有个灯,这个灯会根据从串口解析出来的数据执行不同的动作,现在问题来了,从网口频繁接收数据(大概10ms 40字节,连续收,且这个时候串口也会频繁打印信息)的时候,如果突然从串口接收来数据的话,整个系统就死了,我看了下不管是任务优先级、资源、信号量、队列什么的都用的正确的,然后我尝试去调试看是什么问题,结果打开keil的调试后,就死活不会出现这个问题,关闭了调试才有。

我想问下大家知道这是为什么吗?为什么printf打印 和 调试会对结果造成影响?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
17条回答
Szep
2019-07-21 03:34
lanlzp 发表于 2017-12-28 10:32
打印本身和调试代码都会耗费一定的运行时间,这就会导致调式状态和运行状态会有差异

我理解你说的运行时间不同带来的运行结果差异,但个人认为差异不至于如此之大。对于上面链接里的文章,FLASH编程时必须关闭FLASH数据缓存,或者不关闭数据缓存,但必须使用一次串口打印或开启调试才能解决问,我能联想到是调试的确是跟数据总线有关系,因为调试的数据就是走的数据总线,但串口打印我实在是没辙了。

一周热门 更多>