第3章的附录 系统引导程序的代码

合集下载

DBR引导代码分析_XP_FAT32

DBR引导代码分析_XP_FAT32

DBR引导代码分析_XP_FAT32整理:太虚野老WINDOWS XP FAT32引导代码共由两部分组成:0柱面,1磁头,1扇区和0柱面,1磁头,13扇区。

用WinHex读0柱面,1磁头,1扇区,如下:图中3个用红色矩形框框住的是3个字符串(NTLDR is missing、Disk error、Press any key to restart)的地址相关的,分别是0x1AC、0x1BF、0x1CC。

每个字符串都以0D 0A开始,其中0D 新行,0A 回车。

蓝色矩形框框住的11个字节是NTLDR文件名,在第13扇区加载NTLDR文件时使用。

引导代码从5A开始,前90个字节为跳转指令和BPB(BIOS参数块)。

用IDA Pro反汇编后如下(包括分析):;//本扇区引导代码的作用是加载第13扇区的XP引导代码seg000:005A 33 C9 xor cx, cx ;//cx寄存器清0seg000:005C 8E D1 mov ss, cx ;//栈寄存器ss=0seg000:005E BC F4 7B mov sp, 7BF4h ;//栈指针SP=7BF4seg000:0061 8E C1 mov es, cx ;//附加数据段寄存器es=0 seg000:0063 8E D9 mov ds, cx ;//数据段寄存器ds=0seg000:0065 BD 00 7C mov bp, 7C00h ;//DBR起始偏移seg000:0068 88 4E 02 mov [bp+2], cl ;//设置标志为0,该标志用于判断是否已经加载过XP引导代码的第一个扇区。

该标志在XP引导代码存在两个以上扇区时发挥作用。

本文XP引导代码只存在一个扇区,所以该标志没有作用。

seg000:006B 8A 56 40 mov dl, [bp+40h] ;//设置驱动器号为80(00H~7FH:软盘;80H~0FFH:硬盘)seg000:006E B4 08 mov ah, 8seg000:0070 CD 13 int 13hseg000:0072 73 05 jnb short loc_10079 ;//读取成功就跳转seg000:0074 B9 FF FF mov cx, 0FFFFhseg000:0077 8A F1 mov dh, cl ;//读取失败后将dh寄存器设置为FF,在后面的加1后,使磁头数为0,从而使计算出来的CHS方式所能访问的最大逻辑扇区号为0,从而直接采用LBA方式寻址。

MAX32663安全引导程序应用程序内部编程指南说明书

MAX32663安全引导程序应用程序内部编程指南说明书

