版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、嵌入式操作系统嵌入式操作系统 Embedded Operating System 2016年2月 桑楠桑楠 信息与软件工程学院 1 第四部分第四部分 信息与软件工程学院2 嵌入式软件 核心内容核心内容 嵌入式软件系统及其开发 嵌入式软件的运行过程 系统引导 设备驱动 嵌入式系统的快速启动 信息与软件工程学院3 嵌入式软件系统嵌入式软件系统 基础基础 信息与软件工程学院4 基本概念基本概念 信息与软件工程学院5 软件算法 + 数据结构 + 文档;软件即服务 实时软件Reaitime Software,RTS 嵌入式软件Embedded Software,ES 板级支持包Board Support
2、 Package,BSP 启动加载Bootloader 驱动程序Driver 嵌入式软件的生命期嵌入式软件的生命期 信息与软件工程学院6 嵌入式软件分类嵌入式软件分类 信息与软件工程学院7 嵌入式软件的特点嵌入式软件的特点 信息与软件工程学院8 实时性环境特定;快速启动 异步事件的并发处理 多任务;随机性 应用操作系统一体化 VxWorks; Linux 应用固化不可修改性 实用性面向行业;定向开发 适用性可裁减,适应应用 鲁棒性容错 够用即可成本、资源 可信性安全、防危、可靠等 嵌入式实时软件的关注点嵌入式实时软件的关注点 信息与软件工程学院9 任务的实时性 时间特性强调计算状态的时间边界和
3、 它们之间的关系 时间表达基于时间点、基于时间间歇 (开始、终止) 时间约束在满足了所有启动条件后, 对一个可执行对象开始执行和必须终止的 约束:start、dealine 多任务软件系统的关注点多任务软件系统的关注点 信息与软件工程学院10 并发任务之间的协作关系 互斥问题 同步问题 信息隐藏 任务之间、模块之间接口 消除全局变量 理解理解 嵌入式系统开发嵌入式系统开发 信息与软件工程学院11 观点观点 产品开发产品开发 信息与软件工程学院12 l内容:涉及H/W和S/W的复杂系统开发 l特征:开发一个ES,相当于开发一台计算机 需要开发硬件系统H/W 对所开发硬件,需要开发/配置相应的驱动
4、程序 需要提供系统引导程序Bootload 可能需要配置RTOS 需要针对应用领域,采用专用的RTOS并进一步优 化 最后:开发特定领域的嵌入式应用软件 开发方式及开发环境开发方式及开发环境 信息与软件工程学院13 l开发方式:交叉开发 l开发环境: 网口 串口 USB 无线 嵌入式软件嵌入式软件 运行过程运行过程 信息与软件工程学院14 运行过程示意图运行过程示意图 信息与软件工程学院15 上电复位上电复位 系统升级系统升级引导引导/升级系统升级系统 系统初始化系统初始化 应用初始化应用初始化 多任务应用多任务应用 板级初始化板级初始化 远程升级远程升级 本地升级本地升级 基于多任务操作系统
5、基于多任务操作系统的嵌入的嵌入 式软件的主要运行流程式软件的主要运行流程 该运行流程主要分为该运行流程主要分为5个阶段个阶段 运行过程运行过程 板级初始化板级初始化 信息与软件工程学院16 顺序顺序:上电复位后,开始板级初始化 特性特性:完全的硬件相关,一般采用汇编语言实现 核心内容核心内容:不同系统有所差异,但必须完成 CPU中堆栈指针寄存器的初始化。 BSS段(Block Storage Space)的初始化。 CPU芯片级的初始化:中断控制器、内存 等的初始化。 运行过程运行过程 系统引导系统引导 信息与软件工程学院17 选择:选择:根据需要分别进入系统软件引导阶段或系统升级根据需要分别
6、进入系统软件引导阶段或系统升级 阶段阶段 测试通信端口数据或判断特定开关测试通信端口数据或判断特定开关 系统引导阶段系统引导阶段: RAM启动启动系统软件从NorFlash中读出并加载到RAM中运行: 运行速度较快运行速度较快;软件可压缩存储在Flash中 NorFlash启动启动系统软件直接在NorFlash上运行 外存启动外存启动软件中读取出来加载到RAM中运行:成本低 系统升级阶段系统升级阶段: 远程升级远程升级:通过网络;支持TFTP、FTP、HTTP等方式 本地升级本地升级:使用超级终端或特定的升级软件进行。 运行过程运行过程 系统初始化系统初始化 信息与软件工程学院18 操作系统等
7、系统软件运行必需的初始化工作,操作系统等系统软件运行必需的初始化工作,如如 根据系统配置根据系统配置 初始化数据空间 初始化系统所需的接口和外设 . 需要按特定顺序进行需要按特定顺序进行 首先完成内核的初始化 完成网络、文件系统等的初始化 最后完成中间件等的初始化工作 运行过程运行过程 应用初始化应用初始化 信息与软件工程学院19 应用软件运行必需的初始化工作,如应用软件运行必需的初始化工作,如 应用任务的创建 信号量的创建 消息队列的创建 应用相关的其它初始化 . 运行过程运行过程 多任务系统运行多任务系统运行 信息与软件工程学院20 系统进入多任务状态系统进入多任务状态 操作系统按照已确定
8、的算法进行任 务的调度 各应用任务分别完成特定的功能 运行过程运行过程 程序代码示意程序代码示意 信息与软件工程学院21 RomStart() SysInit()UsrInit() UsrKernelInit() KernelInit()UsrRoot() RomInit() BootLoad() 板级初始化 系统初始化 运行过程运行过程 函数函数 信息与软件工程学院22 RomInit():romInit.s,上电初始化,上电初始化 RomStart():bootInit.c,程序代码调入,程序代码调入RAM启动执行启动执行 SysInit():sysALib.s,类似,类似romInit.
9、s,但不再初始化,但不再初始化SDRAM UserInit():bootConfig.c,启动操作系统内核必须的初始化,启动操作系统内核必须的初始化,C代码代码 BootLoad():bootConfig.c,加载操作系统映像(,加载操作系统映像(vxWorks) UsrKernelInit():usrKernel.c,初始化内核可选组件,初始化内核可选组件 KernelInit():usrKernel.c,初始化多任务环境,启动内核,初始化多任务环境,启动内核 usrRoot(): usrConfig.c,产生,产生usrRoot根任务,初始化根任务,初始化I/O系统、驱系统、驱 动器、设备
10、等动器、设备等 VxWorks 启动过程启动过程 信息与软件工程学院23 RTOS的引导模式的引导模式 信息与软件工程学院24 需要Boot Loader的引导模式采用高性能RAM 的系统;由于RAM空间的限制 不需要Boot Loader的引导模式对需要快速 启动的系统;时间效率要求较高,空间限制 较少。 - 方法:直接在NorFlash或ROM等非易失性 主存介质中运行,启动速度快 基本启动过程基本启动过程 信息与软件工程学院25 示例:示例:ROMROM中引导中引导VxWorksVxWorks 信息与软件工程学院26 示例:示例:ROMROM中引导中引导VxWorksVxWorks(2)
11、 信息与软件工程学院27 存储运行模式存储运行模式写入ROM中的VxWorks是非 压缩的,不需要解压,系统直接跳到ROM的 首地址,运行VxWorks 原因原因VxWorks在ROM中运行主要是为了节 省RAM空间,使应用程序有更大的空间运行 优缺点优缺点ROM中运行的VxWorks优点是启 动速度快,缺点是运行速度慢 示例:示例:R RAM M中引导中引导VxWorksVxWorks 信息与软件工程学院28 可装入映像 的入口程序: 功能类似于 romInit 示例:示例:R RAM M中引导中引导VxWorksVxWorks(2) 信息与软件工程学院29 存储运行模式存储运行模式 写入R
12、OM或Flash中的 BootROM Image或VxWorks Image是压缩的,需 要先拷贝、解压所有的text和data到RAM的 RAM_LOW_ADRS中,然后运行VxWorks 优缺点优缺点RAM中运行的VxWorks优点是运行 速度快,但启动速度偏慢 板级初始化板级初始化 信息与软件工程学院30 板级初始化(板级初始化(Boot)的主要内容)的主要内容 信息与软件工程学院31 处理函数:romInit(),上电后执行的第一个函数 处理过程处理过程:以vxWorks为例 关中断 设置哑堆栈(dummy stack) 保存启动类型(冷启动和热启动)到堆栈上 清Cache 初始化CP
13、U内的寄存器 硬件初始化,主要是初始化SDRAM接口 调用romStart() romInit()示例示例 信息与软件工程学院32 / 定义等 cli/* 关中断 */ movl SP_ARG1(%esp),%ebx/* esp+SP_ARG1的值给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
14、/* move EAX to CR0 */ jmpromInit1/* 跳转到romInit1 */ . /* 初始化 DS, ES, FS, GS, SS段寄存器 */ romInit1: mov$0 x0010,%eax/* set data segment 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
15、operand */ mov$ ROM_STACK,%esp /* set lower mem stack pointer */ 关中断:关中断:clicli 信息与软件工程学院33 ResetHandler: MRS r0, CPSR ORR r0, r0, #(PSR_I_BIT|PSR_F_BIT) MSR CPSR_c, r0 Disable IRQ /* If cold booting, clear memory to avoid parity errors */ #ifdef ROMSTART_BOOT_CLEAR if (startType #endif /* jump to t
16、he entry */ sysInit (startType); #endif /* ROM_RESIDENT */ 这里可直接 调用usrInit sysHwInit()sysHwInit() 信息与软件工程学院37 功能:硬件初始化 处理过程处理过程: 调用sysMemMapDetect()检测存储映射配置,相关 全局变量赋值 记录物理存储区的长度,计算sysPhysMemDesc的 入口数 调用pciInit()初始化PCI接口 配置CPLD内的寄存器 初始化EPIC、DMA等的相关寄存器的基本地址 调用sysEpicInit()完成EPIC(段控制器)初始化 调用sysSerialHw
17、Init()初始化串口 调用sysNetHwInit()初始化网络接口 串口初始化串口初始化 信息与软件工程学院38 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, 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
18、speed to 38400bps 8 bits, 1 stop bit, no parity, fifo enabled Enable UART 系统初始化系统初始化 信息与软件工程学院39 系统初始化的主要内容系统初始化的主要内容 信息与软件工程学院40 处理函数:sysInit(),依赖特定系统的汇编代码模块,类 似romInit()(不处理RAM) 处理过程处理过程: 关中断 无效Cache 初始化处理器的寄存器,包括C堆栈指针 清除所有悬置的中断 跳转到usrInit() 用户初始化用户初始化 信息与软件工程学院41 用户初始化的主要内容用户初始化的主要内容 信息与软件工程学院42
19、处理函数:usrInit(),VxWorks下的第一个C程序 处理过程处理过程: 无效Cache BSS段清0 保存启动类型 调用函数intVecBaseSet()设置中断向量表基本地址 调用sysHwInit()初始化硬件到静止状态:设备复位 并禁止其产生中断 调用usrKernelInit(),选择适当的初始化函数完成初 始化 调用kernelInit(),初始化多任务环境 中断向量表初始设置:中断向量表初始设置:VecBaseSet() 信息与软件工程学院43 FIQ IRQ (Reserved) Data Abort Prefetch Abort Software Interrupt
20、Undefined Instruction Reset 0 x1C 0 x18 0 x14 0 x10 0 x0C 0 x08 0 x04 0 x00 usrKernelInit()usrKernelInit() 信息与软件工程学院44 功能:初始化内核可选组件 处理过程处理过程:依次调用 classLibInit() taskLibInit() taskHookInit() semBLibInit() semMLibInit() semCLibInit() semOLibInit() wdLibInit() msgQLibInit() qInit() workQInit() KernelIn
21、it()KernelInit() 信息与软件工程学院45 功能:初始化多任务环境,启动内核 处理过程处理过程: 激活intLockLevelSet() 设置分级中断管理 使时间片(round-robin)方式无效 针对实时针对实时 从内存池顶部创建中断堆栈、根堆栈、以及TCB 调用 - taskInit() - taskActivate() - . 调用usrRoot() 中断usrInit()的运行 开中断 本部分涉及EOS的 初始化,将在后续 章节中细化 系统启动系统启动 信息与软件工程学院46 系统启动的主要内容系统启动的主要内容 信息与软件工程学院47 处理函数:usrRoot(),初
22、始化I/O系统、驱动器、设备, 启动系统 处理过程处理过程: 内存清零:memInit (pMemPoolStart, memPoolSize); 初始化MMU单元:usrMmuInit (); 时钟设置:sysClkConnect(),sysClkRateSet(),sysClkEnable (); I/O初始化:iosInit () ,限制了最多同时打开设备数; 字符设备设置:ttyDrv(),缺省为对控制台的调用; 初始化结构、信号、消息等:excInit(),logInit(),sigInit() 初始化管道等:pipeDrv(),stdioInit(),mathSoftInit()或
23、mathHardInit(); 初始化USB、SCSI、IDE、SATA、网络等设备接口; 配置并初始化目标代理机:wdbConfig() 启动内核 板级支持包板级支持包 BSP 信息与软件工程学院48 BSP的概念的概念 信息与软件工程学院49 嵌入式系统的基础部分,实现系统可移植性的关键 负责负责 上电时的硬件初始化、启动RTOS或应用程序的支持模块、 提供底层硬件驱动 提供上层软件提供访问底层硬件的手段 Drivers 驱动程序 驱动程序驱动程序 信息与软件工程学院50 概念概念即设备驱动程序(Device Driver),一种可以使 计算机和设备通信的特殊程序,相当于硬件的接口。 作用
24、作用上层操作只有通过这个接口,才能控制硬件设 备 “硬件和系统之间的桥梁”。 基本功能基本功能 对设备初始化和释放。 对设备进行管理。 读取应用程序传送给设备文件的数据,并回送应 用程序请求的数据。 检测和处理设备出现的错误 驱动程序的开发准备驱动程序的开发准备 信息与软件工程学院51 了解了解硬件工作原理,包括处理器架构及工作原理、外 设控制器的原理及接口(datasheet)。 对裸机对裸机驱动程序就是一套与硬件交互的函数库。 基于基于OS还必须还必须熟悉该OS对相关硬件的操作原理 驱动类别驱动类别 字符设备字符设备以字节为单位顺序处理数据,不支持随机读写。 如打印机、串口、显示器等 块设
25、备块设备I/O时数据处理以块为单位,采用缓冲,支持随机 读写。如硬盘、光驱、盘等。 网络设备网络设备面向网络协议层,设备文件标识唯一,采用一 套与数据包传输相关的函数。 示例:字符设备驱动程序运行过程示例:字符设备驱动程序运行过程 信息与软件工程学院52 示例:示例:VC+的串口通信的串口通信 信息与软件工程学院53 VC的通信控制函数的通信控制函数: SetCommPort:指定使用的串口,如COM1、COM2、. GetCommPort:获取当前使用的串口 SetSettings:设置串口的参数,如9600,N,8,1 GetSettings:取得串口参数 SetPortOpen:打开或关
26、闭串口 SetInPutLen:一次读取输入缓冲区的字符数。0时全部字符。 GetInBufferCount:输入缓冲区中接受到的字符数 GetInPut:读取输入缓冲区 GetOutBufferCount:输出缓冲区中待发送的字符数 SetOutPut:写入输出缓冲区 . 示例:示例:VC+的串口通信(的串口通信(2) 信息与软件工程学院54 利用控制函数的通信利用控制函数的通信: 初始化:BOOL CMyDiaLog:OnInitDialog() 定时串口读写:void CMyDiaLog:OnTimer(UINT nIDEvent) BOOL CMyDiaLog:OnInitDialog
27、() 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_BSTR
28、; 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+的串口通信(的串口通信(3) 信息与软件工程学院55 直接用直接用VC+访问串口访问串口:使用的函数 CreateFile:用
29、指定的方式打开指定的串口。 ReadFile:读取串口数据 WriteFile:向串口写数据 CloseHandle:关闭串口 串口通信的驱动函数串口通信的驱动函数 打开串口:BOOL CSerial:Open( int nPort, int nBaud ) 缓冲中字符数:int CSerial:InBufferCount( void ) 读数据:DWORD CSerial:ReadData( void *buffer, DWORD dwBytesRead) 写数据:DWORD CSerial:SendData( const char *buffer, DWORD dwBytesWritten) 示例:示例:VC+的串口通信(的串口通信(4) 信息与软件工程学院56 DWORD CSerial:SendData( const c
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年人格阴暗面测试题及答案
- 2026年护理理论培训测试题及答案
- 2025危化品泄漏应急处置持证上岗培训教案 考证专用
- 2022年党群宣传岗面试押题汇编及逐字稿答案完整版
- 2026年冬季安全生产措施测试题及答案
- 2026年滑雪五级理论考试一次上岸专属习题集附答案
- 黑龙江哈尔滨市萧红中学校七年级(下)2026年3月份教与学质量监测道德与法治(含解析)
- 膀胱癌患者护理
- 实习的安全协议书
- 夫妻签订结婚协议书有效
- 幼儿园年度业务活动开展情况总结
- 家装渠道合同协议书
- (高清版)JT∕T 1402-2022 交通运输行政执法基础装备配备及技术要求
- HG-T 2521-2022 工业硅溶胶介绍
- JTT495-2014 公路交通安全设施质量检验抽样方法
- 初中数学基于核心素养导向的大单元教学设计(共50张)
- 从班会课到成长课程德育教师的班会课微革命
- 《诚实守信,立身之本》主题班会课件
- 王力语言学史(三)
- 干制食用菌HACCP计划
- 熄焦塔脚手架专项工程施工方案
评论
0/150
提交评论