小弟初学S3C2440,写此博客仅想记录学习过程中的痛并快乐的辛酸历程。由于只学到了点点皮毛,难免看问题有些片面,甚至出错。还请各位高人指正,让小弟对问题有全新认识,同时也避免了误人子弟,不胜感激。
在学51的时候,就老师说到了引导码,他说单片机需要用引导码,指引他,才能成功运行代码。由于烧录软件(我用的是STCISP)自动吧引导码加载进去了,所以就不需要我们再去配置了。从那时开始,我就觉得这个引导码真神奇,一直想学习一下怎么写,但是对于51没有找到相关资料。有幸在学习arm9的时候又碰到了这个问题,能让我了此心愿。
言归正传,引导码说白了就是用汇编语言调用C函数,(完全个人意见,如有错误,请指正)而这个函数比较特别,是C语言的MAIN函数。
1设置堆栈:既然是调用C语言函数,那么免不了要配置堆栈,为什么一定要配置堆栈,可以看一下反汇编,当调用MAIN函数时,使用的是BL,一定会存在LR寄存器存值现象,但在C语言中也会有调用子函数现象,所以也会存在使用LR现象,那么可想而知,如果不把 BL main这时保存在LR的地址压入栈,LR寄存器中的值一定会被后来值冲掉,当代码运行完MAIN函数后,程序找不到返回地址,便会跑飞。
2调用主函数MAIN(保持队形;有些废话,)
3清理工作:MAIN函数返回后,做一些后续工作
4配置时钟:
5各种硬件资源配置。
*注:只有1,2才是最重要的,一旦1,2 写好后,就可以运行C语言了,4,5两项完全可以在C语言函数里面配置。