就是当你在线仿真调试的时候,变量多的时候MDK的变量(有些是不能显示出来,)
我不知道这算不算是BUG,现在我把我个人经历写出来,希望同行有类似经历时,多留个心眼,换个思维解决,说不定不是你的错!
在我的程序中,刚开始是KEIL MDK建立的。
用到DMA+ADC+TIMER1,即把ADC得数据放到一个变量ADC_convertedValue[N]中去(N>32)。
在我硬件仿真的时候一直发现变量ADC_convertedValue[N](当然是MDK),DMA传完后的数据很奇怪,有些数据正常,但是有些数据一直是0。 但更奇怪的是ADC_convertedValue[32]这个变量中的数据永远是0!(虽然我有过怀疑数据出错,但是看到前面一部分的数据都是对的,所以就认为数据没有错)眼见为实(当然是编译器仿真的时看到的), 加上我一直很信赖编译器。所以我怀疑程序有问题。但是无论我怎么改程序,都是那样(这一段浪费我的很多时间,以天计算,因为无法解决,好多天都不去搞它了。后来终究又放不下,又搞,这样反反反复复~~),在无论怎样改程序都没有改善的情况下,我换了个思维,即把转换的数据通过串口发到PC上看。 这一看,惊呆了,数据都正常,没有变量是0的,这样就的结果使我一下懵了,让我知道了,原来不是程序的问题。 竟然是编译器欺骗了我!! 郁闷,大咒,TMD的垃圾(和IAR相比,编译器超慢,简直是牛车)。
为了证明是MDK的错误,我把工程移至到IAR EWARM,发现数据也是正常的。
真后悔当初~~~
有图为证: |