之前遇到了一个关于FLASH编程的问题,和原子哥遇到的某个问题是差不多的,帖子在这:
http://www.openedv.com/forum.php?mod=viewthread&tid=24177
也就是在擦除FLASH的时候,运行printf就能正常擦除,调试也能进行擦除,但如果不printf也不调试,则必须得关闭数据缓存才能擦除,这个问题我当时也遇到了,后来看了原子哥的这帖子解决了。
但是就在昨天,我又遇到了类似的问题,运行freertos的时候,有多个任务,其中有个任务在频繁的分别从网口接收数据,一个任务接收串口的数据但不是一直有数据,另一个任务会对这两组数据进行解析并且把数据从串口发出去,然后有个灯,这个灯会根据从串口解析出来的数据执行不同的动作,现在问题来了,从网口频繁接收数据(大概10ms 40字节,连续收,且这个时候串口也会频繁打印信息)的时候,如果突然从串口接收来数据的话,整个系统就死了,我看了下不管是任务优先级、资源、信号量、队列什么的都用的正确的,然后我尝试去调试看是什么问题,结果打开keil的调试后,就死活不会出现这个问题,关闭了调试才有。
我想问下大家知道这是为什么吗?为什么printf打印 和 调试会对结果造成影响?
那个只是解决方法,但是在擦除时如果调用printf或者进入调试就可以不用禁止这个ACR也能正常擦除
对的,只是类似的情况让我想起来了你之前的帖子,就是上面的那个链接,也就是使用调试时一切正常,不调试直接运行就会出错。
这个问题我已经解决了,是因为团队其他人员操作了一个野指针,而进入调试时能正常运行的情况应该是楼上的一个哥们说的时序不同。
但我现在依然很疑惑上面链接中的文章中出现的问题,也就是printf与调试都会对flash编程产生影响,而其他操作都不会,当然除了关闭数据缓存。当时我也出现了这样的情况,然后查阅了非常多的资料,依然无法理解这一现象的原因。不知原子哥是否能指点一下
一周热门 更多>