武汉创维特ARM教学系统08嵌入式软件系统设计课件.ppt

上传人(卖家):晟晟文业 文档编号:4068745 上传时间:2022-11-08 格式:PPT 页数:98 大小:3.31MB
下载 相关 举报
武汉创维特ARM教学系统08嵌入式软件系统设计课件.ppt_第1页
第1页 / 共98页
武汉创维特ARM教学系统08嵌入式软件系统设计课件.ppt_第2页
第2页 / 共98页
武汉创维特ARM教学系统08嵌入式软件系统设计课件.ppt_第3页
第3页 / 共98页
武汉创维特ARM教学系统08嵌入式软件系统设计课件.ppt_第4页
第4页 / 共98页
武汉创维特ARM教学系统08嵌入式软件系统设计课件.ppt_第5页
第5页 / 共98页
点击查看更多>>
资源描述

1、嵌入式系统教案嵌入式系统教案武汉创维特信息技术有限公司武汉创维特信息技术有限公司 11/8/2022提纲嵌入式软件开发过程ARM软件设计与代码分析ARM软件开发工具ADT IDE简介第六章 嵌入式软件系统设计2嵌入式系统软件开发流程q软件需求分析:确定设计任务和目标,软件需求分析:确定设计任务和目标,并提炼出设计规格说明书,作为正式设计指并提炼出设计规格说明书,作为正式设计指导和验收的标准。导和验收的标准。嵌入式软件开发过程q概要设计:描述系统如何实现所述的需概要设计:描述系统如何实现所述的需求,包括软件模块的划分、系统的软件开发求,包括软件模块的划分、系统的软件开发工具选择以及关键问题的论证

2、等。工具选择以及关键问题的论证等。概要设计模块划分软件需求分析:编码单元调试集成调试详细设计BSP、应用程序测试产品q详细设计:详细描述各个模块的实现方详细设计:详细描述各个模块的实现方法与过程,模块间接口等问题,以作为编码法与过程,模块间接口等问题,以作为编码人员的编码准则。人员的编码准则。q编码编码3嵌入式系统的开发流程q单元调试:编码完成后,对各个模块进行单元调试,单元调试:编码完成后,对各个模块进行单元调试,以保证模块正常工作。以保证模块正常工作。嵌入式软件开发过程q集成调试集成调试4ARM主流开发工具qWindows操作系统ARM ADS/SDT+调试器GNU+Cygwin+调试器A

3、RM SDT+简易电缆qLinux操作系统GNU+GDBARM软件开发工具ADT IDE简介5常用调试方法q 软件仿真q 驻留监控程序 硬件要求高,一般在硬件稳定之后进行 需要占用目标板上的一部分资源 不能对程序的全速运行进行完全仿真q JTAG仿真器 完全非插入式调试,不使用片上资源,无需目标存储器,不占用目标系统的任何端口 仿真效果更加接近于目标硬件q 在线仿真器ARM软件开发工具ADT IDE简介6ADT for ARM集成开发系统ARM软件开发工具ADT IDE简介7ADT 1000 Emulator for ARMARM软件开发工具ADT IDE简介 8ADT 1000 Emulat

4、or for ARMARM软件开发工具ADT IDE简介 qADT Emulator for ARMADT Emulator for ARM是连接主机核目标机之间的是连接主机核目标机之间的硬件设备,它实现硬件设备,它实现ADT IDE for ARMADT IDE for ARM与目标机之间的连接。与目标机之间的连接。q它具有如下特征:它具有如下特征:支持支持ARMARM核核CPUCPU非插入式调试,无需目标存储器,不占用目标系统的任何非插入式调试,无需目标存储器,不占用目标系统的任何端口端口2.52.5V/3.3V/5VV/3.3V/5V兼容电平接口兼容电平接口支持标准的支持标准的14/20

