童鞋们,在做实验的时候,有没有遇到过老师都不知道的为什么的问题?我这个奇葩学生经常让老师沉思好长时间,然后给我一些说了等于没说的答案。其实归根结底还是我的问题太脑残了,一般人都不会犯,所以出现后就会很蛋疼。下面就说两个arm开发的问题,这些问题是对理论的了解不甚明了以及对工具的使用不甚熟练所造成的:
一. Could not find any input files to link.
找不到任何输入文件去连接。这个问题很有可能就是加载源文件的时候某个源文件选的是Debug,而工程中选的却是DebugRel。细心地童鞋是不会犯这种错误的。
二.源文件make成功后,点击Debug去调试,我们希望绿色的箭头指向开始程序(比如Start.s)的第一条汇编指令,然而呈现眼前的却是蓝色箭头、红色圆点、红色方框,位置是我们的Start.s将要调用的Main.c的第一条语句,或者是Disassemble后的程序,也就是编译出来的汇编程序。
第一种情况是我们的DebugRel Settings->ARM Linker->Options->Image entry point 的值与DebugRel Settings->ARM Linker->Output->RO Base的值相同造成的。在没有c语言源文件的情况下,这样不会有什么影响RO Base就是我们的程序调试(下载后运行应该也是)入口地址,在有c文件的情况下,编译后的镜像文件是Main.c程序存放在RO Base的位置,然后是Main.c调用的Add.s文件,最后才是初始化用的Startup.s文件。“Image entry point等于RO Base”当然是从c程序处开始调试了。而直接进汇编程序的原因是Image entry point这一项没有内容或者是其他值造成的,这种情况下单步执行会有找不到程序的异常产生。
解决方法是查看编译好的镜像文件(在调试源程序中右键选disassemble),找到startup.s文件的存放位置,把Image entry point的值设置为位置就可以了。