启动代码
为什么启动代码一定一要用汇编语言编写,启动代码的主要功能是什么?单片机不用启动代码,为什么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部分的程序即可。