5、14/20针针JTAGJTAG接口接口运行状态指示运行状态指示与主机之间通过并口连接与主机之间通过并口连接下载速度达到下载速度达到2525Kbytes/SKbytes/S9ADT IDE for ARMARM软件开发工具ADT IDE简介 10ADT IDE for ARM主要特征 可视化编程环境ARM软件开发工具ADT IDE简介 q支持支持ARM7ARM7、ARM9ARM9、SecurCoreSecurCore等。等。q运行于运行于Windows98 Windows98、NTNT、20002000、XPXP等平台。等平台。q中文、英文版本支持中文、英文版本支持q可视化的源码编辑和工程管理功

6、能可视化的源码编辑和工程管理功能q界面友好,使用方便:类似界面友好,使用方便:类似MS Visual StudioMS Visual Studio的用的用户界面,支持打印功能,支持文件内查找功能和户界面,支持打印功能,支持文件内查找功能和Find in Find in FilesFiles功能功能11ADT IDE for ARM主要特征 可视化编程环境ARM软件开发工具ADT IDE简介 q工程管理器:工程管理器:ADT IDEADT IDE提供图形化的工程管理工具,提供图形化的工程管理工具,实现文件级、文件目录级、工程级的多级编译连接选项实现文件级、文件目录级、工程级的多级编译连接选项管理

7、以及工程级的调试参数管理管理以及工程级的调试参数管理q源码编辑器:支持标准的文本编辑功能,支持源码编辑器:支持标准的文本编辑功能,支持C C语言、语言、汇编语言语法高亮显示汇编语言语法高亮显示q辅助编辑工具:提供一系列辅助编辑工具,方便开辅助编辑工具:提供一系列辅助编辑工具,方便开发人员。包括:多剪贴板工具、代码模板工具、头文件发人员。包括:多剪贴板工具、代码模板工具、头文件和源文件切换工具、注释工具、符号配对书写工具等多和源文件切换工具、注释工具、符号配对书写工具等多种辅助编辑工具。种辅助编辑工具。12ADT IDE for ARM主要特征 交叉编译功能ARM软件开发工具ADT IDE简介

8、q支持开发语言:支持开发语言:ANSI CANSI C;Embedded C+Embedded C+;汇编语言汇编语言q编译工具:使用著名优秀自由软件编译工具:使用著名优秀自由软件GNUGNU的的GCCGCC交叉编交叉编译工具,并经过优化和严格测试,支持译工具,并经过优化和严格测试,支持C C语言、汇编语言语言、汇编语言等等q编译参数设置:完全图形界面方式的编译参数设置,编译参数设置:完全图形界面方式的编译参数设置,提供可视化的设置功能。支持工程级、文件目录级、文提供可视化的设置功能。支持工程级、文件目录级、文件级编译参数设置件级编译参数设置13ADT IDE for ARM主要特征 调试功能

9、ARM软件开发工具ADT IDE简介 q同时提供了图形和命令行两种调试方式同时提供了图形和命令行两种调试方式q程序的单步执行程序的单步执行q程序下载程序下载q存储区下载和上载功能。存储区下载和上载功能。q工程级调试参数管理工程级调试参数管理q支持源程序、反汇编程序和混合窗口显示,支持支持源程序、反汇编程序和混合窗口显示,支持ARM/THUMBARM/THUMB方式显示方式显示q具有与具有与MS Visual StudioMS Visual Studio类似的调试菜单功能:类似的调试菜单功能:GoGo,StopStop,ResetReset,RestartRestart,Step intoSte

10、p into,Step overStep over,Step Step outout,Run to CursorRun to Cursor等等q丰富的示例程序丰富的示例程序14ADT IDE for ARM主要特征 调试功能ARM软件开发工具ADT IDE简介 q断点功能:支持软件断点和硬件断点,实现断点设断点功能:支持软件断点和硬件断点,实现断点设置、断点屏蔽、断点取消、断点列表等功能置、断点屏蔽、断点取消、断点列表等功能q变量监视功能:随程序运行同步更新变量,即时修变量监视功能:随程序运行同步更新变量,即时修改变量值,可设置自动改变量值,可设置自动/手动刷新方式、十进制手动刷新方式、十进制

