|
这两天一直在完善一个工程,工程不断增大,突然在上机测试的时候发现有几个功能变得不正常,于是有返回到之前的保存的工程状态中,功能有正常了,没办法,一直在找问题,可惜昨天断断续续搞了一天,问题还是没有解决,于是今天早上再凑上一个显示器来做软件仿真。
发现在仿真的时候,有些功能在板子上是正常的,但是在软件仿真的时候,就出现问题。如一个SWITCH的语句,CASE的状态是能判断出来了,但是就是不进入到CASE的条件下的动作,然后就直接跳出,而且在后面的程序中,同一等级的SWITC的判断语句也是一样,但是在实际的使用中,SWITCH的语句是有生效的,功能是有实现的。
另外,就是在实践使用过程中,我的工程中有很多标志寄存器用于表示退出和进入状态的,发现在进入,比如是程序的第四层界面的时候,在第四层界面进行操作的时候,正常是要退出标志清零才会退出的,但是在程序运行过程中,程序会从第四层退出到第二层的界面,这样从程序看必须要清零两个寄存器的,但实际并没有满足清零的条件发生。于是我一直在修改清零的条件,问题还是一直存在,但是这部分的程序在软件的上一个版本是没有问题的,就是修改了程序中的其他部分后出现的。
问题一直烦,后面觉得这个问题应该不是我的程序思维有问题,会不会是软件的问题,于是把工程转到MDK4上编译,下载,问题既然没有发生,很正常。于是有把原来的MDK3.5的程序再下载,问题还在。于是我就以MDK3.5的工程为原本,分别试了几次在MDK4上编译,下载,程序运行都是很正常,如此一来证明了程序本身是没有问题了。
于是我对比了两个版本中的PROJECT中的设置,发觉文件的设置,ROM,RAM的地址都是一样的。后面我在对比一下编译出来的结果,结果分别如下图。
这个MDK3.5的结果
这个MDK4的结果
RAM的使用都是一样,就是代码的大少不一样。这个让我想到会不会是MDK3.5有代码限制呢,但如果有代码限制,估计软件也应该提示啊,这个让我现在还在想为什么。ARM的使用和软件的架构我没有深入去了解过。所以有以下几个问题想提出来。
1.MDK的版本是有限制的,但是我已经使用破解,理论上没有限制。我从网上看有64K和256K的限制,从我的代码看已经超过了64K,下载代码也显示有65K了,估计代码限制不存在了,我很疑惑,会不会还有其他的限制。
2.同样的工程,在两个不同版本中,显示的代码量不一样。这个我有些疑问,同样的软件,我觉得编译的语法和内核等应该是一样的,按道理代码量不应该有这么大的差异,所以,我觉得会不会是我在软件上设置错误,导致编译的结果不一样。
3.大家在使用ARM的时候,设置MDK,通常会设置那些参数。
|
|