当前位置:首页 > 嵌入式 > 嵌入式硬件
[导读]一 . 引言:对于 PC 机,其开机后的初始化处理器配置、硬件初始化等操作是由 BIOS ( Basic Input /Output System )完成的,但对于嵌入式系统来说,出于经济性、价格方面的

一 . 引言:

对于 PC 机,其开机后的初始化处理器配置、硬件初始化等操作是由 BIOS ( Basic Input /Output System )完成的,但对于嵌入式系统来说,出于经济性、价格方面的考虑一般不配置 BIOS ,因此我们必须自行编写完成这些工作的程序,这就是所需要的开机程序。而在嵌入式系统中,通常并没有像 BIOS 那样的固件程序,启动时用于完成初始化操作的这段代码被称为 Bootloader 程序,因此整个系统的加载启动任务就完全由 Bootloader 来完成。简单地说,通过这段程序,可以初始化硬件设备、建立内存空间的映射图(有的 CPU 没有内存映射功能如 S3C44B0 ),从而将系统的软硬件环境设定在一个合适的状态,以便为最终调用操作系统内核、运行用户应用程序准备好正确的环境。 Bootloader 依赖于实际的硬件和应用环境,因此要为嵌入式系统建立一个通用、标准的 Bootloader 是非常困难的。 Bootloader 也依赖于具体的嵌入式板级设备的配置,这也就是说,对于两块不同的嵌入式主板而言,即使它们是基于同一 CPU 而构建,要想让运行在一块板子上的 Bootloader 程序也能运行在另一块板子上,通常都需要修改 Bootloader 的源程序。

二 . 启动流程

系统加电复位后,几乎所有的 CPU 都从由复位地址上取指令。比如,基于 ARM7TDMI内核的CPU 在复位时通常都从地址 0x00000000 处取它的第一条指令。而以微处理器为核心的嵌入式系统通常都有某种类型的固态存储设备(比如 EEPROM 、 FLASH 等)被映射到这个预先设置好的地址上。因此在系统加电复位后,处理器将首先执行存放在复位地址处的程序。通过集成开发环境可以将 Bootloader 定位在复位地址开始的存储空间内,因此 Bootloader 是系统加电后、操作系统内核或用户应用程序运行之前,首先必须运行的一段程序代码。对于嵌入式系统来说,有的使用操作系统,也有的不使用操作系统,比如功能简单仅包括应用程序的系统,但在系统启动时都必须执行Bootloader ,为系统运行准备好软硬件运行环境。

系统的启动通常有两种方式,一种是可以直接从Flash启动,另一种是可以将压缩的内存映像文件从 Flash (为节省Flash 资源、提高速度)中复制、解压到RAM ,再从RAM 启动。当电源打开时,一般的系统会去执行ROM(应用较多的是Flash)里面的启动代码。这些代码是用汇编语言编写的,其主要作用在于初始化CPU 和板上的必备硬件如内存、中断控制器等。有时候用户还必须根据自己板子的硬件资源情况做适当的调整与修改。

系统启动代码完成基本软硬件环境初始化后,对于有操作系统的情况下,启动操作系统、启动内存管理、任务调度、加载驱动程序等,最后执行应用程序或等待用户命令;对于没有操作系统的系统直接执行应用程序或等待用户命令。

启动代码是用来初始化电路以及用来为高级语言写的软件做好运行前准备的一小段汇编语言,在商业实时操作系统中,启动代码部分一般被称为板级支持包,英文缩写为 BSP 。它的主要功能就是:电路初始化和为高级语言编写的软件运行做准备。系统启动流程如图 1 所示,主要的过程如下:

 

1. 启动代码的第一步是设置中断和异常向量。

2. 完成系统启动所必须的最小配置,某些处理器芯片包含一个或几个全局寄存器,这些寄存器必须在系统启动的最初进行配置。

3. 设置看门狗,用户设计的部分外围电路如果必须在系统启动时初始化,就可以放在这一步。

4. 配置系统所使用的存储器,包括 Flash , SRAM 和 DRAM 等,并为他们分配地址空间。如果系统使用了 DRAM 或其它外设,就需要设置相关的寄存器,以确定其刷新频率,数据总线宽度等信息,初始化存储器系统。有些芯片可通过寄存器编程初始化存储器系统,而对于较复杂系统通常集成有 MMU 来管理内存空间。

5. 为处理器的每个工作模式设置栈指针, ARM 处理器有多种工作模式,每种工作模式都需要设置单独的栈空间。