11、/十六进十六进制显示制显示qARMARM各种模式的寄存器即时查看与修改,当前模式指各种模式的寄存器即时查看与修改,当前模式指示,寄存器值修改时红色突显示,寄存器值修改时红色突显q存储器查看与修改,可设置自动存储器查看与修改,可设置自动/手动刷新方式、字手动刷新方式、字节节/双字节双字节/四字节显示、大四字节显示、大/小端方式显示,存储器值修小端方式显示,存储器值修改时红色突显改时红色突显15ADT IDE for ARM主要特征 调试功能ARM软件开发工具ADT IDE简介 q函数堆栈显示,可设置自动函数堆栈显示,可设置自动/手动刷新方式、十进制手动刷新方式、十进制/十六进制显示、参数值显示,

12、参数类型显示十六进制显示、参数值显示,参数类型显示q板上寄存器板上寄存器(On Board Register)On Board Register)的查看和修改,可的查看和修改,可以查看支持以查看支持CPUCPU的所有板上寄存器的具体意义、当前值、的所有板上寄存器的具体意义、当前值、各个位的意义,可设置自动各个位的意义,可设置自动/手动刷新方式、二进制手动刷新方式、二进制/十十进制进制/十六进制显示、大十六进制显示、大/小端方式显示,支持十进制小端方式显示,支持十进制/十十六进制方式修改寄存器值,寄存器值修改时红色突显。六进制方式修改寄存器值,寄存器值修改时红色突显。qflashflash在线编

13、程器,支持对多种在线编程器,支持对多种flashflash芯片的空白检芯片的空白检查、擦除、编程、校验等操作,支持单一操作和自动操查、擦除、编程、校验等操作,支持单一操作和自动操作两种操作方式,支持作两种操作方式,支持8/16/328/16/32位位flashflash访问宽度,支持访问宽度,支持多片多片flashflash同时编程,编程速度达同时编程,编程速度达1515Kbytes/sKbytes/s。提供统一提供统一的的flashflash编程接口,可以方便地添加编程接口,可以方便地添加flashflash编程方案。编程方案。16ADT IDE for ARMARM软件开发工具ADT ID

14、E简介 ADT IDE(Arm7Lpt、Arm9Lpt、SoftSim、Arm7Simple)用户手册、编程指南丰富例程17多版本支持ARM软件开发工具ADT IDE简介 软件仿真版本软件仿真版本ARM7ARM7版本版本ARM9ARM9版本版本简易仿真版本简易仿真版本18多工程管理ARM软件开发工具ADT IDE简介 工程工程当前活动工程当前活动工程19可视化编辑器ARM软件开发工具ADT IDE简介 编辑菜单编辑菜单语法高亮编辑器语法高亮编辑器辅助编辑工具条辅助编辑工具条书签20GCC交叉编译ARM软件开发工具ADT IDE简介编译菜单编译工具条编译结果输出错误定位21编译器设置ARM软件开

15、发工具ADT IDE简介多配置管理多工程设管理多参数配置22汇编器设置ARM软件开发工具ADT IDE简介多配置管理多工程设管理多参数配置23连接器设置ARM软件开发工具ADT IDE简介多配置管理多工程设管理多参数配置24调试功能ARM软件开发工具ADT IDE简介 调试菜单调试工具条命令行调试窗口25多种调试模式ARM软件开发工具ADT IDE简介 源码模式混合模式汇编模式26断点ARM软件开发工具ADT IDE简介 断点列表断点27存储器窗口ARM软件开发工具ADT IDE简介字模式半字模式字节模式修改凸显标记28存储区上载下载功能ARM软件开发工具ADT IDE简介 存储区上载存储区下

16、载29寄存器观察窗口ARM软件开发工具ADT IDE简介 多模式寄存器显示修改凸显标记30函数调用栈窗口ARM软件开发工具ADT IDE简介 函数调用栈31变量观察窗口ARM软件开发工具ADT IDE简介 局部变量全局变量多个观察窗口32命令窗口ARM软件开发工具ADT IDE简介 33单步调试 STEP INTOARM软件开发工具ADT IDE简介34单步调试 STEP OVERARM软件开发工具ADT IDE简介 35单步调试 STEP OUTARM软件开发工具ADT IDE简介 36单步调试 RUN TO CURSORARM软件开发工具ADT IDE简介 37板上寄存器ARM软件开发工具

