版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、嵌入式操作系统嵌入式操作系统Embedded Operating System2016年2月桑楠桑楠 信息与软件工程学院第四部分第四部分信息与软件工程学院嵌入式软件核心内容核心内容嵌入式软件系统及其开发嵌入式软件的运行过程系统引导设备驱动嵌入式系统的快速启动信息与软件工程学院嵌入式软件系统嵌入式软件系统根底根底信息与软件工程学院根本概念根本概念 信息与软件工程学院软件算法 + 数据构造 + 文档;软件即效劳实时软件Reaitime Software,RTS嵌入式软件Embedded Software,ES板级支持包Board Support Package,BSP启动加载Bootloader驱
2、动程序Driver嵌入式软件的生命期嵌入式软件的生命期 信息与软件工程学院嵌入式软件分类嵌入式软件分类 信息与软件工程学院嵌入式软件的特点嵌入式软件的特点信息与软件工程学院实时性环境特定;快速启动异步事件的并发处理 多任务;随机性应用操作系统一体化 VxWorks;Linux应用固化不可修改性实用性面向行业;定向开发适用性可裁减,适应应用鲁棒性容错够用即可本钱、资源可信性平安、防危、可靠等嵌入式实时软件的关注点嵌入式实时软件的关注点信息与软件工程学院任务的实时性时间特性强调计算状态的时间边界和它们之间的关系时间表达基于时间点、基于时间间歇开场、终止时间约束在满足了所有启动条件后,对一个可执行对
3、象开场执行和必须终止的约束:start、dealine多任务软件系统的关注点多任务软件系统的关注点信息与软件工程学院并发任务之间的协作关系互斥问题同步问题信息隐藏任务之间、模块之间接口消除全局变量理解理解嵌入式系统开发嵌入式系统开发信息与软件工程学院观点观点 产品开发产品开发信息与软件工程学院l内容:涉及H/W和S/W的复杂系统开发l特征:开发一个ES,相当于开发一台计算机需要开发硬件系统H/W对所开发硬件,需要开发/配置相应的驱动程序需要提供系统引导程序Bootload可能需要配置RTOS需要针对应用领域,采用专用的RTOS并进一步优化最后:开发特定领域的嵌入式应用软件开发方式及开发环境开发
4、方式及开发环境信息与软件工程学院l开发方式:穿插开发l开发环境:网口串口USB无线嵌入式软件嵌入式软件运行过程运行过程信息与软件工程学院运行过程示意图运行过程示意图信息与软件工程学院上电复位上电复位系统晋级系统晋级引导引导/晋级系统晋级系统系统初始化系统初始化应用初始化应用初始化多任务应用多任务应用板级初始化板级初始化远程晋级远程晋级本地晋级本地晋级基于多任务操作系统基于多任务操作系统的嵌入式软件的主要运行流程的嵌入式软件的主要运行流程该运行流程主要分为该运行流程主要分为5个阶段个阶段运行过程运行过程 板级初始化板级初始化信息与软件工程学院顺序:上电复位后,开场板级初始化顺序:上电复位后,开场
5、板级初始化特性:完全的硬件相关,一般采用汇编语言实现特性:完全的硬件相关,一般采用汇编语言实现核心内容:不同系统有所差异,但必须完成核心内容:不同系统有所差异,但必须完成CPUCPU中堆栈指针存放器的初始化。中堆栈指针存放器的初始化。BSSBSS段段Block Storage SpaceBlock Storage Space的初始化。的初始化。CPUCPU芯片级的初始化:中断控制器、内存等的初始化。芯片级的初始化:中断控制器、内存等的初始化。运行过程运行过程 系统引导系统引导信息与软件工程学院选择:根据需要分别进入系统软件引导阶段或系统晋级阶段选择:根据需要分别进入系统软件引导阶段或系统晋级阶
6、段 测试通信端口数据或判断特定开关测试通信端口数据或判断特定开关系统引导阶段:系统引导阶段:RAM启动系统软件从启动系统软件从NorFlash中读出并加载到中读出并加载到RAM中运行:运行速度较快;软件可压缩存储在中运行:运行速度较快;软件可压缩存储在Flash中中NorFlash启动系统软件直接在启动系统软件直接在NorFlash上运行上运行外存启动软件中读取出来加载到外存启动软件中读取出来加载到RAM中运行:本钱低中运行:本钱低系统晋级阶段:系统晋级阶段:远程晋级:通过网络;支持远程晋级:通过网络;支持TFTP、FTP、HTTP等方式等方式本地晋级:使用超级终端或特定的晋级软件进展。本地晋
7、级:使用超级终端或特定的晋级软件进展。运行过程运行过程 系统初始化系统初始化信息与软件工程学院 操作系统等系统软件运行必需的初始化工作,如根据系统配置操作系统等系统软件运行必需的初始化工作,如根据系统配置 初始化数据空间初始化数据空间 初始化系统所需的接口和外设初始化系统所需的接口和外设 . 需要按特定顺序进展需要按特定顺序进展 首先完成内核的初始化首先完成内核的初始化 完成网络、文件系统等的初始化完成网络、文件系统等的初始化 最后完成中间件等的初始化工作最后完成中间件等的初始化工作运行过程运行过程 应用初始化应用初始化信息与软件工程学院 应用软件运行必需的初始化工作,如应用软件运行必需的初始
8、化工作,如 应用任务的创立应用任务的创立 信号量的创立信号量的创立 消息队列的创立消息队列的创立 应用相关的其它初始化应用相关的其它初始化 .运行过程运行过程 多任务系统运行多任务系统运行信息与软件工程学院 系统进入多任务状态系统进入多任务状态 操作系统按照已确定的算法进展任务的调度操作系统按照已确定的算法进展任务的调度 各应用任务分别完成特定的功能各应用任务分别完成特定的功能运行过程运行过程 程序代码示意程序代码示意信息与软件工程学院SysInit()UsrInit()UsrKernelInit()KernelInit()UsrRoot()RomInit()BootLoad()系统初始化运行
9、过程运行过程 函数函数信息与软件工程学院 RomInit():romInit.s,上电初始化,上电初始化 RomStart():bootInit.c,程序代码调入,程序代码调入RAM启动执行启动执行 SysInit():sysALib.s,类似,类似romInit.s,但不再初始化,但不再初始化SDRAM UserInit():bootConfig.c,启动操作系统内核必须的初始化,启动操作系统内核必须的初始化,C代码代码 BootLoad():bootConfig.c,加载操作系统映像,加载操作系统映像vxWorks UsrKernelInit():usrKernel.c,初始化内核可选组件
10、,初始化内核可选组件 KernelInit():usrKernel.c,初始化多任务环境,启动内核,初始化多任务环境,启动内核 usrRoot(): usrConfig.c,产生,产生usrRoot根任务,初始化根任务,初始化I/O系统、驱动器、设备等系统、驱动器、设备等VxWorks启动过程启动过程信息与软件工程学院RTOS的引导形式的引导形式信息与软件工程学院需要Boot Loader的引导形式采用高性能RAM的系统;由于RAM空间的限制不需要Boot Loader的引导形式对需要快速启动的系统;时间效率要求较高,空间限制较少。- 方法:直接在NorFlash或ROM等非易失性 主存介质中
11、运行,启动速度快根本启动过程根本启动过程信息与软件工程学院例如:例如:ROMROM中引导中引导VxWorksVxWorks信息与软件工程学院例如:例如:ROMROM中引导中引导VxWorksVxWorks2 2信息与软件工程学院存储运行形式写入存储运行形式写入ROM中的中的VxWorks是非压缩的,不需要解压,系统直接跳到是非压缩的,不需要解压,系统直接跳到ROM的首地址,运的首地址,运行行VxWorks原因原因VxWorks在在ROM中运行主要是为了节省中运行主要是为了节省RAM空间,使应用程序有更大的空间运行空间,使应用程序有更大的空间运行 优缺点优缺点ROM中运行的中运行的VxWorks
12、优点是启动速度快,缺点是运行速度慢优点是启动速度快,缺点是运行速度慢例如:例如:RAMRAM中引导中引导VxWorksVxWorks信息与软件工程学院可装入映像的入口程序:功能类似于romInit例如:例如:RAMRAM中引导中引导VxWorksVxWorks2 2信息与软件工程学院存储运行形式存储运行形式 写入写入ROM或或Flash中的中的BootROM Image或或VxWorks Image是压缩的,需要先拷贝、解压所有的是压缩的,需要先拷贝、解压所有的text和和data到到RAM的的RAM_LOW_ADRS中,然后运行中,然后运行VxWorks优缺点优缺点RAM中运行的中运行的Vx
13、Works优点是运行速度快,但启动速度偏慢优点是运行速度快,但启动速度偏慢板级初始化板级初始化信息与软件工程学院板级初始化板级初始化BootBoot的主要内容的主要内容信息与软件工程学院处理函数:romInit(),上电后执行的第一个函数处理过程:以vxWorks为例关中断设置哑堆栈dummy stack,也称虚拟堆栈保存启动类型冷启动和热启动到堆栈上清Cache初始化CPU内的存放器硬件初始化,主要是初始化SDRAM接口调用romStart()romInit()例如例如信息与软件工程学院 / 定义等 cli/* 关中断 */movl SP_ARG1(%esp),%ebx/* esp+SP_A
14、RG1的值给ebx:开场类型 */jmpwarm / 段内相对跳转到warm/* 切换到保护形式 */mov%cr0,%eax/* CR0中含有系统控制标志 */.byte0 x66/* next inst has 32bit operand */or$0 x00000001,%eax/* set the PE bit */mov%eax,%cr0/* move EAX to CR0 */jmpromInit1/* 跳转到romInit1 */./* 初始化 DS, ES, FS, GS, SS段存放器 */romInit1:mov$0 x0010,%eax/* set data segmen
15、t 0 x10 is 3rd one */mov%ax,%ds/* set DS */mov%ax,%es/* set ES */mov%ax,%fs/* set FS */mov%ax,%gs/* set GS */mov%ax,%ss/* set SS */.byte0 x66/* next inst has 32bit operand */mov$ ROM_STACK,%esp /* set lower mem stack pointer */关中断:关中断:clicli信息与软件工程学院ResetHandler: MRS r0, CPSR ORR r0, r0, #(PSR_I_BIT
16、|PSR_F_BIT) MSR CPSR_c, r0 Disable IRQ & FIQ0 x800 x40_ENTRY:fsxc2731N Z C V Q287I F T mode1623 15 24 U n d e f i n e dJ0 x06000000I、F位置1系统引导系统引导信息与软件工程学院系统引导系统引导LoadLoad的主要内容的主要内容信息与软件工程学院处理函数:romStart(),执行的第一个C程序处理过程:完成必要的硬件初始化:sysHwInit()把ROM代码和数据段拷贝并重定位到RAM - 代码段未驻留在ROM中,拷贝代码段和数据段 - 代码段是驻留在R
17、OM中的,只拷贝数据段未用的内存(RAM)清零需要时,要进展解压缩跳转到sysInit()romstart()例如例如信息与软件工程学院#ifdef ROM_RESIDENT void romStart ( FAST int startType /* start type */ ) /* relocate the data segment into RAM */ copyLongs (UINT *)ROM_DATA_ADRS, (UINT *)UNCACHED(RAM_DATA_ADRS), (UINT)end - (UINT)RAM_DATA_ADRS) / sizeof (long); /
18、* If cold booting, clear memory to avoid parity errors */ #ifdef ROMSTART_BOOT_CLEAR if (startType & BOOT_CLEAR) bootClear(); #endif /* jump to the entry */ sysInit (startType); #endif /* ROM_RESIDENT */ 这里可直接调用usrInitsysHwInit()sysHwInit()信息与软件工程学院功能:硬件初始化处理过程:调用sysMemMapDetect()检测存储映射配置,相关全局变量
19、赋值记录物理存储区的长度,计算sysPhysMemDesc的入口数调用pciInit()初始化PCI接口配置CPLD内的存放器初始化EPIC、DMA等的相关存放器的根本地址调用sysEpicInit()完成EPIC(段控制器)初始化调用sysSerialHwInit()初始化串口调用sysNetHwInit()初始化网络接口串口初始化串口初始化信息与软件工程学院 LDR r1, =UART0_BASE MOV r0, #0 STR r0, r1,#UART_PL011_CR MOV r0, #0 x27 STR r0, r1,#UART_PL011_IBRD MOV r0, #4 STR r0
20、, r1,#UART_PL011_FBRD MOV r0, #0 x70 STR r0, r1,#UART_PL011_LCRH LDR r0, =0 x301 STR r0, r1,#UART_PL011_CR Disable UART Set speed to 38400bps 8 bits, 1 stop bit, no parity, fifo enabled Enable UART系统初始化系统初始化信息与软件工程学院系统初始化的主要内容系统初始化的主要内容信息与软件工程学院处理函数:sysInit(),依赖特定系统的汇编代码模块,类似romInit()不处理RAM处理过程:关中断无
21、效Cache初始化处理器的存放器,包括C堆栈指针去除所有悬置的中断跳转到usrInit()用户初始化用户初始化信息与软件工程学院用户初始化的主要内容用户初始化的主要内容信息与软件工程学院处理函数:usrInit(),VxWorks下的第一个C程序处理过程:无效CacheBSS段清0保存启动类型调用函数intVecBaseSet()设置中断向量表根本地址调用sysHwInit()初始化硬件到静止状态:设备复位并制止其产生中断调用usrKernelInit(),选择适当的初始化函数完成初始化调用kernelInit(),初始化多任务环境中断向量表初始设置:中断向量表初始设置:VecBaseSet(
22、)信息与软件工程学院FIQIRQ(Reserved)Data AbortPrefetch AbortSoftware InterruptUndefined InstructionReset0 x1C0 x180 x140 x100 x0C0 x080 x040 x00usrKernelInit()usrKernelInit()信息与软件工程学院功能:初始化内核可选组件处理过程处理过程:依次调用classLibInit()taskLibInit()taskHookInit()semBLibInit()semMLibInit()semCLibInit()semOLibInit()wdLibInit
23、()msgQLibInit()qInit()workQInit()KernelInit()KernelInit()信息与软件工程学院功能:初始化多任务环境,启动内核处理过程:激活intLockLevelSet() 设置分级中断管理使时间片round-robin方式无效 针对实时从内存池顶部创立中断堆栈、根堆栈、以及TCB调用- taskInit()- taskActivate()- .调用usrRoot()中断usrInit()的运行开中断本部分涉及EOS的初始化,将在后续章节中细化系统启动系统启动信息与软件工程学院系统启动的主要内容系统启动的主要内容信息与软件工程学院处理函数:usrRoot
24、(),初始化I/O系统、驱动器、设备,启动系统处理过程:内存清零:memInit (pMemPoolStart, memPoolSize);初始化MMU单元:usrMmuInit (); 时钟设置:sysClkConnect(),sysClkRateSet(),sysClkEnable ();I/O初始化:iosInit () ,限制了最多同时翻开设备数;字符设备设置:ttyDrv(),缺省为对控制台的调用;初始化构造、信号、消息等:excInit(),logInit(),sigInit()初始化管道等:pipeDrv(),stdioInit(),mathSoftInit()或mathHard
25、Init();初始化USB、SCSI、IDE、SATA、网络等设备接口;配置并初始化目的代理机:wdbConfig()启动内核板级支持包板级支持包BSP信息与软件工程学院BSP的概念的概念信息与软件工程学院嵌入式系统的根底部分,实现系统可移植性的关键负责上电时的硬件初始化、启动RTOS或应用程序的支持模块、提供底层硬件驱动提供上层软件提供访问底层硬件的手段驱动程序驱动程序信息与软件工程学院概念即设备驱动程序概念即设备驱动程序Device Driver,一种可以使计算机和设备通信的特殊程序,相当于硬件的接口。,一种可以使计算机和设备通信的特殊程序,相当于硬件的接口。作用上层操作只有通过这个接口,
26、才能控制硬件设备作用上层操作只有通过这个接口,才能控制硬件设备 “硬件和系统之间的桥梁。硬件和系统之间的桥梁。根本功能根本功能对设备初始化和释放。对设备初始化和释放。对设备进展管理。对设备进展管理。读取应用程序传送给设备文件的数据,并回送应用程序恳求的数据。读取应用程序传送给设备文件的数据,并回送应用程序恳求的数据。检测和处理设备出现的错误检测和处理设备出现的错误驱动程序的开发准备驱动程序的开发准备信息与软件工程学院理解硬件工作原理,包括处理器架构及工作原理、外设控制器的原理及接口理解硬件工作原理,包括处理器架构及工作原理、外设控制器的原理及接口datasheet。对裸机驱动程序就是一套与硬件
27、交互的函数库。对裸机驱动程序就是一套与硬件交互的函数库。基于基于OS还必须熟悉该还必须熟悉该OS对相关硬件的操作原理对相关硬件的操作原理驱动类别驱动类别字符设备以字节为单位顺序处理数据,不支持随机读写。如打印机、串口、显示器等字符设备以字节为单位顺序处理数据,不支持随机读写。如打印机、串口、显示器等块设备块设备I/O时数据处理以块为单位,采用缓冲,支持随机读写。如硬盘、光驱、盘等。时数据处理以块为单位,采用缓冲,支持随机读写。如硬盘、光驱、盘等。网络设备面向网络协议层,设备文件标识唯一,采用一套与数据包传输相关的函数。网络设备面向网络协议层,设备文件标识唯一,采用一套与数据包传输相关的函数。例
28、如:字符设备驱动程序运行过程例如:字符设备驱动程序运行过程信息与软件工程学院例如:例如:VC+VC+的串口通信的串口通信信息与软件工程学院VC的通信控制函数:的通信控制函数:SetCommPort:指定使用的串口,如:指定使用的串口,如COM1、COM2、.GetCommPort:获取当前使用的串口:获取当前使用的串口SetSettings:设置串口的参数,如:设置串口的参数,如9600,N,8,1GetSettings:获得串口参数:获得串口参数SetPortOpen:翻开或关闭串口:翻开或关闭串口SetInPutLen:一次读取输入缓冲区的字符数。:一次读取输入缓冲区的字符数。0时全部字符
29、。时全部字符。GetInBufferCount:输入缓冲区中承受到的字符数:输入缓冲区中承受到的字符数GetInPut:读取输入缓冲区:读取输入缓冲区GetOutBufferCount:输出缓冲区中待发送的字符数:输出缓冲区中待发送的字符数SetOutPut:写入输出缓冲区:写入输出缓冲区.例如:例如:VC+VC+的串口通信的串口通信2 2信息与软件工程学院利用控制函数的通信利用控制函数的通信:初始化:BOOL CMyDiaLog:OnInitDialog() 定时串口读写:void CMyDiaLog:OnTimer(UINT nIDEvent)BOOL CMyDiaLog:OnInitDi
30、alog() 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=new unsigned shortMESSAGELENGTH; OutBuffer.bstrVal=new unsigned shortMESSAGELENGTH; OutBuffer.vt=VT_
31、BSTR; return true; void CMyDiaLog:OnTimer(UINT nIDEvent) if (m_Com.GetInBufferCount()=MESSAGELENGTH) InBuffer=m_Com.GetInput(); / handle the InBuffer. ./ Fill the OutBuffer. .m_Com.SetOutput(OutBuffer); CDialog:OnTimer(nIDEvent); 例如:例如:VC+VC+的串口通信的串口通信3 3信息与软件工程学院直接用直接用VC+访问串口:使用的函数访问串口:使用的函数CreateF
32、ile:用指定的方式翻开指定的串口。:用指定的方式翻开指定的串口。 ReadFile:读取串口数据:读取串口数据WriteFile:向串口写数据:向串口写数据CloseHandle:关闭串口:关闭串口串口通信的驱动函数串口通信的驱动函数翻开串口:翻开串口:BOOL CSerial:Open( int nPort, int nBaud ) 缓冲中字符数:缓冲中字符数:int CSerial:InBufferCount( void )读数据:读数据:DWORD CSerial:ReadData( void *buffer, DWORD dwBytesRead) 写数据:写数据:DWORD CSer
33、ial:SendData( const char *buffer, DWORD dwBytesWritten) 例如:例如:VC+VC+的串口通信的串口通信4 4信息与软件工程学院DWORD CSerial:SendData( const char *buffer, DWORD dwBytesWritten) if( !m_bOpened | m_hComDev = NULL ) return( 0 ); BOOL bWriteStat; bWriteStat = WriteFile( m_hComDev, buffer, dwBytesWritten, &dwBytesWritten, &m_OverlappedWrite ); if( !bWriteStat) if ( GetLastError() = ERROR_IO_PENDING ) WaitForSingleObject( m_OverlappedWrite.hEvent, 1000 ); return dwBytesW
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- AI助力传统面塑文化数字化保护
- 2026国冶一局集团有限公司(中国冶金地质总局一局)招聘高等院校应届毕业生33人笔试历年难易错考点试卷带答案解析
- 2026四川爱联科技股份有限公司招聘10人笔试历年典型考点题库附带答案详解
- 2026四川九洲君合私募基金管理有限公司招聘风控总监等岗位7人笔试历年常考点试题专练附带答案详解
- 2026北京航标时代检测认证有限公司浙江分公司非事业编制人员招聘3人(浙江)笔试历年常考点试题专练附带答案详解
- 2026云南红河州弥勒市产业发展集团有限公司下属子公司弥勒建盛贸易有限公司职业经理人招聘1人笔试历年难易错考点试卷带答案解析
- 2026中船瑞利海洋信息与装备保障(海南)有限公司招聘笔试历年难易错考点试卷带答案解析
- 2026中国航空集团有限公司二〇二五拟接收落户高校毕业生情况笔试历年常考点试题专练附带答案详解
- 2026中国平煤神马控股集团高校毕业生招聘1317人笔试历年备考题库附带答案详解
- 2025重庆公路运输(集团)有限公司招聘55人笔试历年难易错考点试卷带答案解析
- 2025年上海市青浦区社区工作者招聘笔试试题及答案详解
- 2026江苏苏州工业园区苏相合作区管理委员会机关人员招聘9人模拟试卷含答案详解(夺分金卷)
- 2026年四川省内江市“五方面人员”中选拔乡镇领导班子成员考试综合试题及答案
- 2026年注册安全工程师完整复习题库(附答案)
- 医院议事决策制度
- 骨代谢疾病诊疗中国指南(2026 版)
- (期末复习)计算题 专项练习-2025-2026学年物理人教版 八年级下册
- 2026年首都机场招聘笔试试题及答案解析
- 中考英语感叹句综合练习100题(含答案)
- 水肿诊疗指南(2026年版)基层规范化鉴别
- 文化馆安全生产工作制度
评论
0/150
提交评论