为什么启动代码必须用汇编

启动代码
为什么启动代码一定一要用汇编语言编写,启动代码的主要功能是什么?单片机不用启动代码,为什么arm要用启动代码?

------解决方案--------------------------------------------------------
最开始的几行代码要完成初始化中断向量,堆栈什么的。这些只能用汇编做。
------解决方案--------------------------------------------------------
CPU上电后会从IO空间的某地址取第一条指令。但此时:PLL没有启动,CPU工作频率为外部输入晶振频率,非常低;CPU工作模式、中断设置等不确定;存储空间的各个BANK(包括内存)都没有驱动,内存不能使用。在这种情况下必须在第一条指令处做一些初始化工作,这段初始化程序与操作系统独立分开,称之为bootloader。
一个嵌入式Bootloader最初始部分的代码几乎必须是用汇编语言写成的,因为开发板刚上电后没有准备好C程序运行环境,比如堆栈指针SP没有指到正确的位置。汇编代码应该完成最原始的硬件设备初始化,并准备好C运行环境,这样后面的功能就可以用C语言来写了。
------解决方案--------------------------------------------------------
1. C language 没有 SP(Stack Pointer register), CPSR, CP15 等的控制指令, 若要初始化这些, 一定要用 Assembly code, 其它部份不是不能用 C language 实现, 但诚如 3L 所述, C language 的运行环境尚未准备好, 故 SP 必须先设好, Global Variable, standard library 都还不能使用.
2. 单片机没有 OS 的观念, 可以说全部都是在启动代码的模式.

Paul, Chao @ Techware

------解决方案--------------------------------------------------------
单片机不用启动代码,为什么arm要用启动代码?

上面大家都说了为什么ARM要用启动代码。

其实单片机也是有“启动代码”的。只不过这部分工作不需要单片机程序员自己来完成。

比如用Keil C编写单片机程序,针对指定型号的单片机启动代码由Keil来完成了。不需要我们干涉。

单片机程序只需要直接编写c部分的程序即可。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章