Keil C51 全局变量名称的改变会影响编译后的程序校验和吗?
请教社友确认一个问题:全局变量名称的改变会影响编译后的程序校验和吗?开始我理解的知识点是不会影响编译后的程序校验和的。网搜的答案也是如此如下图:
但是,实际情况不是这样:全局变量名称的改变会影响编译后的程序校验和
比如:我只是为了可读性,做了如下变量名称改变,发现编译后的程序校验和变了:
g_CheckBatteryTimeCnt改为 g_RtcCheckBatteryTimeCnt 后
校验和就从139FD7 变为了 139FD6 .
请英文好的的社友帮搜一下,有没有Keil C51官方关于这个问题的答案。
用比较工具比较一下生成的HEX文件,看看有啥区别 Beyond Compare 比较好用
好,谢谢!找时间对比下,估计是变量存放的地址变了,校验码虽然不同了,但程序运行是正确的 程序就一个全局变量吗?
先逐个编译c文件,然后是链接,在这一步骤要对所有的变量和代码分配地址,如果改名导致变量表的顺序变化,自然分配地址也就不同。
应该是按字母顺序排列吧。
你可以再试试改名但不改变命名顺序,看hex是否会变化。
例如变量名加后缀,或者变量名称a,b,d改成a,c,d,中间那个变量b改成c,不会影响三个变量的顺序。 health 发表于 2024-9-18 14:14
程序就一个全局变量吗?
先逐个编译c文件,然后是链接,在这一步骤要对所有的变量和代码分配地址,如果改名 ...
分别试过三个全局变量名称的改变,每次只改变一个变量名称,其余(顺序)不动的,其中,2个校验和改变了,有一个无论改变怎样的名称,都不会影响校验和。在keil中查看到汇编语言的窗口,可以确定,校验和改变的原因就是变量存放的地址会变化了,按怎样的规律分配存放地址只有编译器知道了,因该不会是简单的字母顺序。
目前,暂时能确定的就是,C语言源程序代码的状态是确定的时候,编译出来的校验和是确定的,不会随机变,以上的问题就不理会了。只能依赖编译器了,相信keil C51的编译不会有问题。不可能回到用汇编语言编程序了。 可能是按变量名称顺序排序然后分配的,具体如何分配地址的建议咨询Keil总部,不要相信人工智障的回答。
页:
[1]