嵌入式系统-软硬件接口.ppt
刘健培嵌入式系统与网络通信研究中心北京邮电大学计算机学院嵌入式系统
软硬件接口Bootloader、驱动、BSP本节内容硬件平台(S3C2440)BSP操作系统(UCOS)应用程序(协议)BootloaderDeviceDriverDeviceDriverDeviceDriverDeviceDriver二进制运行接口,ABIWHY?功能分化:启动控制硬件支持软件模型从软件开发角度看板级硬件硬件系统结构与组成的抽象从硬件系统抽象出软硬件接口信息,便于软件开发人员开发软件在嵌入式硬件系统中,软件表现为程序存储器中的二进进制代码(即程序),不管外设的功能和硬件形式如何,对软件来说,可操作的只有:寄存器、存储器、IO接口。一般RISC处理器都是统一编址的,所以最终操作的只有地址。硬件开发板实物软件C语言头文件TQ2440硬件开发板2440addr.h从软件开发角度看存储器存储器地址空间分布图存储芯片信息类型、基址、大小、片选、配置参数存储器控制寄存器MMU从软件开发角度看外设指令能访问到什么IO管脚配置寄存器设备寄存器组数据、控制、状态寄存器地址独立编址(I/O端口方式)与统一编址(I/O内存方式)一个地址可能对应多个寄存器有些地址可以动态配置(如PCI)指令如何访问外设外设操作方式与流程规范与协议CPU与外设交互方式轮询、中断、DMA数字电路外部设备电电光机械转换部分控制部分控制电路控制寄存器数据寄存器状态寄存器外设接口CPU读/写ARMISA异常与中断处理方式ARMABI(API?)从软件开发角度看处理器ARMABIAPI与ABIAPI:ApplicationProgrammingInterface,应用程序编程接口ABI:ApplicationBinaryInterface,应用程序二进制接口EABI:EmbeddedApplicationBinaryInterface,嵌入式应用程序二进制接口CPUtoolchainAPPLIBsOSAPICompilerLinkerLoaderDebuggerABISourcecodeBinarycodecompilerunAPI定义了源代码和库之间的接口,因此同样的代码可以在支持这个API的任何系统中编译,ABI允许编译好的目标代码在使用兼容ABI的系统中无需改动就能运行(直到现在还没有很成功的例子)。EABI指定了文件格式、数据类型、寄存器使用、栈帧组织方式和函数参数传递等的标准约定。支持EABI的编译器创建的目标文件可以和使用类似编译器产生的代码兼容,这样允许开发者链接一个由不同编译器产生的库。EABI与关于通用计算机的ABI的主要区别是应用程序代码中允许使用特权指令,不需要动态链接(有时是禁止的),和更紧凑的堆栈帧组织用来节省内存。广泛使用EABI的有PowerPC和ARM.ARMABIARMEABIARM程序调用标准——AAPCS(ProcedureCallStandardfortheARMArchitecture)ARM的C++ABI——CPPABI(C++ABIfortheARMArchitecture)ARM异常处理的ABI——EHABI(TheExceptionHandlingABIfortheARMArchitecture)ARM的ELF二进制文件格式——AAELF(ELFfortheARMArchitecture)ARM的DWARF二进制文件格式——AADWARF(DWARFfortheARMArchitecture)ARM的运行态ABI——RTABI(TheRun-timeABIfortheARMArchitecture)ARM的C库ABI——CLIBABI(TheCLibraryABIfortheARMArchitecture)系统初始化过程指令执行前硬件初始化系统上电,执行内部初始固码微程序(如果有),设置处理器上电默认工作状态,最后从复位向量处开始执行硬件初始化片级初始化(设置微处理器执行状态)板级初始化(配置与初始化相关外设)软件初始化操作系统执行前初始化初始化OS所需内存等资源、加载OS、传递参数、跳转操作系统组件初始化中断、定时器、任务、内存管理等等应用程序执行前初始化加载应用程序,建立应用程序执行环境跳转到应用程序入口CPU初始化