17、ADT IDE简介寄存器组寄存器寄存器位域热点描述信息修改凸显标记38板上寄存器ARM软件开发工具ADT IDE简介39FLASH在线编程器ARM软件开发工具ADT IDE简介 40工具菜单ARM软件开发工具ADT IDE简介 可自定制41在线帮助ARM软件开发工具ADT IDE简介 42嵌入式软件开发q 无操作系统的软件开发 启动代码 应用程序q 基于操作系统的软件开发 bootloader 操作系统移植 BSP板级支持包 应用程序开发ARM软件设计与代码分析43启动代码q 功能 硬件初始化 引导C代码q 特征 通常用汇编语言编写 程序复位运行入口点 代码量非常小q 程序流程 设置中断、异常

18、入口 关中断 硬件寄存器初始化(GPIO配置、总线配置、PLL时钟)初始化栈指针 数据区初始化 C入口函数调用 BL MainARM软件设计与代码分析44应用程序(无操作系统)q 功能 硬件驱动 应用q 特征 通常用C语言或者嵌入式汇编语言编写 程序较复杂,代码量较大ARM软件设计与代码分析45bootloaderq 功能 硬件初始化 引导操作系统 下载程序(串口、网口、USB)烧写flashq 特征 程序复位运行入口点 通常用汇编语言+C语言编写 代码量较小ARM软件设计与代码分析46嵌入式操作系统移植q Linuxq Windows CE q uC/OS IIq uClinuxq Nucl

19、eusARM软件设计与代码分析47BSP板级支持包q 功能 为应用程序提供统一的硬件操作接口q 特征 高度硬件相关 高度依赖于具体硬件平台 各种操作系统各异ARM软件设计与代码分析48应用程序开发(操作系统)q 功能 GUI图形、人机交互 控制 算法q 特征 硬件依赖程度小 部分可仿真调试 各种操作系统各异ARM软件设计与代码分析49嵌入式软件设计和调试流程q 编辑 创建工程 添加文件、编写程序 汇编语言加C语言q 编译 配置编译、汇编和连接参数 编写连接脚本文件 编译q 调试 连接调试器 下载程序 运行、调试q 固化 通过仿真器烧写flash 专用或通用的编程器 通过bootloader烧写

20、flashARM软件设计与代码分析50交叉编译q GNU交叉编译 编译.c arm-elf-gcc 汇编.S arm-elf-gas 连接.o arm-elf-ldq 操作文件 汇编文件.S C文件.c 链接脚本文件ldscript 库文件.o.lib.aq 生成调试格式文件.elf DWARF-1 DWARF-2q 生成bin文件 elf2bin arm-elf-objcopyARM软件设计与代码分析51链接脚本q 段 Text段 rodata段 data段 bss段q 符号 Image_RO_Limit Image_RW_Base Image_ZI_Base Image_ZI_Limitq

21、 GCC库专用q 调试信息ARM软件设计与代码分析52链接脚本示例q 程序在SDRAM中运行q 程序在FLASH中运行ARM软件设计与代码分析53GCC库q GCC库 标准C函数库lib.a -lc 标准数学函数库libm.a -lm 标准函数库的支持库libg.a -lg GCC的支持库libgcc.a -lgccq 链接排列顺序-lm lc lgcc-lgARM软件设计与代码分析54JX44B0启动代码分析ARM软件设计与代码分析q在基于ARM7TDMI core的嵌入式系统中,系统在上电或复位时都从地址0 x00000000开始执行,因此在这个地址处安排的通常就是系统的启动代码。q它通常

22、也是BootLoader程序的一部分,可以在启动代码基础上编写BootLoader。q用汇编语言编写。q启动代码是在复位后运行其它程序之前运行的一段小程序。通过它,初始化硬件设备、建立内存空间的映射图(JX44B0不需要),从而将系统的软硬件环境带到一个合适的状态,以便为最终调用C函数准备好正确的环境。55启动代码的移植和修改ARM软件设计与代码分析q启动代码除了依赖于 CPU 的体系结构外,实际上也依赖于具体的嵌入式板级设备的配置,比如板卡的硬件地址分配,RAM芯片的类型,其他外设的类型等。q对于两块不同的嵌入式板而言,即使它们是基于同一种 CPU而构建的,如果他们的硬件资源和配置不一致的话