6. 变量初始化,这里的变量指的是在软件中定义的已经赋好初值的全局变量,启动过程中需要将这部分变量从只读区域,也就是 Flash 拷贝到读写区域中,因为这部分变量的值在软件运行时有可能重新赋值。还有一种变量不需要处理,就是已经赋好初值的静态全局变量,这部分变量在软件运行过程中不会改变,因此可以直接固化在只读的 Flash 或 EEPROM 中。

7. 数据区准备,对于软件中所有未赋初值的全局变量,启动过程中需要将这部分变量所在区域全部清零。

8. 最后一步是调用高级语言入口函数,比如 main 函数等。

三 . 程序分析

下面根据实际经过测试的代码详细讲述系统的启动过程。

.text /* 将此操作符开始的代码编译到代码段或代码段子段中 */

/* 集成开发环境( IDE )可以通过链接脚本文件将下面的语句定位在零起始地址,系统上电后 CPU 从此处开始执行 */

ENTRY:

b ResetHandler /* 跳至 ResetHandler ,此句被定位在零起始地址 */

/* 除用户模式外的其他 6 种模式称为特权模式。特权操作模式主要处理异常和监控调用(有时称为软件中断),它们可以自由的访问系统资源和改变模式。特权模式中除系统模式以外的 5 种模式又称为异常模式,下面的代码用于出现异常时 CPU 就会根据以下的语句自动跳转到对应的异常处理程序处 */

b HandlerUndef /* handlerUndef */

b HandlerSWI /* SWI interrupt handler */

b HandlerPabort /* handlerPAbort */

b HandlerDabort /* handlerDAbort */

b . /* handlerReserved */

b HandlerIRQ

b HandlerFIQ

...

...

ResetHandler: /* 上电后跳转到此处开始执行 */

Ldr r0,=WTCON /* 禁止看门狗 */

ldr r1,=0x0

str r1,[r0]

ldr r0,=INTMSK /* 屏蔽所有中断请求 */

ldr r1,=0x07ffffff

str r1,[r0]

/* 设置时钟控制寄存器 */

ldr r0,=LOCKTIME[!--empirenews.page--]

ldr r1,=0xfff

str r1,[r0]

.if PLLONSTART

ldr r0,=PLLCON /* 设置 PLL */

ldr r1,=((M_DIV<<12)+(P_DIV<<4)+S_DIV) /*Fin=8MHz,Fout=64MHz*/

str r1,[r0]

.endif

ldr r0,=CLKCON

ldr r1,=0x7ff8 /* 所有单元时钟允许 */

str r1,[r0]

/* 为 BDMA 设置复位值 */

ldr r0,=BDIDES0

ldr r1,=0x40000000 /* BDIDESn 复位值应为 0x40000000 */

str r1,[r0]

ldr r0,=BDIDES1

ldr r1,=0x40000000 /* BDIDESn 复位值应为 0x40000000 */

str r1,[r0]

/* 设置存储器控制寄存器,存储器的配置数据都存储在 SMRDATA 为起始地址的数据表中,下面的代码可以一次将预先配置好的初始化数据存入与存储器控制器相关的 13 个寄存器,这些寄存器则是以 0x01c80000 为起始地址的 13 个连续的 32 位寄存器 */

ldr r0,=SMRDATA

ldmia r0,{r1-r13}

ldr r0,=0x01c80000 /* BWSCON 存储控制寄存器地址 */

stmia r0,{r1-r13}

/* 初始化堆栈 */

/* CPU 复位后是处于管理模式下的,所以首先要初始化管理模式下的堆栈寄存器 */

ldr sp, =SVCStack

/* 由于处理器的每种运行模式都要有自己独立的物理堆栈寄存器 R13 ,在用户应用程序的初始化部分,一般都要初始化每种模式下的 R13 ,使其指向该运行模式的栈空间,这样,当程序的运行进入异常模式时,可以将需要保护的寄存器放入 R13 所指向的堆栈,而当程序从异常模式返回时,则从对应的堆栈中恢复,采用这种方式可以保证异常发生后程序的正常执行 */

bl InitStacks /* 跳转至其它堆栈初始化程序并返回 */

/* 设置 IRQ 中断处理 */

/*44B0 有两种中断模式:一种是没有中断向量表;一种是使用了中断向量表,使用中断向量表只能是 IRQ 方式。当使用中断向量表的时候,中断发生时由 S3C44B0 的中断控制器根据中断向量表,利用硬件方式自动跳转到相应的中断处理服务程序所在的位置;不使用中断向量表时按下面的代码,利用软件方式跳转而进行中断处理,因为 S3C44B0 有 30 个中断源,所以需要程序判断以确定调用那个中断服务程序 */

ldr r0,=HandleIRQ /* 如果在 0x18 和 0x1c 地址处无 “subs pc,lr,#4”*/

ldr r1,=IsrIRQ /* 为了中断正常返回这些语句是必须的 */