MAX32663 Secure BootloaderIn-Application Programmingwith Python® User GuideAbstractThis guide describes how to securely update application firmware via the MAX32663 Secure Bootloader and a Python host. The protocol details for the MAX32663 Secure Bootloader can be found in the MAX32663 Secure Bootloader User's Guide.Table of ContentsIntroduction (3)MAX32630FTHR (3)MAX32630FTHR I2C Pin Connections (4)Host Software (4)Installing the OpenSSL Library (6)Installing Python (10)In-Application Programming with Python (11)Revision History (13)IntroductionThe MAX32663 Secure Bootloader provides an I2C interface that facilitates the transfer of a keyed and encrypted firmware image from an I2C host to the internal flash. This document describes one method of using this interface to securely program a firmware image using the MAX32630FTHR and Python-based software running on a Windows PC Host.MAX32630FTHRThe I2C bootloader interface on the MAX32663 can be mastered by any host I2C-capable micro and user firmware. The bootloader protocol is detailed in the MAX32663 Secure Bootloader User's Guide. However, for development and production, it is desirable that the preprogrammed MAX32630FTHR is included in the MAX30003WING2# evaluation kit.The MAX32630FTHR contained in the MAX30003WING2# evaluation kit is used to program the MAX32663 on the kit's main PCB. The MAX32630FTHR can be removed from the main PCB and wired directly to the user's product. Note that the MAX32630FTHR is referenced to V DD = 3.3V. Targets referenced differently require voltage translation.MAX32630FTHR I2C Pin ConnectionsThe MAX32630FTHR is connected to the target system as follows:The target system must supply the power and not the MAX32630FTHR.Host SoftwareThe host software uses Python. Several software prerequisites are required to run the Python script on WindowsUse the following steps to download and install Microsoft Visual C++ Runtime:1.Visit the download link here. Click Download.2.Select vcredist_x86.exe. Select Next.4.Read and click to agree to the terms. Select Install.5.Close the installation application.Installing the OpenSSL LibraryUse the following steps to download and install the OpenSSL Library:1.Visit the OpenSSL downloads page here.2.Select Win32 OpenSSL v1.1.10L Light.4.Read and click to agree to the terms. Select Next.5.Leave the destination location default. Click Next.6.Leave The Windows system directory. Click Next.7.Click Install.8.Click Finish when the installation is complete.Installing PythonUse the following steps to download and install Python:1.Download and install Python2.7.13 here.2.Install pip and add python to the path during installation.3.Type DOS in the Windows search box and select the Command Prompt.4.Add the Python components by typing the following in the DOS prompt:a.pip install PySerial>=2.7b.pip install colorama>=0.3.3c.pip install enum34>=1.1.6In-Application Programming with PythonThe bootloader requires a specific firmware image, which is provided and signed by the algorithm vendor. The signed firmware images have an msbl file extension. The msbl file is found along with other supporting software, including the download_fw_over_host.py python script, on the MAX32663 product page on the Design Resources tab.Use the following steps to flash the application to the MAX32663:Enter the following commands in the command prompt or in the PowerShell window, replacing COMxx with the COM port of the connected MAX32630FTHR. Replace FIRMWARE with the name of the encrypted firmware file provided by the algorithm vendor.python ./download_fw_over_host.py -f "FIRMWARE.msbl" -p "COMxx" -d 2The COM port of the MAX32630FTHR is found by examining the Ports (COM & LPT) while hot plugging the MAX32630FTHR's USB connection to the host Windows PC. For example, the USB Serial Device (COM4)in the following image disappears when the MAX32630FTHR is disconnected from the PC and reappears when it is reconnected. The COM port number, four in this case, is likely to be different on each machine.Trademarks ListMicrosoft is a registered trademark and registered service mark of Microsoft Corporation. Windows is a registered trademark and registered service mark of Microsoft Corporation.©2020 by Maxim Integrated Products, Inc. All rights reserved. Information in this publication concerning the devices, applications, or technology described is intended to suggest possible uses and may be superseded. MAXIM INTEGRATED PRODUCTS, INC. DOES NOT ASSUME LIABILITY FOR OR PROVIDE A REPRESENTATION OF ACCURACY OF THE INFORMATION, DEVICES, OR TECHNOLOGY DESCRIBED IN THIS DOCUMENT. MAXIM ALSO DOES NOT ASSUME LIABILITY FOR INTELLECTUAL PROPERTY INFRINGEMENT RELATED IN ANY MANNER TO USE OF INFORMATION, DEVICES, OR TECHNOLOGY DESCRIBED HEREIN OR OTHERWISE. The information contained within this document has been verified according to the general principles of electrical and mechanical engineering or registered trademarks of Maxim Integrated Products, Inc. All other product or service names are the property of their respective owners.。

ADVISOR2002 help 第三章中文使用说明

ADVISOR2002 help 第三章中文使用说明

3.1 ADVISOR的文件结构3.1.1ADVISOR文件系统的数据流如上图所示。

图中有四种主要的代表类型:z输入脚本文件定义工作空间的变量或者调用其它输入脚本文件,如MC_PM32.M;z模块图表有一些Simulink文件组成。

这些文件含有许多根据输入(如发动机特性图)计算输出(如燃油经济性)的方程;它们都是一些模型,如BD_PAR.M.;z输出脚本文件通过搜索工作空间对模型输出作一些后续处理,包括一些画图程序和一些错误检查程序,如chkoutputs.m。

z控制脚本文件既生成输入,也对输出作一些处理。

例如ADVISOR图形用户界面(GUI)和优化程序。

3.1.2 文件位置ADVISOR根目录下(如 c:\ADVISOR 或 c:\Program Files\ADVISOR)有一些子目录;这些子目录下是含有相应文件的数据、图形用户界面和模型子目录。

3.1.3 文件命名规则模型和数据文件的命名都采用一个前缀加一下划线(’_’)且使用的前缀几乎和定义的变量使用的前缀是一样的。

而在模块图里这一前缀放在尖括号(<>)内。