23、,要想让运行在一块板子上的启动代码也能运行在另一块板子上,也还是需要作一些必要的修改。56启动代码流程图q 启动代码的功能:RAM初始化,设置各个部件的时钟和片选,将BootLoader拷贝到RAM中,设置堆栈,调用C函数。q 注意:在本阶段,特别是在堆栈设置之前,进行函数调用(也有些汇编子程序不需要使用堆栈)或者使用堆栈保存数据将产生不可预知的结果;Boot Loader 入口设置中断向量表切换到超级模式,并禁止中断ResetHandler:复位入口设置中断模式,关闭所有中断初始化硬件关闭看门狗使能回写Buffer和Cache设置非Cache区域设置端口关闭数据线015上拉设置外部中断的触发

24、方式设置时钟设置CPU的运行频率,系统各部件的总线矿宽度以及各部件的时钟将Boot Loader拷贝到RAM拷贝代码到RAM跳至C代码程序ARM软件设计与代码分析57设置中断向量表q该段向量表除了复位异常外,只有位于0地址处有效,也就是必须将该段代码烧写到FLASH中。q复位异常直接跳转到ResetHandler处,它是相对跳转,位置无关。q其余的异常将跳转到0c000008+向量地址的位置,使用绝对跳转。ARM软件设计与代码分析58复位入口:切换到超级模式q系统复位成功后,将自动进入SVC模式q在初始化之前必须关闭中断,以免引起异常 LOCKOUT:0 xc0Bit6,7=1MODE_MAS

25、K:0 x1fSUP_MODE:0 x13ARM软件设计与代码分析59设置中断模式并禁止中断q设置S3C44B0 INTCON寄存器q缺省值为0 x07,可以 不作该工作0 x01e000000 x01e00000ARM软件设计与代码分析60关闭看门狗q设置S3C44B0 WTCON寄存器q必须设置0 x01e000000 x01d30000ARM软件设计与代码分析61系统配置寄存器q使能回写bufferq打开Cache0 x01e000000 x01c00000ARM软件设计与代码分析62设置非Cache区域q使能回写bufferq打开Cache00 x0b0000000c70000000

26、xc7320000ARM软件设计与代码分析63端口设置ARM软件设计与代码分析64设置外部中断的触发方式0 x01e000000 x01d20050ARM软件设计与代码分析65配置总线访问宽度ARM软件设计与代码分析66配置总线访问时序ARM软件设计与代码分析67C代码初始化ARM软件设计与代码分析68堆栈初始化ARM软件设计与代码分析69跳转到C入口函数ARM软件设计与代码分析70JX44B0 BOOTLOADER分析ARM软件设计与代码分析qBootLoader是在启动代码的基础之上,通常启动代码包含于BootLoader之中qBootLoader常用于引导操作系统或者应用程序qBootL

27、oader可以包含一些简单的调试手段71BootLoader的基本概念q BootLoader是系统加电后运行的第一段软件代码。q 嵌入式系统中,整个系统的加载启动任务完全由 BootLoader来完成。比如在一个基于ARM7TDMI core的嵌入式系统中,系统在上电或复位时都从地址0 x00000000开始执行,而在这个地址处安排的通常就是系统的BootLoader程序。q 简单地说,BootLoader就是在操作系统内核或用户应用程序运行之前运行的一段小程序。通过这段小程序,我们可以初始化硬件设备、建立内存空间的映射图(有的CPU没有内存映射功能如S3C44B0),从而将系统的软硬件环境

