ADS1.2 优化,AXD的迷惑
作者:陆麟
转载请征得作者同意.
2003.12.12
今日正在操SMDK2500, 上手写了点代码. 猛然发现有个测试点始终不对. 一个指针在使用后会变成非法值. 莫非C的运行库出问题? 嘿嘿,
经过AXD的DISASM观察才发现, 原来是优化导致的问题, 程序正常. 呵呵. 给大家看个图片:

看到了没有啊, 就是那个指针p的毛病. 当malloc完成, p是个有效VALUE, 而调用完sprintf后, p就非法了...
原来ADS的强力优化把p给优化了. 根本没有为p分配LOCAL STORAGE. 由于malloc的返回值是sprintf的第一的参数,
根据ARM调用约定, 第一参数放r0寄存器. 而r0-r4是不保存的. 任何调用均可以使用... TNND, 把AXD给搞糊涂了.
去查看p变量就变成了0xcdcdcdcd....
如果后面有个free(p)的调用存在, 则p就至少会有1个寄存器作为临时存储的地方, 就不会把p冲毁了. :)