以下是ADVISOR部件文件类型:变量名称前缀代表的文件类型ACC_*.M附件负载文件CYC_*.M驱动循环文件。

定义变量时以cyc_开头;在模块图里则以<cyc>作为标示;ESS_*.M能量存储系统数据文件。

同样在定义变量时以ess_开头;在模块图里则以<ess>作为标示;EX_*.M排放后处理文件(如催化剂等);FC_*.M燃料转换器数据文件;TX_*.M传动系数据文件,包括变速箱(gb)和主减速器(fd);GC_*.M发电机/控制器数据文件;MC_*.M电机/控制器数据文件;PTC_*.M 传动系控制数据文件。

在定义发动机控制、离合器控制和混合控制策略变量时以vc_和cs_开头;而在模块图中则分别以<vc>和<cs>标示;TC_*.M 扭矩合成装置数据文件;VEH_*.M 整车数据文件;WH_*.M车轮/车轴数据文件;除了上述部件数据文件外,还有另一种类型文件也用前缀定义:BD_*.M-----代表Simulink模块图(模型);所有带前缀文件名用大写字母,而变量名则全部采用小写字母,以免相互混淆。

引导程序

引导程序
SetStack
BL InitStack
BL InitGPIO B main
• • • • • •
ALIGN InitMem LDR R11, =MDCNFG LDR R1, =init_MDCNFG STR R1, [R11]
• •
• • • • • • • • • • • • •
NOP NOP
Undefined_Handler B Undefined_Handler SWI_Handler B SWI_Handler Prefetch_Handler B Prefetch_Handler
DataAbort_Handler B DataAbort_Handler
IRQ_Handler B IRQ_Handler FIQ_Handler B FIQ_Handler
Boot.s
AREA boot ,CODE ,READONLY ENTRY B Reset_Handler B Undefined_Handler B SWI_Handler B Prefetch_Handler B DataAbort_Handler NOP B IRQ_Handler B FIQ_Handler
LDR R11, =MDREFR LDR R1, =init_MDREFR STR R1,[R11] NOP NOP
LDR R11, =MDMRS LDR R1, =init_MDMRS STR R1, [R11]
NOP NOP MOV PC,LR
ALIGN InitStack ;Set IRQ mode(IRQ) MSR CPSR_c, #0xd2; _c控制位域PAR[7:0] LDR SP, =StackIrq ;Set FIQ mode(FIQ) MSR CPSR_c, #0xd1 LDR SP, =StackFiq ;Set Abort mode(ABT) MSR CPSR_c, #0xd7 LDR SP, =StackAbt ;Set Undefine mode(UND) MSR CPSR_c, #0xdb LDR SP, =StackUnd ;Set User/System mode(USR) MSR CPSR_c, #0xdf LDR SP, =StackUsr ;Set Supervisor mode(SVC) MSR CPSR_c, #0xd3 LDR SP, =StackSvc MOV PC,LR END

引导程序

引导程序

引导程序1:概述计算机在开始启动的时候,首先运行BIOS程序,BIOS程序检测当前硬件。

完成后,根据CMOS中的关于驱动器启动顺序的设置,找到一个可用的驱动器来启动。

这里的驱动器包括软盘、光盘、硬盘等设备,但是为了简化问题,下面只讨论软盘驱动器或者硬盘驱动器的启动。

在软盘(硬盘)启动的过程中,最先是BOIS将软盘的首扇区(也就是0柱面,0头、1扇区)的512个字节的内容读到内存的7C00H的地方,然后CPU跳到7C00H(CS:IP=0000:7C00H?)处运行。

由于只有512个字节的大小,不可能放下一个操作系统的代码。

因此,这512个字节的代码一般是一个过渡性的代码,它主要由读软盘扇区指令构成,用来实现这样的一个功能:将操作系统的代码都读到内存中去,读完后再通过JMP指令跳到操作系统代码的入口地址,进一步运行程序。

习惯上,我们把保存在首扇区中的程序称为引导程序。

虽说引导程序一般是用来实现操作系统的引导的,的是但这并不是必要的;它可以是任何形式的代码,只要符合的一个条件:代码对应的机器代码不超过512个字节。

下面的引导程序演示代码就没有任何的读软盘指令,它只是不断的循环一个过程:接受并显示字符。

在最后,交代一下程序的运行软件环境:程序在XP编写、编译,在虚拟机下测试。

