arm9引导码没那么神奇

小弟初学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
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值