最近开发一个项目,使用CCS进行编译和debug,发现debug的一个问题,这个会导致我们误判,比如我遇到的问题:
描述:
我在调试TDA4x的内置mcu,外面挂了一个NorFlash,我在调试这个Flash的擦除、读和写功能,但是突然发现出现了掉电之后不保存的问题,这就让我纳闷了,命名在debug的时候看到Flash地址已经写进去值了,而且也可以读出来,但是停止debug然后断电,再继续debug的时候发现那块地址写入的数据都没保存,尴尬。。。
分析:
经过漫长的调试,而且咨询了供应商,还是没有得到解决,然后在一个阳光明媚的下午,突然我想到了一个问题,是和我的操作有关,可能是这个问题导致的,然后开始验证这个想法,果然是这个问题导致的,这个问题对我映像很深刻,所以就想记录下来。
操作:
编译 -> 上电debug ->运行case -> 停止debug -> 断电
对操作分析:
上述操作咋一看没啥问题,但是我忽略了一个问题,CCS在debug界面按了停止按钮之后,如果不断电的话程序会继续执行,就是在“停止debug -> 断电”这个步骤间会有个几秒的时间,这几秒会继续运行程序。
测试case分析:
如下是我的测试case,先擦除,然后写,最后读,这个case是放在一个周期任务中执行的,那么按照我的操作,在读操作完之后我将debug停止,然后再断电,这个过程中还会运行程序,而这个case是周期执行的,所以它有很大概率就会跑到擦除这一步,因为我擦除的大小是0x100000,需要几秒钟的时间,正好这个操作的间隔也是几秒,所以就会把我debug写入的数据都擦除掉,所以我再次上电看到的现象就是写入的数据没了,即掉电不保存。
改进操作:
编译 -> 上电debug ->运行case -> 断电 -> 停止debug
我操作改为,写完数据并读取成功后,先断电,然后按停止debug的按钮,然后再次上电看写入的数据,果然是有的,经过多次测试,完全没问题,问题解决,被自己坑了,尴尬。。。
如果看了这个记录对你有帮助的话请点个赞鼓励一下呀!!!