2:引导程序演示代码2.1演示代码BOOT.ASM.MODEL SMALL ;这个可以不用管CODE SEGMENTASSUME CS:CODE,DS:CODE ; 数据段和代码段混合在一起了ORG 7C00HSTART: JMP START1INFO DB 'A:\',0 ;提示信息STR1 DB 80 DUP (0) ;接受键盘输入缓冲区START1:MOV AX,CODEMOV DS,AX;设置光标的位置,在屏幕的最后一行,屏幕行号范围0—24,列号范围0-79MOV DH,24 ;行号MOV DL,0 ;列号MOV AH,2 ;子功能号INT 10HL1: MOV SI,OFFSET INFOCALL DISP_STR ;显示提示信息CALL GET_STR ;输入字符串,以回车结束输入CALL CRLF ;换行MOV SI,OFFSET STR1CALL DISP_STR ;输出刚才从键盘中接受到的字符串CALL CRLFMOV SI,OFFSET STR1CMP BYTE PTR [SI],0 ;如果直接回车,那么就退出程序JZ EXITJMP L1EXIT:MOV AH,4CHINT 21HDISP_STR PROC ;显示字符串CLD ;设置DF=0,给后面的串指令用.WHILE BYTE PTR [SI] != 0 ;.while是汇编伪指令,功能和高级语言的while一样LODSBMOV AH,0EH ;输出字符INT 10H.ENDWRETDISP_STR ENDPCRLF PROC ;实现回车功能;屏幕上卷一行MOV CH,0MOV CL,0MOV DH,24MOV DL,79MOV AL,1MOV AH,06HMOV BH,7INT 10H;获得光标位置MOV BH,0MOV AH,3INT 10H;设置光标位置MOV BH,0MOV DL,0MOV AH,02HINT 10HRETCRLF ENDPGET_STR PROC ;从键盘输入字符串MOV SI,OFFSET STR1GETS: MOV AH,0INT 16H.IF AL != 0DH ;如果输入的字符不是回车,就显示字符,并继续输入MOV [SI],ALINC SIMOV AH,0EHINT 10HJMP GETS.ENDIFMOV [SI],0RETGET_STR ENDPCODE ENDSEND START2.2说明1)我们首先将上面的BOOT.ASM文件编译、连接为BOOT.EXE文件。

启动软盘引导程序源代码

启动软盘引导程序源代码
; in the correct place.
main :
cli ; Stop interrupts till stack ok
xor AX , AX
mov ds , ax
mov es , ax
mov SS , AX ; Work in stack just below this routine
启动软盘引导程序源代码
启动软盘引导程序源代码
作者:易华卫 来源:易老师的个人网站 加入时间:2005-09-06 01:09:19 下面是软盘引导程序源代码,用NASM编译。目前性能基本上稳定了,代码长度已经到了512BYTE,一扇区用完了。 ; ==========================================================================
; E9H xxH 00H jmp Key_F7
;
; Case Default: Show message and wait 8 second
mov ah , 11 h ; Get keyboard status
; 这是一个用来引导我的系统备份/恢复光盘的启动软盘的程序,将会放在软盘的第一
; 个扇区内。此程序引导系统时,出现一个提示,用户可选择按任意键启动工具软盘,
; 也可以在等待8秒后引导硬盘上的操作系统。在选择由工具软盘启动DOS后,在MBR中
; 隐藏的FAT32主分区(0B/0C)将会分配盘符变得可见,这就可以用常规工具来做备
BIO_MEM EQU 0413 H ; BIOS Memory size =640(KB)
BIO_CLK EQU 046 CH ; BIOS Clock (1/18.2 seconds)

bootloader的编写

bootloader的编写

bootloader的编写
编写一个bootloader是一个复杂的任务,需要了解计算机架构
和操作系统的启动过程。

以下是编写一个简单的x86 bootloader的基本步骤:
1. 确定引导扇区的位置:在硬盘的第一个扇区(通常是0号扇区)创建一个引导扇区。

这个扇区需要包含一个主引导记录(Master Boot Record,MBR),以便计算机可以正确地引导。

2. 编写MBR代码:MBR是引导扇区中的第一扇区,它包含
了启动计算机所需的你的代码。

MBR的大小为512字节,所
以你的代码必须小于或等于512字节。

3. 使用汇编语言:编写x86汇编语言代码来实现MBR的功能。