28、带到一个合适的状态,以便为最终调用操作系统内核或用户应用程序准备好正确的环境。q 通常,BootLoader 是依赖于硬件而实现的,特别是在嵌入式领域,为嵌入式系统建立一个通用的 BootLoader 是很困难的。ARM软件设计与代码分析72BootLoader 的移植和修改q BootLoader除了依赖于 CPU 的体系结构外,BootLoader 实际上也依赖于具体的嵌入式板级设备的配置,比如板卡的硬件地址分配,RAM芯片的类型,其他外设的类型等。q 对于两块不同的嵌入式板而言,即使它们是基于同一种 CPU而构建的,如果他们的硬件资源和配置不一致的话,要想让运行在一块板子上的BootLo

29、ader程序也能运行在另一块板子上,也还是需要作一些必要的修改。ARM软件设计与代码分析73BootLoader 的安装q 系统加电或复位后,所有的CPU通常都从CPU制造商预先安排的地址上取指令。比如,S3C44B0在复位时都从地址 0 x00000000 取它的第一条指令。q 嵌入式系统通常都有某种类型的固态存储设备(比如:ROM、EEPROM或FLASH等)被安排这个起始地址上,因此在系统加电后,CPU将首先执行BootLoader程序。q 也就是说对于基于S3C44B0的这套系统,我们的BootLoader是从0地址开始存放的,而这块起始地址需要采用可引导的固态存储设备如FLASH。A

30、RM软件设计与代码分析74用来控制 BootLoader 的设备或机制q 串口通讯是最简单也是最廉价的一种双机通讯设备,所以往往在BootLoader中主机和目标机之间都通过串口建立连接,BootLoader 程序在执行时通常会通过串口来进行 I/O,比如:输出打印信息到串口,从串口读取用户控制字符等。当然如果认为串口通讯速度不够,也可以采用网络或者USB通讯,那么相应的在BootLoader中就需要编写各自的驱动。ARM软件设计与代码分析75Boot Loader 的操作模式q 启动加载模式:这种模式也称为自主(Autonomous)模式。也即BootLoader从目标机上的某个固态存储设备

31、上将操作系统加载到RAM中运行,整个过程并没有用户的介入。这种模式是BootLoader的正常工作模式。q 下载模式:在这种模式下,目标机上的BootLoader将通过串口连接或网络连接等通信手段从主机下载文件,比如:下载应用程序、数据文件、内核映像等。从主机下载的文件通常首先被BootLoader保存到目标机的RAM中,然后再被 BootLoader写到目标机上的固态存储设备中。BootLoader 的这种模式通常在系统更新时使用。工作于这种模式下的 BootLoader 通常都会向它的终端用户提供一个简单的命令行接口。q 在教学系统中提供的BootLoader中没有实现自主模式,可以通过修

32、改代码来实现该功能。ARM软件设计与代码分析76BootLoader与主机间文件传输的通信设备及协议q 最常见的情况就是,目标机上的 Boot Loader 通过串口与主机之间进行文件传输,传输可以简单的采用直接数据收发,当然在串口上也可以采用xmodemymodemzmodem 协议以及q 在以太网上采用TFTP协议。ARM软件设计与代码分析77BootLoader的主要任务与典型结构框架q 从操作系统的角度看,BootLoader的总目标就是正确地调用内核来执行。q 大多数BootLoader都分为stage1和stage2两大部分。q 依赖于CPU体系结构的代码,比如设备初始化代码等,通

33、常都放在stage1中,而且通常都用汇编语言来实现,以达到短小精悍的目的,也就是前面说的启动代码。q 而stage2 则通常用C语言来实现,这样可以实现复杂的功能,而且代码会具有更好的可读性和可移植性。ARM软件设计与代码分析78BootLoader的主要任务与典型结构框架q BootLoader的stage1通常包括以下步骤 为加载 BootLoader 的 stage2 准备 RAM 空间 拷贝 BootLoader 的 stage2 到 RAM 空间中 设置好堆栈 跳转到 stage2 的 C 入口点q BootLoader的stage2通常包括以下步骤 初始化本阶段要使用到的硬件设备

