关于一个非常奇怪的问题

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
1楼-- · 2019-07-21 11:08
 精彩回答 2  元偷偷看……
wlq19911021
2楼-- · 2019-07-21 13:47
 精彩回答 2  元偷偷看……
lanlzp
3楼-- · 2019-07-21 14:58
Szep 发表于 2017-12-28 11:03
@正点原子 原子哥最后这个问题有解决吗

        FLASH->ACR&=~(1<<10);                        //FLASH擦除期间,必须禁止数据fetch!
lanlzp
4楼-- · 2019-07-21 20:42
Szep 发表于 2017-12-28 11:03
我理解你说的运行时间不同带来的运行结果差异,但个人认为差异不至于如此之大。对于上面链接里的文章,FL ...

        FLASH->ACR&=~(1<<10);                        //FLASH擦除期间,必须禁止数据fetch!!!搞了我两晚上才发现这个问题!
lanlzp
5楼-- · 2019-07-22 00:24
 精彩回答 2  元偷偷看……
Szep
6楼-- · 2019-07-22 04:56
 精彩回答 2  元偷偷看……

一周热门 更多>