你需要了解x86指令集和寄存器的使用。

确保你的代码具有正确的引导标志,并设置正确的启动设备。

4. 编写启动代码:启动代码是你的汇编代码的一部分,它是在MBR中执行的。

启动代码负责加载进一步的代码和操作系统。

这段代码通常位于MBR的末尾,并将控制转移到加载的代码。

5. 加载操作系统:启动代码负责从硬盘上加载操作系统的剩余部分,然后将控制权交给操作系统。

需要注意的是,编写一个完整的、功能完备的bootloader涉及
到更多的细节和复杂性,包括读取硬盘、文件系统的支持、加
载器链等。

上述步骤仅为编写一个最基本的x86 bootloader提供了一个概览。

第3章通用BIOS设置

第3章通用BIOS设置

用户说明书AMD Socket AM2(940-pin)处理器nVidia MCP78主板商标所有的产品注册商标及公司名称皆属其公司所有产品内容若有更改,恕不另行通知V1.0 中文版 2008年9月MUNF7808912B01常用除错卡代码表以下列出一些常见的自检代码,对一些可能出现的问题以及解决方式的列表,如果想了解更多的关于自检代码的信息,请参考本说明书后面的附录。

目录第1章配件 (1)1-1 包装内容 (1)1-2 主板介绍 (2)1-3 主板规格 (3)1-4 系统模块图 (6)第2章安装 (7)2-1 CPU安装 (7)2-2 跳线设置 (8)2-3 系统内存 (9)2-4 背部I/O接口 (10)2-5 主板内部接口介绍 (10)第3章常用BIOS设置 (14)3-1 主菜单 (14)3-2 标准CMOS设置 (14)3-3 BIOS高级属性设置 (15)3-4 芯片组高级属性设置 (17)3-5 集成的周边设备设置 (18)3-6 电源管理设置 (23)3-7 PNP/PCI配置设定 (24)3-8 系统状态侦测设置 (25)3-9 Q-Tune Bios超频功能设置 (27)3-10 默认菜单 (29)3-11 超级用户/用户密码设定 (30)3-12 退出BIOS (30)第4章驱动以及应用程序 (31)第5章常见问题解答 (32)第6章 BIOS刷新 (33)附录:磐正超磐手主板保修条例 (35)1-1包装内容内容 可选设备 A.主板 G.软驱数据线B.用户说明书 H.额外的USB2.0扩展端口连接C.CD I. 探温头D.I/O 挡板E.SATA II 数据线F.硬盘数据线A注:若您的包装内物品有任何的损坏或短缺情形,请与经销商联络。

E DH I CD1-2主板介绍●Socket AM2/AM2+Socket AM2/AM2+(940针)是AMD 高性能的Athlon AM2/AM2+处理器的接口,让用户体验到高效性能的执行能力。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第3章的附录系统引导程序的代码
下面是一个基于S3C2410芯片的嵌入式系统引导(启动)程序Startup.s文件中的汇编源程序。

通过对这段程序的分析,巩固所学的汇编指令知识,并学习嵌入式系统引导程序的编写方法。

程序中各条指令及指示符的具体含义请参照3.1节和3.3.1小节中的说明。

;Startup Code for S3C2410 : Startup.s
;下面指令包含2410addr.s文件,该文件中定义了S3C2410内部寄存器地址对应的变量。

GET 2410addr.s
; 某些ARM920T CPSR寄存器位的定义,定义了部分常量。

USERMODE EQU 0x10
FIQMODE EQU 0x11
IRQMODE EQU 0x12
SVCMODE EQU 0x13
ABORTMODE EQU 0x17
UNDEFMODE EQU 0x1b
MODEMASK E QU 0x1f
NOINT EQU 0xc0
I_Bit * 0x80
F_Bit * 0x40
; MMU寄存器定义。

CtrlMMU * 1
CtrlAlign * 2
CtrlCache * 4
CtrlWBuff * 8
CtrlBigEnd * 128
CtrlSystem * 256
CtrlROM * 512
TLB_L0_INIT * 0x0C02
;AREA指示汇编器汇编一段新的代码,为保证下面的代码为起始代码,应在ARM连接器的layout选项中指明Startup.o(Init) (如图1-33所示),或用scatter格式的描述性文件说明。

