分享
分销 收藏 举报 申诉 / 98
播放页_导航下方通栏广告

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

  • 上传人:快乐****生活
  • 文档编号:12780253
  • 上传时间:2025-12-06
  • 格式:PPT
  • 页数:98
  • 大小:3.99MB
  • 下载积分:8 金币
  • 播放页_非在线预览资源立即下载上方广告
    配套讲稿:

    如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。

    特殊限制:

    部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。

    关 键  词:
    武汉 创维特 ARM 教学 系统 08 嵌入式 软件 设计
    资源描述:
    单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,*,嵌入式系统教案,武汉创维特信息技术有限公司,12/6/2025,提纲,1,3,2,4,5,嵌入式软件开发过程,ARM,软件设计与代码分析,ARM,软件开发工具,ADT IDE,简介,6,7,第六章 嵌入式软件系统设计,2,嵌入式系统软件开发流程,软件需求分析:确定设计任务和目标,并提炼出设计规格说明书,作为正式设计指导和验收的标准。,嵌入式软件开发过程,概要设计:描述系统如何实现所述的需求,包括软件模块的划分、系统的软件开发工具选择以及关键问题的论证等。,详细设计:详细描述各个模块的实现方法与过程,模块间接口等问题,以作为编码人员的编码准则。,编码,3,嵌入式系统的开发流程,单元调试:编码完成后,对各个模块进行单元调试,以保证模块正常工作。,嵌入式软件开发过程,集成调试,4,ARM,主流开发工具,Windows,操作系统,ARM ADS/SDT+,调试器,GNU+,Cygwin,+,调试器,ARM SDT+,简易电缆,Linux,操作系统,GNU+GDB,ARM,软件开发工具,ADT IDE,简介,5,常用调试方法,软件仿真,驻留监控程序,硬件要求高,一般在硬件稳定之后进行,需要占用目标板上的一部分资源,不能对程序的全速运行进行完全仿真,JTAG,仿真器,完全非插入式调试,不使用片上资源,无需目标存储器,不占用目标系统的任何端口,仿真效果更加接近于目标硬件,在线仿真器,ARM,软件开发工具,ADT IDE,简介,6,ADT for ARM,集成开发系统,ARM,软件开发工具,ADT IDE,简介,7,ADT 1000 Emulator for ARM,ARM,软件开发工具,ADT IDE,简介,8,ADT 1000 Emulator for ARM,ARM,软件开发工具,ADT IDE,简介,ADT Emulator for ARM,是连接主机核目标机之间的硬件设备,它实现,ADT IDE for ARM,与目标机之间的连接。,它具有如下特征:,支持,ARM,核,CPU,非插入式调试,无需目标存储器,不占用目标系统的任何端口,2.5,V/3.3V/5V,兼容电平接口,支持标准的14/20针,JTAG,接口,运行状态指示,与主机之间通过并口连接,下载速度达到25,Kbytes/S,9,ADT IDE for ARM,ARM,软件开发工具,ADT IDE,简介,10,ADT IDE for ARM,主要特征,可视化编程环境,ARM,软件开发工具,ADT IDE,简介,支持,ARM7、ARM9、,SecurCore,等。,运行于,Windows98、NT、2000、XP,等平台。,中文、英文版本支持,可视化的源码编辑和工程管理功能,界面友好,使用方便:类似,MS Visual Studio,的用户界面,支持打印功能,支持文件内查找功能和,Find in Files,功能,11,ADT IDE for ARM,主要特征,可视化编程环境,ARM,软件开发工具,ADT IDE,简介,工程管理器:,ADT IDE,提供图形化的工程管理工具,实现文件级、文件目录级、工程级的多级编译连接选项管理以及工程级的调试参数管理,源码编辑器:支持标准的文本编辑功能,支持,C,语言、汇编语言语法高亮显示,辅助编辑工具:提供一系列辅助编辑工具,方便开发人员。包括:多剪贴板工具、代码模板工具、头文件和源文件切换工具、注释工具、符号配对书写工具等多种辅助编辑工具。,12,ADT IDE for ARM,主要特征,交叉编译功能,ARM,软件开发工具,ADT IDE,简介,支持开发语言:,ANSI C;Embedded C+;,汇编语言,编译工具:使用著名优秀自由软件,GNU,的,GCC,交叉编译工具,并经过优化和严格测试,支持,C,语言、汇编语言等,编译参数设置:完全图形界面方式的编译参数设置,提供可视化的设置功能。支持工程级、文件目录级、文件级编译参数设置,13,ADT IDE for ARM,主要特征,调试功能,ARM,软件开发工具,ADT IDE,简介,同时提供了图形和命令行两种调试方式,程序的单步执行,程序下载,存储区下载和上载功能。,工程级调试参数管理,支持源程序、反汇编程序和混合窗口显示,支持,ARM/THUMB,方式显示,具有与,MS Visual Studio,类似的调试菜单功能:,Go,Stop,Reset,Restart,Step into,Step over,Step out,Run to Cursor,等,丰富的示例程序,14,ADT IDE for ARM,主要特征,调试功能,ARM,软件开发工具,ADT IDE,简介,断点功能:支持软件断点和硬件断点,实现断点设置、断点屏蔽、断点取消、断点列表等功能,变量监视功能:随程序运行同步更新变量,即时修改变量值,可设置自动/手动刷新方式、十进制/十六进制显示,ARM,各种模式的寄存器即时查看与修改,当前模式指示,寄存器值修改时红色突显,存储器查看与修改,可设置自动/手动刷新方式、字节/双字节/四字节显示、大/小端方式显示,存储器值修改时红色突显,15,ADT IDE for ARM,主要特征,调试功能,ARM,软件开发工具,ADT IDE,简介,函数堆栈显示,可设置自动/手动刷新方式、十进制/十六进制显示、参数值显示,参数类型显示,板上寄存器(,On Board Register),的查看和修改,可以查看支持,CPU,的所有板上寄存器的具体意义、当前值、各个位的意义,可设置自动/手动刷新方式、二进制/十进制/十六进制显示、大/小端方式显示,支持十进制/十六进制方式修改寄存器值,寄存器值修改时红色突显。,flash,在线编程器,支持对多种,flash,芯片的空白检查、擦除、编程、校验等操作,支持单一操作和自动操作两种操作方式,支持8/16/32位,flash,访问宽度,支持多片,flash,同时编程,编程速度达15,Kbytes/s。,提供统一的,flash,编程接口,可以方便地添加,flash,编程方案。,16,ADT IDE for ARM,ARM,软件开发工具,ADT IDE,简介,ADT IDE,(Arm7Lpt、Arm9Lpt、,SoftSim,、Arm7Simple),用户手册、编程指南,丰富例程,17,多版本支持,ARM,软件开发工具,ADT IDE,简介,软件仿真版本,ARM7,版本,ARM9,版本,简易仿真版本,18,多工程管理,ARM,软件开发工具,ADT IDE,简介,工程,当前活动工程,19,可视化编辑器,ARM,软件开发工具,ADT IDE,简介,编辑菜单,语法高亮编辑器,辅助编辑工具条,书签,20,GCC,交叉编译,ARM,软件开发工具,ADT IDE,简介,编译菜单,编译工具条,编译结果输出,错误定位,21,编译器设置,ARM,软件开发工具,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,简介,存储区上载,存储区下载,29,寄存器观察窗口,ARM,软件开发工具,ADT IDE,简介,多,模式寄存器显示,修改凸显标记,30,函数调用栈窗口,ARM,软件开发工具,ADT IDE,简介,函数调用栈,31,变量观察窗口,ARM,软件开发工具,ADT IDE,简介,局部变量,全局变量,多个观察窗口,32,命令窗口,ARM,软件开发工具,ADT IDE,简介,33,单步调试,STEP INTO,ARM,软件开发工具,ADT IDE,简介,34,单步调试,STEP OVER,ARM,软件开发工具,ADT IDE,简介,35,单步调试,STEP OUT,ARM,软件开发工具,ADT IDE,简介,36,单步调试,RUN TO CURSOR,ARM,软件开发工具,ADT IDE,简介,37,板上寄存器,ARM,软件开发工具,ADT IDE,简介,寄存器组,寄存器,寄存器位域,热点描述信息,修改凸显标记,38,板上寄存器,ARM,软件开发工具,ADT IDE,简介,39,FLASH,在线编程器,ARM,软件开发工具,ADT IDE,简介,40,工具菜单,ARM,软件开发工具,ADT IDE,简介,可自,定制,41,在线帮助,ARM,软件开发工具,ADT IDE,简介,42,嵌入式软件开发,无操作系统的软件开发,启动代码,应用程序,基于操作系统的软件开发,bootloader,操作系统移植,BSP,板级支持包,应用程序开发,ARM,软件设计与代码分析,43,启动代码,功能,硬件初始化,引导,C,代码,特征,通常用汇编语言编写,程序复位运行入口点,代码量非常小,程序流程,设置中断、异常入口,关中断,硬件寄存器初始化(,GPIO,配置、总线配置、,PLL,时钟),初始化栈指针,数据区初始化,C,入口函数调用,BL Main,ARM,软件设计与代码分析,44,应用程序(无操作系统),功能,硬件驱动,应用,特征,通常用,C,语言或者嵌入式汇编语言编写,程序较复杂,代码量较大,ARM,软件设计与代码分析,45,bootloader,功能,硬件初始化,引导操作系统,下载程序(串口、网口、,USB),烧写,flash,特征,程序复位运行入口点,通常用汇编语言+,C,语言编写,代码量较小,ARM,软件设计与代码分析,46,嵌入式操作系统移植,Linux,Windows CE,uC,/OS II,uClinux,Nucleus,ARM,软件设计与代码分析,47,BSP,板级支持包,功能,为应用程序提供统一的硬件操作接口,特征,高度硬件相关,高度依赖于具体硬件平台,各种操作系统各异,ARM,软件设计与代码分析,48,应用程序开发(操作系统),功能,GUI,图形、人机交互,控制,算法,特征,硬件依赖程度小,部分可仿真调试,各种操作系统各异,ARM,软件设计与代码分析,49,嵌入式软件设计和调试流程,编辑,创建工程,添加文件、编写程序,汇编语言加,C,语言,编译,配置编译、汇编和连接参数,编写连接脚本文件,编译,调试,连接调试器,下载程序,运行、调试,固化,通过仿真器烧写,flash,专用或通用的编程器,通过,bootloader,烧写,flash,ARM,软件设计与代码分析,50,交叉编译,GNU,交叉编译,编译.,c arm-elf-,gcc,汇编.,S arm-elf-gas,连接.,o arm-elf-ld,操作文件,汇编文件.,S,C,文件.,c,链接脚本文件,ldscript,库文件.,o.lib.a,生成调试格式文件.,elf,DWARF-1,DWARF-2,生成,bin,文件,elf2bin,arm-elf-,objcopy,ARM,软件设计与代码分析,51,链接脚本,段,Text,段,rodata,段,data,段,bss,段,符号,Image_RO_Limit,Image_RW_Base,Image_ZI_Base,Image_ZI_Limit,GCC,库专用,调试信息,ARM,软件设计与代码分析,52,链接脚本示例,程序在,SDRAM,中运行,程序在,FLASH,中运行,ARM,软件设计与代码分析,53,GCC,库,GCC,库,标准,C,函数库,lib.a,-,lc,标准数学函数库,libm,.a,-lm,标准函数库的支持库,libg,.a -,lg,GCC,的支持库,libgcc,.a,-,lgcc,链接排列顺序,-,lm,lc,lgcc,-,lg,ARM,软件设计与代码分析,54,JX44B0,启动代码分析,ARM,软件设计与代码分析,在基于,ARM7TDMI core,的嵌入式系统中,系统在上电或复位时都从地址0,x00000000,开始执行,因此在这个地址处安排的通常就是系统的启动代码。,它通常也是,BootLoader,程序的一部分,可以在启动代码基础上编写,BootLoader,。,用汇编语言编写。,启动代码是,在,复位后运行其它程序之前运行的一段小程序。通过它,初始化硬件设备、建立内存空间的映射图(,JX44B0,不需要,),,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用,C,函数准备好正确的环境。,55,启动代码的移植和修改,ARM,软件设计与代码分析,启动代码除了依赖于,CPU,的体系结构外,实际上也依赖于具体的嵌入式板级设备的配置,比如板卡的硬件地址分配,,RAM,芯片的类型,其他外设的类型等。,对于两块不同的嵌入式板而言,即使它们是基于同一种,CPU,而构建的,如果他们的硬件资源和配置不一致的话,要想让运行在一块板子上的启动代码也能运行在另一块板子上,也还是需要作一些必要的修改。,56,启动代码流程图,启动代码的功能:,RAM,初始化,设置各个部件的时钟和片选,将,BootLoader,拷贝到,RAM,中,设置堆栈,调用,C,函数。,注意:在本阶段,特别是在堆栈设置之前,进行函数调用(也有些汇编子程序不需要使用堆栈)或者使用堆栈保存数据将产生不可预知的结果;,ARM,软件设计与代码分析,57,设置中断向量表,该段向量表除了复位异常外,只有位于0地址处有效,也就是必须将该段代码烧写到,FLASH,中。,复位异常直接跳转到,ResetHandler,处,它是相对跳转,位置无关。,其余的异常将跳转到0,c000008+,向量地址的位置,使用绝对跳转。,ARM,软件设计与代码分析,58,复位入口:切换到超级模式,系统复位成功后,将自动进入,SVC,模式,在初始化之前必须关闭中断,以免引起异常,LOCKOUT:0 xc0,Bit6,7=1,MODE_MASK:0 x1f,SUP_MODE:0 x13,ARM,软件设计与代码分析,59,设置中断模式并禁止中断,设置,S3C44B0 INTCON,寄存器,缺省值为0,x07,,可以 不作该工作,0 x01e00000,0 x01e00000,ARM,软件设计与代码分析,60,关闭看门狗,设置,S3C44B0 WTCON,寄存器,必须设置,0 x01e00000,0 x01d30000,ARM,软件设计与代码分析,61,系统配置寄存器,使能回写,buffer,打开,Cache,0 x01e00000,0 x01c00000,ARM,软件设计与代码分析,62,设置非,Cache,区域,使能回写,buffer,打开,Cache,00,x0b000000,0c70000000 xc7320000,ARM,软件设计与代码分析,63,端口设置,ARM,软件设计与代码分析,64,设置外部中断的触发方式,0 x01e00000,0,x01d2,0050,ARM,软件设计与代码分析,65,配置总线访问宽度,ARM,软件设计与代码分析,66,配置总线访问时序,ARM,软件设计与代码分析,67,C,代码初始化,ARM,软件设计与代码分析,68,堆栈初始化,ARM,软件设计与代码分析,69,跳转到,C,入口函数,ARM,软件设计与代码分析,70,JX44B0,BOOTLOADER,分析,ARM,软件设计与代码分析,BootLoader,是在启动代码的基础之上,通常启动代码包含于,BootLoader,之中,BootLoader,常用于引导操作系统或者应用程序,BootLoader,可以包含一些简单的调试手段,71,BootLoader,的基本概念,BootLoader,是系统加电后运行的第一段软件代码。,嵌入式系统中,整个系统的加载启动任务完全由,BootLoader,来完成。比如在一个基于,ARM7TDMI core,的嵌入式系统中,系统在上电或复位时都从地址0,x00000000,开始执行,而在这个地址处安排的通常就是系统的,BootLoader,程序。,简单地说,,BootLoader,就是在操作系统内核或用户应用程序运行之前运行的一段小程序。通过这段小程序,我们可以初始化硬件设备、建立内存空间的映射图(有的,CPU,没有内存映射功能如,S3C44B0),,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核或用户应用程序准备好正确的环境。,通常,,BootLoader,是依赖于硬件而实现的,特别是在嵌入式领域,为嵌入式系统建立一个通用的,BootLoader,是很困难的。,ARM,软件设计与代码分析,72,BootLoader,的移植和修改,BootLoader,除了依赖于,CPU,的体系结构外,,BootLoader,实际上也依赖于具体的嵌入式板级设备的配置,比如板卡的硬件地址分配,,RAM,芯片的类型,其他外设的类型等。,对于两块不同的嵌入式板而言,即使它们是基于同一种,CPU,而构建的,如果他们的硬件资源和配置不一致的话,要想让运行在一块板子上的,BootLoader,程序也能运行在另一块板子上,也还是需要作一些必要的修改。,ARM,软件设计与代码分析,73,BootLoader,的安装,系统加电或复位后,所有的,CPU,通常都从,CPU,制造商预先安排的地址上取指令。比如,,S3C44B0,在复位时都从地址 0,x00000000,取它的第一条指令。,嵌入式系统通常都有某种类型的固态存储设备(比如:,ROM、EEPROM,或,FLASH,等)被安排这个起始地址上,因此在系统加电后,,CPU,将首先执行,BootLoader,程序。,也就是说对于基于,S3C44B0,的这套系统,我们的,BootLoader,是从0地址开始存放的,而这块起始地址需要采用可引导的固态存储设备如,FLASH。,ARM,软件设计与代码分析,74,用来控制,BootLoader,的设备或机制,串口通讯是最简单也是最廉价的一种双机通讯设备,所以往往在,BootLoader,中主机和目标机之间都通过串口建立连接,,BootLoader,程序在执行时通常会通过串口来进行,I/O,,比如:输出打印信息到串口,从串口读取用户控制字符等。当然如果认为串口通讯速度不够,也可以采用网络或者,USB,通讯,那么相应的在,BootLoader,中就需要编写各自的驱动。,ARM,软件设计与代码分析,75,Boot Loader,的操作模式,启动加载模式:这种模式也称为自主(,Autonomous),模式。也即,BootLoader,从目标机上的某个固态存储设备上将操作系统加载到,RAM,中运行,整个过程并没有用户的介入。这种模式是,BootLoader,的正常工作模式。,下载模式:在这种模式下,目标机上的,BootLoader,将通过串口连接或网络连接等通信手段从主机下载文件,比如:下载应用程序、数据文件、内核映像等。从主机下载的文件通常首先被,BootLoader,保存到目标机的,RAM,中,然后再被,BootLoader,写到目标机上的固态存储设备中。,BootLoader,的这种模式通常在系统更新时使用。工作于这种模式下的,BootLoader,通常都会向它的终端用户提供一个简单的命令行接口。,在教学系统中提供的,BootLoader,中没有实现自主模式,可以通过修改代码来实现该功能。,ARM,软件设计与代码分析,76,BootLoader,与主机间文件传输的通信设备及协议,最常见的情况就是,目标机上的,Boot Loader,通过串口与主机之间进行文件传输,传输可以简单的采用直接数据收发,当然在串口上也可以采用,xmodem,ymodem,zmodem,协议以及,在以太网上采用,TFTP,协议。,ARM,软件设计与代码分析,77,BootLoader,的主要任务与典型结构框架,从操作系统的角度看,,BootLoader,的总目标就是正确地调用内核来执行。,大多数,BootLoader,都分为,stage1,和,stage2,两大部分。,依赖于,CPU,体系结构的代码,比如设备初始化代码等,通常都放在,stage1,中,而且通常都用汇编语言来实现,以达到短小精悍的目的,也就是前面说的启动代码。,而,stage2,则通常用,C,语言来实现,这样可以实现复杂的功能,而且代码会具有更好的可读性和可移植性。,ARM,软件设计与代码分析,78,BootLoader,的主要任务与典型结构框架,BootLoader,的,stage1,通常包括以下步骤,为加载,BootLoader,的,stage2,准备,RAM,空间,拷贝,BootLoader,的,stage2,到,RAM,空间中,设置好堆栈,跳转到,stage2,的,C,入口点,BootLoader,的,stage2,通常包括以下步骤,初始化本阶段要使用到的硬件设备,调用应用程序或启动内核,ARM,软件设计与代码分析,79,Stage 1,初始化流程图,stage 1,的功能:,RAM,初始化,设置各个部件的时钟和片选,将,BootLoader,拷贝到,RAM,中,设置堆栈,调用,Stage 2。,注意:在本阶段,特别是在堆栈设置之前,进行函数调用(也有些汇编子程序不需要使用堆栈)或者使用堆栈保存数据将产生不可预知的结果;,ARM,软件设计与代码分析,80,Stage 2,流程图,stage 2,的功能:初始化串口,显示菜单,通过菜单获取用户输入,并执行相应的操作。,ARM,软件设计与代码分析,81,Bootloader,更新程序流程图,通过,BootLoader,更新程序的流程。注意为了使用,Bootloader,更新,FLASH,中的程序,需要首先将,Bootloader,搬迁到,RAM,中运行。,ARM,软件设计与代码分析,82,嵌入式实时操作系统,ARM,软件设计与代码分析,将在后面介绍,83,板级支持包,ARM,软件设计与代码分析,BSP(,板级支持包)是介于底层硬件和操作系统之间的软件层次,它完成系统上电后最初的硬件和软件初始化,并对底层硬件进行封装,使得操作系统不再面对具体的操作。,84,板级支持包的特点,ARM,软件设计与代码分析,硬件相关性:因为嵌入式实时系统的硬件环境具有应用相关性,所以,作为高层软件与硬件之间的接口,,BSP,必须为操作系统提供操作和控制具体硬件的方法。,操作系统相关性:不同的操作系统具有各自的软件层次结构,因此,不同的操作系统具有特定的硬件接口形式。,85,板级支持包的功能,ARM,软件设计与代码分析,86,板级支持包的功能,ARM,软件设计与代码分析,嵌入式系统初始化,片级初始化,板级初始化,系统级初始化,硬件相关的设备驱动程序,和,BootLoader,存在一定的重叠,87,系统级初始化,ARM,软件设计与代码分析,这是一个以软件初始化为主的过程,主要进行操作系统初始化。,BSP,将控制转交给操作系统,由操作系统进行余下的初始化操作。包括加载和初始化与硬件无关的设备驱动程序,建立系统内存区,加载并初始化其他系统软件模块,比如网络系统、文件系统等;最后,操作系统创建应用程序环境并将控制转交给应用程序的入口。,88,硬件相关的驱动程序,ARM,软件设计与代码分析,与初始化过程相反,硬件相关的设备驱动程序的初始化和使用通常是一个从高层到底层的过程。,尽管,BSP,中包含硬件相关的设备驱动程序,但是这些设备驱动程序通常不直接由,BSP,使用,而是在系统初始化过程中由,BSP,把它们与操作系统中通用的设备驱动程序关联起来,并在随后的应用中由通用的设备驱动程序调用,实现对硬件设备的操作。,89,JX44B0,应用代码设计及中断处理,ARM,软件设计与代码分析,连接脚本,90,JX44B0,应用代码中断向量,ARM,软件设计与代码分析,起始地址0,x0c000008,除复位异常外,其余异常入口地址由,FLASH,跳转得到,91,JX44B0,中断处理流程,执行0,x18,处指令:,LDR pc,=0 x0c000020,,由,Bootloader,控制,执行0,x0c000020,处指令:,HandlerIRQ,,,ramstart,.s,执行,HandlerIRQ,,,ramstart,.s,执行,HandleIRQ,处保存的中断分发例程,,ramstart,.s,中初始化为,IsrIRQ,ARM,软件设计与代码分析,92,用汇编代码编写的中断分发例程,保护现场,IsrIRQ,:/*using I_ISPR register.*/,sub,lr,lr,#4,stmfd,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,R9,中保存中断状态,ARM,软件设计与代码分析,93,用汇编代码编写的中断分发例程,寻找中断源,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 /*,处理下一比特 */,找到中断则跳转到,i1,R8,保存找到的中断偏移,未找到中断则跳转到,i2,ARM,软件设计与代码分析,94,用汇编代码编写的中断分发例程,处理中断并返回,i1:,ldr,r9,=,HandleADC,/*,HandleADC,位于中断向量表起始位置,我们将该地址用作是中断向量表的基地址 */,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:,ldmfd,sp!,r8-r9 /*,如果当前没有任何中断,直接返回*/,add sp,sp,#4 /*,移动堆栈指针,该空间由第4句指令预留*/,ldmfd,sp!,r0-r4,pc/*,中断返回,并恢复中断前的处理器模式*/,ARM,软件设计与代码分析,95,用,C,代码编写的中断分发例程,函数声明,typedef,(*ISR_ROUTINE_ENTRY)(void);,void,IsrIRQ,()_attribute_(interrupt(IRQ);,ARM,软件设计与代码分析,96,用,C,代码编写的中断分发例程,函数实现,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,_routine_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,中断处理例程,注册例程,*(,unsigned,int,*)(HandleEINT0)=(unsigned,int,)EINT0_,Isr,;,函数实现,void EINT0_,Isr,(),rI,_ISPC=BIT_EINT0;/*,清除中断标志*/,ARM,软件设计与代码分析,98,
    展开阅读全文
    提示  咨信网温馨提示:
    1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
    2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
    3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
    4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前可先查看【教您几个在下载文档中可以更好的避免被坑】。
    5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
    6、文档遇到问题,请及时联系平台进行协调解决,联系【微信客服】、【QQ客服】,若有其他问题请点击或扫码反馈【服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【版权申诉】”,意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:0574-28810668;投诉电话:18658249818。

    开通VIP折扣优惠下载文档

    自信AI创作助手
    关于本文
    本文标题:武汉创维特ARM教学系统08嵌入式软件系统设计.ppt
    链接地址:https://www.zixin.com.cn/doc/12780253.html
    页脚通栏广告

    Copyright ©2010-2025   All Rights Reserved  宁波自信网络信息技术有限公司 版权所有   |  客服电话:0574-28810668    微信客服:咨信网客服    投诉电话:18658249818   

    违法和不良信息举报邮箱:help@zixin.com.cn    文档合作和网站合作邮箱:fuwu@zixin.com.cn    意见反馈和侵权处理邮箱:1219186828@qq.com   | 证照中心

    12321jubao.png12321网络举报中心 电话:010-12321  jubao.png中国互联网举报中心 电话:12377   gongan.png浙公网安备33021202000488号  icp.png浙ICP备2021020529号-1 浙B2-20240490   


    关注我们 :微信公众号  抖音  微博  LOFTER               

    自信网络  |  ZixinNetwork