当前位置:嗨网首页>书籍在线阅读

07-执行环境

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

7.2.4 执行环境

引导加载程序的镜像之所以复杂,另一个主要的原因是缺少执行环境。当代码清单7-3中的代码开始执行时(回想一下,这是系统加电后处理器执行的最初的机器指令),几乎没有资源可供程序使用。硬件设计保证了处理器可以从闪存中正确获取指令,并且保证了系统的时钟频率是某个默认值,但除此以外,程序几乎不能做任何假定[2]。处理器复位后的状态一般是由处理器厂商定义的,但是板卡的复位状态是由硬件设计人员定义的。

[2] 根据体系架构、处理器和硬件设计的不同,具体情况有所不同。

实际上,大多数处理器在启动时都没有可使用的DRAM来暂时存储变量,或是用作栈,然而,C程序的函数调用规范(calling convention)需要一个栈。如果你不得不编写一个“Hello World”程序,但没有DRAM可用(也就没有栈),这个程序会和传统的“Hello World”有很大差别。

因为这个限制的存在,设计用于初始化硬件的代码面临极大的挑战。结果是,引导加载程序在启动时执行的一项首要任务就是配置、可以在最少RAM上运行的足够的硬件。有一些专为嵌入式系统设计的处理器拥有少量片上(on-chip)静态RAM。我们所讨论的405GP处理器就属于这种情况。如果有RAM可用,可以使用RAM的一部分作为栈,并构建合适的环境,用于运行高级语言(比如C语言)编写的代码。这就允许剩余的处理器和平台初始化工作可以由其他语言编写完成,而不是汇编语言。