为什么启动代码必须用汇编
来源:互联网 发布:天刀捏脸数据导出 编辑:程序博客网 时间:2024/05/18 06:51
启动代码
为什么启动代码一定一要用汇编语言编写,启动代码的主要功能是什么?单片机不用启动代码,为什么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部分的程序即可。
- 为什么启动代码必须用汇编
- 为什么启动代码必须用汇编
- bootloader的初始化代码为什么必须用汇编写
- 为什么ARM的启动代码是汇编?
- 翻译-为什么objc_msgSend必须用汇编实现
- 为什么objc_msgSend必须用汇编实现
- 为什么 objc_msgSend 必须用汇编实现
- 为什么学好计算机就必须学好汇编?
- 为什么学好计算机就必须学好汇编?
- 为什么bootloader起始的代码都是用汇编写的
- 为什么bootloader起始的代码都是用汇编写的
- stm32启动汇编代码解析
- 汇编写启动代码413
- cortex-m3/m0汇编启动代码分析
- 汇编写启动代码之关看门狗
- 汇编写启动代码之开iCache
- 汇编写启动代码之关看门狗
- 汇编写启动代码之开iCache
- Parcelable序列化对象
- Android中打包JAR时获取资源ID的方法
- Android分享图片失败解决方案
- log(五)——MDC总结
- Python 黑帽编程大纲(变化中)
- 为什么启动代码必须用汇编
- Android使用JUnit进行单元测试
- getMeasuredHeight(),getScrollY(),getHeight()的区别和联系
- GoogleMap-------API KEY申请流程
- GoogleMap-------Google Play services SDK的下载和配置
- GoogleMap-------manifest文件配置
- Java 打印各种直角三角形和乘法表
- GoogleMap-------解决不能使用问题
- linux使用crontab实现PHP执行定时任务