34、调用应用程序或启动内核ARM软件设计与代码分析79Stage 1初始化流程图q stage 1的功能:RAM初始化,设置各个部件的时钟和片选,将BootLoader拷贝到RAM中,设置堆栈,调用Stage 2。q 注意:在本阶段,特别是在堆栈设置之前,进行函数调用(也有些汇编子程序不需要使用堆栈)或者使用堆栈保存数据将产生不可预知的结果;Boot Loader 入口设置中断向量表切换到超级模式,并禁止中断ResetHandler:复位入口设置中断模式,关闭所有中断初始化硬件关闭看门狗使能回写Buffer和Cache设置非Cache区域设置端口关闭数据线015上拉设置外部中断的触发方式设置时钟设

35、置CPU的运行频率,系统各部件的总线矿宽度以及各部件的时钟将Boot Loader拷贝到RAM拷贝代码到RAM跳至C代码程序ARM软件设计与代码分析80Stage 2流程图q stage 2的功能:初始化串口,显示菜单,通过菜单获取用户输入,并执行相应的操作。Stage 2入口 Main初始化串口通过串口显示Boot Loader菜单从串口获取输入根据输入执行各例程下载更新的Boot Loader下载更新的ucLinux内核下载Demo程序下载声音测试文件下载ramdisk运行ucLinux运行Demo程序采用TFTP下载ucLinux采用TFTP下载ramdiskARM软件设计与代码分析81

36、Bootloader更新程序流程图q 通过BootLoader更新程序的流程。注意为了使用Bootloader更新FLASH中的程序,需要首先将Bootloader搬迁到RAM中运行。下载更新的Boot Loader通过串口设置下载地址和下载的长度(用于缓冲接收的数据),接收下载的数据确认下载的数据调用I28f320_Prog_Main将数据写到FLASH中返回ARM软件设计与代码分析82嵌入式实时操作系统ARM软件设计与代码分析q将在后面介绍83板级支持包ARM软件设计与代码分析qBSP(板级支持包)是介于底层硬件和操作系统之间的软件层次,它完成系统上电后最初的硬件和软件初始化,并对底层硬件

37、进行封装,使得操作系统不再面对具体的操作。84板级支持包的特点ARM软件设计与代码分析q硬件相关性:因为嵌入式实时系统的硬件环境具有应用相关性,所以,作为高层软件与硬件之间的接口,BSP必须为操作系统提供操作和控制具体硬件的方法。q操作系统相关性:不同的操作系统具有各自的软件层次结构,因此,不同的操作系统具有特定的硬件接口形式。85板级支持包的功能ARM软件设计与代码分析86板级支持包的功能ARM软件设计与代码分析q嵌入式系统初始化v片级初始化v板级初始化v系统级初始化q硬件相关的设备驱动程序 和BootLoader存在一定的重叠87系统级初始化ARM软件设计与代码分析q这是一个以软件初始化为

38、主的过程,主要进行操作系统初始化。BSP将控制转交给操作系统,由操作系统进行余下的初始化操作。包括加载和初始化与硬件无关的设备驱动程序,建立系统内存区,加载并初始化其他系统软件模块,比如网络系统、文件系统等;最后,操作系统创建应用程序环境并将控制转交给应用程序的入口。88硬件相关的驱动程序ARM软件设计与代码分析q与初始化过程相反,硬件相关的设备驱动程序的初始化和使用通常是一个从高层到底层的过程。q尽管BSP中包含硬件相关的设备驱动程序,但是这些设备驱动程序通常不直接由BSP使用,而是在系统初始化过程中由BSP把它们与操作系统中通用的设备驱动程序关联起来,并在随后的应用中由通用的设备驱动程序调

39、用,实现对硬件设备的操作。89JX44B0应用代码设计及中断处理ARM软件设计与代码分析q连接脚本连接脚本90JX44B0应用代码中断向量ARM软件设计与代码分析q 起始地址起始地址0 0 x0c000008x0c000008q 除复位异常外,其余异常入口地址由除复位异常外,其余异常入口地址由FLASHFLASH跳跳转得到转得到91JX44B0中断处理流程 执行0 x18处指令:LDR pc,=0 x0c000020,由Bootloader控制 执行0 x0c000020处指令:HandlerIRQ,ramstart.s 执行HandlerIRQ,ramstart.s 执行HandleIRQ处

