之前遇到了一个关于FLASH编程的问题,和原子哥遇到的某个问题是差不多的,帖子在这:
http://www.openedv.com/forum.php?mod=viewthread&tid=24177
也就是在擦除FLASH的时候,运行printf就能正常擦除,调试也能进行擦除,但如果不printf也不调试,则必须得关闭数据缓存才能擦除,这个问题我当时也遇到了,后来看了原子哥的这帖子解决了。
但是就在昨天,我又遇到了类似的问题,运行freertos的时候,有多个任务,其中有个任务在频繁的分别从网口接收数据,一个任务接收串口的数据但不是一直有数据,另一个任务会对这两组数据进行解析并且把数据从串口发出去,然后有个灯,这个灯会根据从串口解析出来的数据执行不同的动作,现在问题来了,从网口频繁接收数据(大概10ms 40字节,连续收,且这个时候串口也会频繁打印信息)的时候,如果突然从串口接收来数据的话,整个系统就死了,我看了下不管是任务优先级、资源、信号量、队列什么的都用的正确的,然后我尝试去调试看是什么问题,结果打开keil的调试后,就死活不会出现这个问题,关闭了调试才有。
我想问下大家知道这是为什么吗?为什么printf打印 和 调试会对结果造成影响?
FLASH->ACR&=~(1<<10); //FLASH擦除期间,必须禁止数据fetch!
FLASH->ACR&=~(1<<10); //FLASH擦除期间,必须禁止数据fetch!!!搞了我两晚上才发现这个问题!
一周热门 更多>