EOS嵌入式操作系统-第四部分-嵌入式软件_第1页
EOS嵌入式操作系统-第四部分-嵌入式软件_第2页
EOS嵌入式操作系统-第四部分-嵌入式软件_第3页
EOS嵌入式操作系统-第四部分-嵌入式软件_第4页
EOS嵌入式操作系统-第四部分-嵌入式软件_第5页
已阅读5页,还剩58页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

嵌入式操作系统EmbeddedOperatingSystem,2016年2月,桑楠sn,信息与软件工程学院,1,第四部分,信息与软件工程学院,2,嵌入式软件,核心内容,嵌入式软件系统及其开发嵌入式软件的运行过程系统引导设备驱动嵌入式系统的快速启动,信息与软件工程学院,3,嵌入式软件系统基础,信息与软件工程学院,4,基本概念,信息与软件工程学院,5,软件算法+数据结构+文档;软件即服务实时软件ReaitimeSoftware,RTS嵌入式软件EmbeddedSoftware,ES板级支持包BoardSupportPackage,BSP启动加载Bootloader驱动程序Driver,嵌入式软件的生命期,信息与软件工程学院,6,嵌入式软件分类,信息与软件工程学院,7,嵌入式软件的特点,信息与软件工程学院,8,实时性环境特定;快速启动异步事件的并发处理多任务;随机性应用操作系统一体化VxWorks;Linux应用固化不可修改性实用性面向行业;定向开发适用性可裁减,适应应用鲁棒性容错够用即可成本、资源可信性安全、防危、可靠等,嵌入式实时软件的关注点,信息与软件工程学院,9,任务的实时性时间特性强调计算状态的时间边界和它们之间的关系时间表达基于时间点、基于时间间歇(开始、终止)时间约束在满足了所有启动条件后,对一个可执行对象开始执行和必须终止的约束:start、dealine,多任务软件系统的关注点,信息与软件工程学院,10,并发任务之间的协作关系互斥问题同步问题,信息隐藏任务之间、模块之间接口消除全局变量,理解嵌入式系统开发,信息与软件工程学院,11,观点产品开发,信息与软件工程学院,12,内容:涉及H/W和S/W的复杂系统开发特征:开发一个ES,相当于开发一台计算机需要开发硬件系统H/W对所开发硬件,需要开发/配置相应的驱动程序需要提供系统引导程序Bootload可能需要配置RTOS需要针对应用领域,采用专用的RTOS并进一步优化最后:开发特定领域的嵌入式应用软件,开发方式及开发环境,信息与软件工程学院,13,开发方式:交叉开发开发环境:,网口串口USB无线,嵌入式软件运行过程,信息与软件工程学院,14,运行过程示意图,信息与软件工程学院,15,上电复位,系统升级,引导/升级系统,系统初始化,应用初始化,多任务应用,板级初始化,远程升级,本地升级,基于多任务操作系统的嵌入式软件的主要运行流程该运行流程主要分为5个阶段,运行过程板级初始化,信息与软件工程学院,16,顺序:上电复位后,开始板级初始化特性:完全的硬件相关,一般采用汇编语言实现核心内容:不同系统有所差异,但必须完成CPU中堆栈指针寄存器的初始化。BSS段(BlockStorageSpace)的初始化。CPU芯片级的初始化:中断控制器、内存等的初始化。,运行过程系统引导,信息与软件工程学院,17,选择:根据需要分别进入系统软件引导阶段或系统升级阶段测试通信端口数据或判断特定开关系统引导阶段:RAM启动系统软件从NorFlash中读出并加载到RAM中运行:运行速度较快;软件可压缩存储在Flash中NorFlash启动系统软件直接在NorFlash上运行外存启动软件中读取出来加载到RAM中运行:成本低系统升级阶段:远程升级:通过网络;支持TFTP、FTP、HTTP等方式本地升级:使用超级终端或特定的升级软件进行。,运行过程系统初始化,信息与软件工程学院,18,操作系统等系统软件运行必需的初始化工作,如根据系统配置初始化数据空间初始化系统所需的接口和外设.需要按特定顺序进行首先完成内核的初始化完成网络、文件系统等的初始化最后完成中间件等的初始化工作,运行过程应用初始化,信息与软件工程学院,19,应用软件运行必需的初始化工作,如应用任务的创建信号量的创建消息队列的创建应用相关的其它初始化.,运行过程多任务系统运行,信息与软件工程学院,20,系统进入多任务状态操作系统按照已确定的算法进行任务的调度各应用任务分别完成特定的功能,运行过程程序代码示意,信息与软件工程学院,21,RomStart(),SysInit(),UsrInit(),UsrKernelInit(),KernelInit(),UsrRoot(),RomInit(),BootLoad(),板级初始化,系统初始化,运行过程函数,信息与软件工程学院,22,RomInit():romInit.s,上电初始化RomStart():bootInit.c,程序代码调入RAM启动执行SysInit():sysALib.s,类似romInit.s,但不再初始化SDRAMUserInit():bootConfig.c,启动操作系统内核必须的初始化,C代码BootLoad():bootConfig.c,加载操作系统映像(vxWorks)UsrKernelInit():usrKernel.c,初始化内核可选组件KernelInit():usrKernel.c,初始化多任务环境,启动内核usrRoot():usrConfig.c,产生usrRoot根任务,初始化I/O系统、驱动器、设备等,VxWorks启动过程,信息与软件工程学院,23,RTOS的引导模式,信息与软件工程学院,24,需要BootLoader的引导模式采用高性能RAM的系统;由于RAM空间的限制不需要BootLoader的引导模式对需要快速启动的系统;时间效率要求较高,空间限制较少。-方法:直接在NorFlash或ROM等非易失性主存介质中运行,启动速度快,基本启动过程,信息与软件工程学院,25,示例:ROM中引导VxWorks,信息与软件工程学院,26,示例:ROM中引导VxWorks(2),信息与软件工程学院,27,存储运行模式写入ROM中的VxWorks是非压缩的,不需要解压,系统直接跳到ROM的首地址,运行VxWorks原因VxWorks在ROM中运行主要是为了节省RAM空间,使应用程序有更大的空间运行优缺点ROM中运行的VxWorks优点是启动速度快,缺点是运行速度慢,示例:RAM中引导VxWorks,信息与软件工程学院,28,可装入映像的入口程序:功能类似于romInit,示例:RAM中引导VxWorks(2),信息与软件工程学院,29,存储运行模式写入ROM或Flash中的BootROMImage或VxWorksImage是压缩的,需要先拷贝、解压所有的text和data到RAM的RAM_LOW_ADRS中,然后运行VxWorks优缺点RAM中运行的VxWorks优点是运行速度快,但启动速度偏慢,板级初始化,信息与软件工程学院,30,板级初始化(Boot)的主要内容,信息与软件工程学院,31,处理函数:romInit(),上电后执行的第一个函数处理过程:以vxWorks为例关中断设置哑堆栈(dummystack)保存启动类型(冷启动和热启动)到堆栈上清Cache初始化CPU内的寄存器硬件初始化,主要是初始化SDRAM接口调用romStart(),romInit()示例,信息与软件工程学院,32,/定义等cli/*关中断*/movlSP_ARG1(%esp),%ebx/*esp+SP_ARG1的值给ebx:开始类型*/jmpwarm/段内相对跳转到warm/*切换到保护模式*/mov%cr0,%eax/*CR0中含有系统控制标志*/.byte0 x66/*nextinsthas32bitoperand*/or$0 x00000001,%eax/*setthePEbit*/mov%eax,%cr0/*moveEAXtoCR0*/jmpromInit1/*跳转到romInit1*/./*初始化DS,ES,FS,GS,SS段寄存器*/romInit1:mov$0 x0010,%eax/*setdatasegment0 x10is3rdone*/mov%ax,%ds/*setDS*/mov%ax,%es/*setES*/mov%ax,%fs/*setFS*/mov%ax,%gs/*setGS*/mov%ax,%ss/*setSS*/.byte0 x66/*nextinsthas32bitoperand*/mov$ROM_STACK,%esp/*setlowermemstackpointer*/,关中断:cli,信息与软件工程学院,33,ResetHandler:MRSr0,CPSRORRr0,r0,#(PSR_I_BIT|PSR_F_BIT)MSRCPSR_c,r0,DisableIRQ/*Ifcoldbooting,clearmemorytoavoidparityerrors*/#ifdefROMSTART_BOOT_CLEARif(startType#endif/*ROM_RESIDENT*/,这里可直接调用usrInit,sysHwInit(),信息与软件工程学院,37,功能:硬件初始化处理过程:调用sysMemMapDetect()检测存储映射配置,相关全局变量赋值记录物理存储区的长度,计算sysPhysMemDesc的入口数调用pciInit()初始化PCI接口配置CPLD内的寄存器初始化EPIC、DMA等的相关寄存器的基本地址调用sysEpicInit()完成EPIC(段控制器)初始化调用sysSerialHwInit()初始化串口调用sysNetHwInit()初始化网络接口,串口初始化,信息与软件工程学院,38,LDRr1,=UART0_BASEMOVr0,#0STRr0,r1,#UART_PL011_CRMOVr0,#0 x27STRr0,r1,#UART_PL011_IBRDMOVr0,#4STRr0,r1,#UART_PL011_FBRDMOVr0,#0 x70STRr0,r1,#UART_PL011_LCRHLDRr0,=0 x301STRr0,r1,#UART_PL011_CR,DisableUART,Setspeedto38400bps,8bits,1stopbit,noparity,fifoenabled,EnableUART,系统初始化,信息与软件工程学院,39,系统初始化的主要内容,信息与软件工程学院,40,处理函数:sysInit(),依赖特定系统的汇编代码模块,类似romInit()(不处理RAM)处理过程:关中断无效Cache初始化处理器的寄存器,包括C堆栈指针清除所有悬置的中断跳转到usrInit(),用户初始化,信息与软件工程学院,41,用户初始化的主要内容,信息与软件工程学院,42,处理函数:usrInit(),VxWorks下的第一个C程序处理过程:无效CacheBSS段清0保存启动类型调用函数intVecBaseSet()设置中断向量表基本地址调用sysHwInit()初始化硬件到静止状态:设备复位并禁止其产生中断调用usrKernelInit(),选择适当的初始化函数完成初始化调用kernelInit(),初始化多任务环境,中断向量表初始设置:VecBaseSet(),信息与软件工程学院,43,usrKernelInit(),信息与软件工程学院,44,功能:初始化内核可选组件处理过程:依次调用classLibInit()taskLibInit()taskHookInit()semBLibInit()semMLibInit()semCLibInit()semOLibInit()wdLibInit()msgQLibInit()qInit()workQInit(),KernelInit(),信息与软件工程学院,45,功能:初始化多任务环境,启动内核处理过程:激活intLockLevelSet()设置分级中断管理使时间片(round-robin)方式无效针对实时从内存池顶部创建中断堆栈、根堆栈、以及TCB调用-taskInit()-taskActivate()-.调用usrRoot()中断usrInit()的运行开中断,本部分涉及EOS的初始化,将在后续章节中细化,系统启动,信息与软件工程学院,46,系统启动的主要内容,信息与软件工程学院,47,处理函数:usrRoot(),初始化I/O系统、驱动器、设备,启动系统处理过程:内存清零:memInit(pMemPoolStart,memPoolSize);初始化MMU单元:usrMmuInit();时钟设置:sysClkConnect(),sysClkRateSet(),sysClkEnable();I/O初始化:iosInit(),限制了最多同时打开设备数;字符设备设置:ttyDrv(),缺省为对控制台的调用;初始化结构、信号、消息等:excInit(),logInit(),sigInit()初始化管道等:pipeDrv(),stdioInit(),mathSoftInit()或mathHardInit();初始化USB、SCSI、IDE、SATA、网络等设备接口;配置并初始化目标代理机:wdbConfig()启动内核,板级支持包BSP,信息与软件工程学院,48,BSP的概念,信息与软件工程学院,49,嵌入式系统的基础部分,实现系统可移植性的关键负责上电时的硬件初始化、启动RTOS或应用程序的支持模块、提供底层硬件驱动提供上层软件提供访问底层硬件的手段,Drivers驱动程序,驱动程序,信息与软件工程学院,50,概念即设备驱动程序(DeviceDriver),一种可以使计算机和设备通信的特殊程序,相当于硬件的接口。作用上层操作只有通过这个接口,才能控制硬件设备“硬件和系统之间的桥梁”。基本功能对设备初始化和释放。对设备进行管理。读取应用程序传送给设备文件的数据,并回送应用程序请求的数据。检测和处理设备出现的错误,驱动程序的开发准备,信息与软件工程学院,51,了解硬件工作原理,包括处理器架构及工作原理、外设控制器的原理及接口(datasheet)。对裸机驱动程序就是一套与硬件交互的函数库。基于OS还必须熟悉该OS对相关硬件的操作原理驱动类别字符设备以字节为单位顺序处理数据,不支持随机读写。如打印机、串口、显示器等块设备I/O时数据处理以块为单位,采用缓冲,支持随机读写。如硬盘、光驱、盘等。网络设备面向网络协议层,设备文件标识唯一,采用一套与数据包传输相关的函数。,示例:字符设备驱动程序运行过程,信息与软件工程学院,52,示例:VC+的串口通信,信息与软件工程学院,53,VC的通信控制函数:SetCommPort:指定使用的串口,如COM1、COM2、.GetCommPort:获取当前使用的串口SetSettings:设置串口的参数,如9600,N,8,1GetSettings:取得串口参数SetPortOpen:打开或关闭串口SetInPutLen:一次读取输入缓冲区的字符数。0时全部字符。GetInBufferCount:输入缓冲区中接受到的字符数GetInPut:读取输入缓冲区GetOutBufferCount:输出缓冲区中待发送的字符数SetOutPut:写入输出缓冲区.,示例:VC+的串口通信(2),信息与软件工程学院,54,利用控制函数的通信:初始化:BOOLCMyDiaLog:OnInitDialog()定时串口读写:voidCMyDiaLog:OnTimer(UINTnIDEvent),BOOLCMyDiaLog:OnInitDialog()CDialog:OnInitDialog();m_Com.SetCommPort(1);if(!m_Com.GetPortOpen()m_Com.SetSettings(57600,N,8,1);m_Com.SetPortOpen(true);m_Com.SetInBufferCount(0);SetTimer(1,10,NULL);InBuffer.bstrVal=newunsignedshortMESSAGELENGTH;OutBuffer.bstrVal=newunsignedshortMESSAGELENGTH;OutBuffer.vt=VT_BSTR;returntrue;,voidCMyDiaLog:OnTimer(UINTnIDEvent)if(m_Com.GetInBufferCount()=MESSAGELENGTH)InBuffer=m_Com.GetInput();/handletheInBuffer./FilltheOutBuffer.m_Com.SetOutput(OutBuffer);CDialog:OnTimer(nIDEvent);,示例:VC+的串口通信(3),信息与软件工程学院,55,直接用VC+访问串口:使用的函数CreateFile:用指定的方式打开指定的串口。ReadFile:读取串口数据WriteFile:向串口写数据CloseHandle:关闭串口,串口通信的驱动函数打开串口:BOOLCSerial:Open(intnPort,intnBaud)缓冲中字符数:intCSerial:InBufferCount(void)读数据:DWORDCSerial:ReadData(void*buffer,DWORDdwBytes

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论