40、保存的中断分发例程,ramstart.s中初始化为IsrIRQARM软件设计与代码分析92用汇编代码编写的中断分发例程 q 保护现场IsrIRQ:/*using I_ISPR register.*/sub lr,lr,#4stmfd sp!,lr /*保存中断返回的PC值 */stmfd sp!,r0-r4 /*备份寄存器R0-R4 */sub sp,sp,#4 /*为PC预留栈空间 */stmfd sp!,r8-r9 /*备份寄存器R8-R9 */ldr r9,=I_ISPR /*读取中断状态 */ldr r9,r9 q R9中保存中断状态ARM软件设计与代码分析93用汇编代码编写的中断分发

41、例程 q 寻找中断源cmp r9,#0 x0 /*检查中断状态 */beq i2 mov r8,#0 x0 /*R8保存中断表的偏移*/i0:/*逐位检查中断状态 */movs r9,r9,lsr#1 bcs i1/*如果该位等于1,则处理这一中断*/add r8,r8,#4/*修改当前的中断偏移*/b i0 /*处理下一比特 */q 找到中断则跳转到i1,R8保存找到的中断偏移q 未找到中断则跳转到i2ARM软件设计与代码分析94用汇编代码编写的中断分发例程 q 处理中断并返回i1:ldr r9,=HandleADC /*HandleADC位于中断向量表起始位置,我们将该地址用作是中断向量表

42、的基地址 */add r9,r9,r8 /*计算入口地址指针:中断基地址加上偏移*/ldr r9,r9 /*从地址向量表中获取入口地址 */str r9,sp,#8 /*将入口地址保存到堆栈,并移动堆栈指针*/mov lr,pc /*保存当前PC*/ldmfd sp!,r8-r9,pc/*调用中断例程 */ldmfd sp!,r0-r4,pc/*中断返回,并恢复中断前的处理器模式*/i2:ldmfdsp!,r8-r9 /*如果当前没有任何中断,直接返回*/add sp,sp,#4 /*移动堆栈指针,该空间由第4句指令预留*/ldmfd sp!,r0-r4,pc/*中断返回,并恢复中断前的处理器

43、模式*/ARM软件设计与代码分析95用C代码编写的中断分发例程 q 函数声明typedef(*ISR_ROUTINE_ENTRY)(void);void IsrIRQ()_attribute_(interrupt(IRQ);ARM软件设计与代码分析96用C代码编写的中断分发例程 q 函数实现void IsrIRQ()int count=0;unsigned int isr_pending;unsigned int isr_mask=0 x00000001;unsigned int isr_mask_set=rINTMSK;/*读取中断掩码*/ISR_ROUTINE_ENTRY isr_rout

44、ine_entry=(ISR_ROUTINE_ENTRY)0 x0;isr_pending=(rINTPND&isr_mask_set);/*读取中断状态*/*查表*/while(isr_mask)if(isr_pending&isr_mask)/*找到中断源,获取中断例程入口地址*/isr_routine_entry=(ISR_ROUTINE_ENTRY)(*(int*)(HandleADC+count);break;count+=4;isr_mask=1;/*调用中断服务例程*/if(isr_routine_entry)(*isr_routine_entry)();ARM软件设计与代码分析97中断处理例程 q 注册例程*(unsigned int*)(HandleEINT0)=(unsigned int)EINT0_Isr;q 函数实现void EINT0_Isr()rI_ISPC=BIT_EINT0;/*清除中断标志*/ARM软件设计与代码分析98

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 办公、行业 > 各类PPT课件(模板)
版权提示 | 免责声明

1,本文(武汉创维特ARM教学系统08嵌入式软件系统设计课件.ppt)为本站会员(晟晟文业)主动上传,163文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。
2,用户下载本文档,所消耗的文币(积分)将全额增加到上传者的账号。
3, 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(发送邮件至3464097650@qq.com或直接QQ联系客服),我们立即给予删除!


侵权处理QQ:3464097650--上传资料QQ:3464097650

【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。


163文库-Www.163Wenku.Com |网站地图|