AREA Init,CODE,READONLY
;IMPORT提供汇编器在当前汇编中未曾定义的符号名。

IMPORT __use_no_semihosting_swi
IMPORT Enter_UNDEF
IMPORT Enter_SWI
IMPORT Enter_PABORT
IMPORT Enter_DABORT
IMPORT Enter_FIQ
;下面ENTRY指明了程序的入口,在应用程序中有且只有一个程序入口。

ENTRY
;下面是异常向量表,第一条语句是复位异常对应的跳转指令。

b ColdReset ;复位
b Enter_UNDEF ;未定义指令错误
b Enter_SWI ;软件中断
b Enter_PABORT ;预取指令错误
b Enter_DABORT ;数据存取错误
b . ;一个保留的中断向量
b IRQ_Handler ;IRQHandler
b Enter_FIQ ;FIQHandler
;deal with IRQ interrupt
EXPORT IRQ_Handler
IRQ_Handler
IMPORT ISR_IrqHandler
STMFD sp!, {r0-r12, lr}
BL ISR_IrqHandler
LDMFD sp!, {r0-r12, lr}
SUBS pc, lr, #4
;系统上电或复位后跳转到此处开始进行运行。

EXPORT ColdReset
ColdReset
;关看门狗定时器
ldr r0,=WTCON
ldr r1,=0x0
str r1,[r0]
;关所有中断
ldr r0,=INTMSK
ldr r1,=0xffffffff
str r1,[r0]
ldr r0,=INTSUBMSK
ldr r1,=0x7ff ;all sub interrupt disable
str r1,[r0]
;初始化堆栈
bl InitStacks ;Stack Setup for each MODE
;复制excption table到SRAM0x0地址处
IMPORT |Load$$EXCEPTION_EXEC$$Base|
IMPORT |Image$$EXCEPTION_EXEC$$Base|
IMPORT |Image$$EXCEPTION_EXEC$$Length|
ldr r0, =|Load$$EXCEPTION_EXEC$$Base| ;源数据
ldr r1, =|Image$$EXCEPTION_EXEC$$Base| ;目的地址处
ldr r2, =|Image$$EXCEPTION_EXEC$$Length|
exception_cploop
sub r2, r2, #4
ldmia r0!, {r3}
stmia r1!, {r3}
cmp r2, #0
bge exception_cploop
;下面调转到C语言的主函数处
IMPORT __main
BL __main ;通常不能用main()作为主函数名
B .
;下面是初始化堆栈的子函数
IMPORT UserStack
IMPORT SVCStack
IMPORT UndefStack
IMPORT IRQStack
IMPORT AbortStack
IMPORT FIQStack
InitStacks
mrs r0,cpsr
bic r0,r0,#MODEMASK
orr r1,r0,#UNDEFMODE|NOINT
msr cpsr_cxsf,r1 ;UndefMode
ldr sp,=UndefStack
orr r1,r0,#ABORTMODE|NOINT
msr cpsr_cxsf,r1 ;AbortMode
ldr sp,=AbortStack
orr r1,r0,#IRQMODE|NOINT
msr cpsr_cxsf,r1 ;IRQMode
ldr sp,=IRQStack
orr r1,r0,#FIQMODE|NOINT
msr cpsr_cxsf,r1 ;FIQMode
ldr sp,=FIQStack
orr r1,r0,#SVCMODE|NOINT
msr cpsr_cxsf,r1 ;SVCMode
ldr sp,=SVCStack
mov pc,lr ;The LR register may be not valid for the mode changes.
END ;Stratup.s程序结束
上述程序代码中,ENTRY指明了程序的入口。

因为,ARM920T要求中断向量表必须设置在从0x0地址开始,连续8×4字节的空间中,因此,在ENTRY的后面紧接着8条跳转指令,分别对应复位、未定义指令错误、软件中断、预取指令错误、数据存取错误、一个保留的中断向量、IRQ和FIQ等异常的处理。

系统上电或复位后,首先执行的是“b ColdReset”指令,系统跳转到标号为ColdReset 处接着执行,在完成了关看门狗定时器、关中断、初始化各模式的堆栈、初始化存储器等功能后,执行指令“BL __main”跳转到C语言的主函数处执行。

本例中,初始化堆栈的功能编写成了子函数,在该子函数中,没有对用户模式下的堆栈进行初始化。

相关文档
最新文档