str r1,[r0]

/* 拷贝读写区域数据 / 数据区准备,将系统需要读写的数据和变量从 ROM 拷贝到 RAM 里。 Image_RO_Limit 、 Image_RW_Base 、 Image_ZI_Base 等这些符号还会在另外的链接脚本文件中出现,这些符号是用来定位程序各个段的参考信息。集成开发环境在编译链接的时候会根据我们编写的程序,把它们转换成用来对各个段定位的地址信息 */

LDR r0, =Image_RO_Limit /* 取只读数据区域地址指针 */

LDR r1, =Image_RW_Base /* 准备执行拷贝操作 */

LDR r3, =Image_ZI_Base

CMP r0, r1 /* 检查是否相同 */

BEQ F1 /* 相同则跳过拷贝操作 */

F0:

CMP r1, r3 /* 执行拷贝操作 */

LDRCC r2, [r0], #4

STRCC r2, [r1], #4

BCC F0

F1:

LDR r1, =Image_ZI_Base /* 零数据准备区起始地址 */

MOV r2, #0

F2:

CMP r3, r1 /* 执行数据区清零 */

STRCC r2, [r3], #4

BCC F2

MRS r0, CPSR

BIC r0, r0, #NOINT /* 中断请求允许 */

MSR CPSR_cxsf, r0

/* 跳转到 C 入口程序 */

BL Main

B .

四 . 总结:

启动过程中的初始化程序就是初始化 CPU 内部各个关键的寄存器、配置外围硬件电路相关寄存器、建立中断向量表等,然后跳转到一般由高级语言编写的主函数的应用程序代码去执行,这样就可以利用高级语言来编写完成系统设计所要求的各种功能。初始化的过程对大多数初学者来说,比较难理解的是中断的处理和一些少见的操作符号,这些符号多是一些宏定义或系统用于在内存空间中对各个段的定位标识符号。掌握了 S3C44B0的启动代码之后,对系统功能程序设计会起到很大的帮助,是进行下一步程序设计的基础。

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

9月2日消息,不造车的华为或将催生出更大的独角兽公司,随着阿维塔和赛力斯的入局,华为引望愈发显得引人瞩目。

关键字: 阿维塔 塞力斯 华为

加利福尼亚州圣克拉拉县2024年8月30日 /美通社/ -- 数字化转型技术解决方案公司Trianz今天宣布,该公司与Amazon Web Services (AWS)签订了...

关键字: AWS AN BSP 数字化

伦敦2024年8月29日 /美通社/ -- 英国汽车技术公司SODA.Auto推出其旗舰产品SODA V,这是全球首款涵盖汽车工程师从创意到认证的所有需求的工具,可用于创建软件定义汽车。 SODA V工具的开发耗时1.5...

关键字: 汽车 人工智能 智能驱动 BSP

北京2024年8月28日 /美通社/ -- 越来越多用户希望企业业务能7×24不间断运行,同时企业却面临越来越多业务中断的风险,如企业系统复杂性的增加,频繁的功能更新和发布等。如何确保业务连续性,提升韧性,成...

关键字: 亚马逊 解密 控制平面 BSP

8月30日消息,据媒体报道,腾讯和网易近期正在缩减他们对日本游戏市场的投资。

关键字: 腾讯 编码器 CPU

8月28日消息,今天上午,2024中国国际大数据产业博览会开幕式在贵阳举行,华为董事、质量流程IT总裁陶景文发表了演讲。

关键字: 华为 12nm EDA 半导体

8月28日消息,在2024中国国际大数据产业博览会上,华为常务董事、华为云CEO张平安发表演讲称,数字世界的话语权最终是由生态的繁荣决定的。

关键字: 华为 12nm 手机 卫星通信

要点: 有效应对环境变化,经营业绩稳中有升 落实提质增效举措,毛利润率延续升势 战略布局成效显著,战新业务引领增长 以科技创新为引领,提升企业核心竞争力 坚持高质量发展策略,塑强核心竞争优势...

关键字: 通信 BSP 电信运营商 数字经济

北京2024年8月27日 /美通社/ -- 8月21日,由中央广播电视总台与中国电影电视技术学会联合牵头组建的NVI技术创新联盟在BIRTV2024超高清全产业链发展研讨会上宣布正式成立。 活动现场 NVI技术创新联...

关键字: VI 传输协议 音频 BSP

北京2024年8月27日 /美通社/ -- 在8月23日举办的2024年长三角生态绿色一体化发展示范区联合招商会上,软通动力信息技术(集团)股份有限公司(以下简称"软通动力")与长三角投资(上海)有限...

关键字: BSP 信息技术
关闭
关闭