您的位置:首页 > 编程语言

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

2016-07-21 11:23 288 查看
启动代码

为什么启动代码一定一要用汇编语言编写,启动代码的主要功能是什么?单片机不用启动代码,为什么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部分的程序即可。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息