arm9引导码没那么神奇

来源:互联网 发布:人脸识别算法开源代码 编辑:程序博客网 时间:2024/06/08 09:14

小弟初学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语言函数里面配置。

0 0