嵌入式操作系统原理与设计实现 全套课件 第1-8章 绪论、嵌入式系统硬件与操作系统 -内存和IO管理_第1页
嵌入式操作系统原理与设计实现 全套课件 第1-8章 绪论、嵌入式系统硬件与操作系统 -内存和IO管理_第2页
嵌入式操作系统原理与设计实现 全套课件 第1-8章 绪论、嵌入式系统硬件与操作系统 -内存和IO管理_第3页
嵌入式操作系统原理与设计实现 全套课件 第1-8章 绪论、嵌入式系统硬件与操作系统 -内存和IO管理_第4页
嵌入式操作系统原理与设计实现 全套课件 第1-8章 绪论、嵌入式系统硬件与操作系统 -内存和IO管理_第5页
已阅读5页,还剩478页未读 继续免费阅读

下载本文档

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

文档简介

第一章嵌入式操作系统导论【概述】【嵌入式操作系统的演变】【嵌入式操作系统分类】【嵌入式操作系统的组成】【嵌入式操作系统体系结构】【嵌入式操作系统编写原则】第一节概述

位置内核文件网络EOS

嵌入式操作系统可以统称为应用在嵌入式系统的操作系统,它具有一般操作系统的功能,同时具有嵌入式软件的特点,主要有:可固化可配置、可剪裁独立的板级支持包,可修改不同的CPU有不同的版本应用的开发需要有集成的交叉开发工具定义概述近十年来,嵌入式操作系统得到飞速的发展从支持8位微处理器到16位、32位甚至64位微处理器;从支持单一品种的微处理器芯片到支持多品种微处理器芯片;从只有内核到除了内核外还提供其他功能模块,如文件系统,TCP/IP网络系统,窗口图形系统等。随着嵌入式系统应用领域的扩展,目前嵌入式操作系统的市场在不断细分,出现了针对不同领域的产品,这些产品按领域的要求和标准提供特定的功能。嵌入式操作系统与通用操作系统的区别地址空间的区别进程地址保护内存管理上的区别虚拟内存应用方式上的区别安装第二节演变嵌入式操作系统的演变

在嵌入式系统的发展过程中,从操作系统的角度来看,大致经历了以下及几个阶段:无操作系统阶段简单操作系统阶段实时操作系统阶段面向Internet的阶段嵌入式操作系统的演变*PercentoftotalsoftwaresuppliedbyRTOSvendorinatypicalembeddeddevice10%*Kernel30%*KernelNetworkingFileSystem75%*KernelNetworkingFileSystemMultiprocessingMemoryManagementNetworkingUtilityWindowsAPIApplicationApplicationApplicationApplication90%*KernelNetworkingFileSystemMultiprocessingFaultToleranceDistributedObjectsAdvancedNetworkingAdvancedInterconnectJavaBrowser/GUI第三节分类嵌入式操作系统分类从应用领域来分:面向信息家电的嵌入式操作系统面向智能手机的嵌入式操作系统,如SymbianOS、MSMobileOS、PalmOS、EmbeddedLinux等面向汽车电子的嵌入式操作系统面向工业控制的嵌入式操作系统

……….嵌入式操作系统分类从实时性的角度来看,嵌入式操作系统可分为嵌入式实时操作系统:具有强实时特点,如VxWorks、QNX、Nuclear、OSE、DeltaOS、各种ITRONOS等。非实时嵌入式操作系统:一般只具有弱实时特点,如WinCE、版本众多的嵌入式Linux、PalmOS等。嵌入式操作系统分类从嵌入式系统的商业模式来分类,可以分为商用型和开源型。商用型:功能稳定、可靠,有完善的技术支持和售后服务,开发费用+版税。开源型:开放源码,只收服务费,没有版税。如Embeddedlinux,RTEMS,eCOS。第四节组成嵌入式操作系统的组成嵌入式操作系统一般由内核、嵌入式TCP/IP网络系统、嵌入式文件系统等组成。内核

内核是嵌入式操作系统的基础,也是必备的部分。它提供任务管理、内存管理、通信、同步与互斥机制、中断管理、时间管理及任务扩展等功能。内核还提供特定的应用编程接口,但目前没有统一的标准。内核任务管理内核,具有任务调度、创建任务、删除任务、挂起任务、解挂任务、设置任务优先级等功能。调度,多采用基于静态优先级的可抢占的调度,任务优先级是在运行前通过某种策略静态分配好的,一旦有优先级更高的任务就绪就马上进行调度。内存管理简单采用静态内存分配和动态内存分配(固定大小内存分配和可变大小内存分配)相结合的管理方式有些内核利用MMU机制提供内存保护功能内核通信、同步和互斥机制任务间、任务与中断处理程序间交互一般包括信号量、消息、事件、管道、异步信号和共享内存等功能。内核中断管理:安装中断服务程序中断发生时,对中断现场进行保存,并且转到相应的服务程序上执行中断退出前,对中断现场进行恢复、中断栈切换、中断退出时的任务调度内核时间管理提供高精度、应用可设置的系统时钟,该时钟是嵌入式系统的时基,可设置为十毫秒以下。提供其他时间功能,包括日历时间,负责与时间相关的任务管理工作如任务对资源有限等待的计时、时间片轮转调度等,提供软定时器的管理功能等。内核任务扩展功能任务扩展功能就是在内核中设置一些Hook的调用点,在这些调用点上内核调用应用设置的、应用自己编写的扩展处理程序,以扩展内核的有关功能。Hook调用点有任务创建、任务切换、任务删除、出错处理等。内核嵌入式TCP/IPTCP/IP协议已经广泛地应用于嵌入式系统中嵌入式TCP/IP网络系统提供符合TCP/IP协议标准的协议栈,提供Socket编程接口。Socket接口UDP协议TCP协议IP协议ICMP/IGMP协议

网络接口层

ARP/PPP协议

以太网驱动

异步串口驱动物理设备应用程序/应用协议嵌入式TCP/IP网络系统具有以下的特点:可剪裁:能根据嵌入式系统的功能的要求选择所需的协议,对完整的TCP/IP协议簇进行剪裁,以满足用户的需要。采用“零拷贝”(ZeroCopy)技术,提高实时性所谓“零拷贝”技术,是指TCP/IP协议栈没有用于各层间数据传递的缓冲区,协议栈各层间传递的都是数据指针,只有当数据最终要被驱动程序发送出去或是被应用程序取走时,才进行真正的数据搬移。嵌入式TCP/IP采用静态分配技术 在网络初始化时就静态分配通信缓冲区,设置了专门的发送和接收缓冲(其大小一般小于或等于物理网络上的MTU值),从而确保了每次发送或接收时处理的数据不会超过MTU值,也就避免了数据处理任务的阻塞等待。嵌入式TCP/IP嵌入式文件系统通用操作系统的文件系统通常具有以下功能:提供用户对文件操作的命令提供用户共享文件的机制管理文件的存储介质提供文件的存取控制机制,保障文件及文件系统的安全性提供文件及文件系统的备份和恢复功能提供对文件的加密和解密功能嵌入式文件系统嵌入式文件系统相比之下较为简单,主要具有文件的存储、检索、更新等功能,一般不提供保护和加密等安全机制。它以系统调用和命令方式提供对文件的各种操作,主要有:设置和修改对文件和目录的存取权限提供建立、修改、改变、删除目录等服务提供创建、打开、读、写、关闭、撤消文件等服务第五节体系结构第五节体系结构程序结构循环轮询系统initialize()while(true){ if(condition_1)action_1(); if(condition_2)action_2();

if(condition_n)acition_n();}CheckforInputDoSomeWork前后台系统ISR3初始化处理1事件1处理2事件2NYYNISR1ISR2前台处理后台处理32流程并发多任务::::::后台前台ISRsTasks单处理器多任务系统第五节体系结构程序和层次结构CyclicExecutiveKernelModeDeviceDriversNetworkDriversHardwareI/OServicesTCP/IPStackApplicationApplicationApplicationMonolithicKernelUserMode(protected)KernelModeFilesystemsDeviceDriversNetworkDriversHardwareI/OManagersGraphicsSubsystemGraphicsDriversOther….ApplicationApplicationApplicationHardwareInterfaceLayerHardwareMicrokernelUserMode(protected)KernelModeDeviceDriversNetworkDriversHardwareFilesystemManagerGraphicsDriversApplicationApplicationApplicationFilesystemDriversDeviceManagerPhotonNetworkManagerKernel(tiny)Android第六节主流系统39Linux类(ulinux,RTLinux)HardwareResourceKernelLinuxKernelLinuxProcessLinuxProcessLinuxProcessLKM性能比较PalmOSWinCEAndroidUcos2eCosVxworks40OSVxWorksµC/OS-IIRT-LinuxQNX6供应商WindRiverMicriumFSMlabsQuanturm硬件平台MC6800080486/33MHz80486/60MHz80486/33MHz任务切换3.8微秒﹤9微秒不详12.57微秒中断响应﹤3微秒﹤7.5微秒25微秒7.54微秒第七节编写原则42第一步:必须明确目标定义一个硬件抽象(Defineabstractions)提供基本操作(Provideprimitiveoperations)保证隔离(Ensureisolation)管理硬件(Managethehardware)43第二步:了解编写操作系统的难点功能全面,安装时间短必须解决并行性,而资源的竞争、死锁等面对一些恶意用户,比如想偷别人的文件等。能分享资源。操作系统的生命周期非常长操作系统的设计往往面临一些新事物的挑战,比如window,unix最初都没有设计email支持。对硬件兼容兼容以前的系统。44第三步:了解编写基本原则原则1简单。原则2完整。原则3效率。第四步:从接口设计开始操作系统必须为硬件和用户提供一些处理数据结构和硬件操作的接口。尤其为一些用户要开放权利,让其可以插入自己的驱动。45第五步:明确体系结构第五步明确自己要采用的体系结构46作业根据操作系统编写方法来完成擦玻璃机器人的操作系统软件架构感谢观看嵌入式系统举例简单嵌入式系统数据及软硬件位置传感器模拟电路位置0-2cm电阻0-20欧AD硬件电压0-3V时钟硬件ADC驱动采样0-1023时钟ISR采样0-1023OLED驱动对应到0-2OLED显示器字符0.00-2.00cmEOS程序调用图mainTimerISRTimer驱动ADC驱动OLED驱动Timer硬件ADC硬件OLED硬件嵌入式操作系统放在哪里?A.内存B.

FlashC.

ROMD.RAME.其他第二章

嵌入式硬件系统微处理器的主要内容基本组成基本处理核存储器BUSI/O第一节

基本组成57585960乘法器指令解码地址自增器nRESETnMREQSEQABORTnIRQnFIQnRWMAS[1:0]LOCKnCPICPACPBnWAITMCLKnOPCBIGENDISYNCnTRANSnM[4:0]D[31:0]桶移位器32位ALUDBE写数据寄存器读数据寄存器地址寄存器寄存器BankA[31:0]ABE及控制逻辑PCUpdate解码站指令解压缩IncrementerPCABusBBusALUBusARM7TDMI内核4位ALU逻辑图(P22)ALU功能表-能执行16种算术、16种逻辑运算(P22)。加:算术加+:逻辑加(或)几个概念之间的联系输入输出模块组合逻辑:ALU时序逻辑:寄存器同步电路:大量寄存器同步电路时序分析BUS协议时钟上升沿触发存储ARM7TDMIARM7TDMI内核MCLKnIRQnFIQnRESETBUSENBIGENDISYNCnWAITVDDVSSAPEDBE协处理器接口存储器管理存储器接口ABORTnOPCCPBCPAnCPInTRANSnM[4:0]MAS[1:0]nRWnMREQLOCKSEQnENOUTA[31:0]DOUT[31:0]DIN[31:0]D[31:0]电源总线控制时钟配置中断内核信号ARM7TDMIARM7TDMI内核TAP

控制器JTAG接口数据总线控制信号地址总线BUSSplitterEmbeddedICE逻辑方框图

嵌入式系统的硬件是以嵌入式微处理器为核心,主要由嵌入式微处理器、总线、存储器、输入/输出接口和设备组成。嵌入式微处理器总线存储器输入/输出接口和设备第二节

嵌入式微处理器嵌入式微处理器的分类嵌入式微处理器的特点主流的嵌入式微处理器X86ARMMIPS嵌入式微处理器的集成度单芯片方式:三星44B0X芯片的内部结构嵌入式微处理器的集成度芯片组方式:两芯片组的手持PC方案§Industrystandard,proventechnology§Costeffective,power-efficientperformanceARMv4嵌入处理器的技术路线ARMv7-CortexARM966E-SSC200ARM7EJ-SSC100ARM7TDMI(S)ARM1156T2(F)-SARMv6

ARM1026EJ-S§Leadershipsoftware compatibility§Widestchoiceof embeddedOS

ARMv5

ARM968E-SARM946E-SSC300

Cortex-M119Cortex-M3Cortex-R4Cortex-R4FCortex-M3内核:乘法器指令解码地址自增器nRESETnMREQSEQABORTnIRQnFIQnRWMAS[1:0]LOCKnCPICPACPBnWAITMCLKnOPCBIGENDISYNCnTRANSnM[4:0]D[31:0]桶移位器32位ALUDBE写数据寄存器读数据寄存器地址寄存器寄存器BankA[31:0]ABE及控制逻辑PCUpdate解码站指令解压缩IncrementerPCABusBBusALUBusARM7TDMI内核76ARM7TDMI指令流水线

操作周期 1 2 3 4 56ADDSUBMOVANDORREORCMPRSBFetchDecode。ExecuteFetchDecodeExecuteFetchDecodeExecuteFetchDecodeExecuteFetchDecodeExecuteDecodeExecuteFetchDecodeFetchFetch最佳流水线

该例中用6个时钟周期执行了6条指令

所有的操作都在寄存器中(单周期执行)

指令周期数(CPI)=1ARM7TDMIARM7TDMI内核地址地址数据读AMBA

接口写缓冲MMU数据写数据ARM7xxT控制逻辑CacheAMBA总线接口JTAG和非AMBA信号CP15带Cache的ARM7TDMI

ARM710T8K统一的cache完整的内存管理单元(MMU),支持虚拟地址和存储器保护写缓冲ARM720T同ARM710T,但支持WinCEARM740T8K统一的cache内存管理单元写缓冲ARM9TDMIInstructionFetchShift+ALUMemoryAccessRegWriteRegReadRegDecodeFETCHDECODEEXECUTEMEMORYWRITEARM9TDMIARMorThumb

InstDecodeRegSelectRegReadShiftALURegWriteThumb®ARM

decompressARMdecodeInstructionFetchFETCHDECODEEXECUTEARM7TDMI流水线ARM9TDMIARM9TDMIDCacheICacheMMUGLUE外部存储器ARM940T2x4KcachesMPU写缓冲ARM9xxTARM920T2x16KcachesMMU支持虚拟地址和内存保护写缓冲带Cache的ARM9TDMI

ARM9TDMI流水线的对比

MIPS:简介MIPS是世界上很流行的一种RISC处理器。MIPS的意思是“无互锁流水级的微处理器”(Microprocessorwithoutinterlockedpipedstages)。其机制是尽量利用软件办法避免流水线中的数据相关问题。MIPS处理器是由斯坦福(Stanford)大学JohnHennery教授领导的研究小组研制出来的。PresidentofStanfordUniversity,USAComputerarchitecturebookuseMIPSasfoundationMIPS:指令体系MIPS指令集体系ISA(MIPSInstructionSetArchitecture)从最早的MIPSIISA开始发展,到MIPSVISA,再到现在的MIPS32和MIPS64结构,其所有版本都是与前一个版本兼容的。在MIPSIII的ISA中,增加了64位整数和64位地址。在MIPSIV和MIPSV的ISA中增加了浮点数的操作等。OS层面学习微处理器关注寄存器关注指令集关注总线协议关注流水线ARM寄存器介绍ARM是三地址指令格式,指令的基本格式如下:ARM指令集——基本指令格式<opcode>{<cond>}{S}<Rd>,<Rn>{,<operand2>}

其中<>号内的项是必须的,{}号内的项是可选的。各项的说明如下:opcode:指令助记符; cond:执行条件;S:是否影响CPSR寄存器的值;Rd:目标寄存器; Rn:第1个操作数的寄存器;operand2:第2个操作数;指令语法目标寄存器(Rd)源寄存器1(Rn)源寄存器2(Rm)ADDr3,r1,r2r3r1r2例:ARM指令的一般编码格式第三节

总线概述AMBA总线PCI总线CPCI总线概述总线是CPU与存储器和设备通信的机制,是计算机各部件之间传送数据、地址和控制信息的公共通道。总线分类:按相对于CPU位置划分:片内总线或内部总线:连接CPU内部各主要功能部件片外总线:CPU与存储器(RAM和ROM)和I/O接口之间进行信息交换的通道按功能和信号类型:数据总线Dbus;地址总线Abus;控制总线Cbus;概述总线的主要参数总线宽度:又称总线位宽,指的是总线能同时传送数据的位数。如16位总线就是具有16位数据传送能力。总线频率:总线工作速度的一个重要参数,工作频率越高,速度越快。通常用MHz表示。总线带宽:又称总线的数据传送率,是指在一定时间内总线上可传送的数据总量,用每秒最大传送数据量来衡量。总线带宽越宽,传输率越高总线带宽=(总线宽度/8)X总线频率带宽单位:MB/s;如:总线宽度32位,频率66MHZ,则总线带宽=(32位/8位)*66MHZ=264MB/s概述一个微处理器系统可能含有多条总线高速设备可以连到高速总线上。低速设备可以连到低速总线上。桥:总线互联的电路。原因:数据宽度:高速总线通常提供较宽的数据连接。成本:高速总线通常采用更昂贵的电路和连接器。桥允许总线独立操作,这样在I/O操作中可提供某些并行性。概述存储器高速设备CPU低速设备低速设备桥高速总线低速总线多总线系统概述Processor-localbusMicro-processorCacheMemorycontrollerDMAcontrollerBridgePeripheralPeripheralPeripheralPeripheralbus嵌入式系统总线AMBA总线AMBA(AdvancedMicrocontrollerBusArchitecture)是ARM公司研发的一种总线规范,目前为3.0版本。在AMBA总线规范中,定义了3种总线:AHB(AdvancedHigh-performanceBus):用于高性能系统模块的连接,支持突发模式数据传输和事务分割;可以有效地连接处理器、片上和片外存储器,支持流水线操作。ASB(AdvancedSystemBus):也用于高性能系统模块的连接,由AHB总线替代;APB(AdvancedPeripheralBus):用于较低性能外设的简单连接,一般是接在AHB或ASB系统总线上的第二级总线。AMBA总线外部总线APB系统总线AHB测试接口ARMCPUSDRAMControlSRAMLCDControl桥并行接口串行接口TimerUART基于AMBA总线的典型系统PCI总线:发展历程最早的PC总线是IBM公司1981年在PC/XT电脑采用的系统总线,它基于8bit的8088处理器,被称为PC总线或者PC/XT总线。在1984年的时候,IBM推出基于16-bitIntel80286处理器的PC/AT电脑,系统总线也相应地扩展为16bit,并被称呼为PC/AT总线。而为了开发与IBMPC兼容的外围设备,行业内便逐渐确立了以IBMPC总线规范为基础的ISA(工业标准架构:IndustryStandardArchitecture)总线。PCI总线:特点与ISA总线不同,PCI总线的地址总线与数据总线是分时复用的,支持即插即用(PlugandPlay)、中断共享等功能。分时复用的好处是一方面可以节省接插件的管脚数,另一方面便于实现突发数据传输。PCI总线:特点数据传输时,由一个PCI设备做发起者(主控、Initiator或Master),而另一个PCI设备做目标(从设备、Target或Slave)。总线上所有时序的产生与控制都由Master来发起。PCI总线在同一时刻只能供一对设备完成传输,这就要求有一个仲裁机构,来决定谁有权拿到总线的主控权。PCI总线:信号定义

32位PCI系统的管脚按功能来分有以下几类:系统控制CLK:PCI时钟,上升沿有效;RST:Reset信号传输控制FRAME#:标志传输开始与结束IRDY#:Master可以传输数据的标志DEVSEL#:当Slave发现自己被寻址时设置低电平应答TRDY#:Slave可以传输数据的标志STOP#:Slave主动结束传输数据;IDSEL:在即插即用系统启动时用于选中板卡的信号。PCI总线:信号定义地址与数据总线

AD[31::0]:地址/数据分时复用总线;

C/BE#[3::0]:命令/字节使能信号;

PAR:奇偶校验信号。仲裁信号

REQ#:Master用来请求总线使用权;

GNT#:仲裁机构允许Master得到总线使用权错误报告PERR#:数据奇偶校验错;SERR#:系统奇偶校验错。PCI总线:操作PCI总线进行操作时发起者先置REQ#,当得到仲裁器的许可时(GNT#),将FRAME#置低电平,并在AD总线上放置Slave地址,同时C/BE#放置命令信号,说明接下来的传输类型。PCI总线上的所有设备都需对此地址译码,被选中的设备置DEVSEL#以声明自己被选中。然后当IRDY#与TRDY#都置低时,传输数据。Master在数据传输结束前,将FRAME#置高以标明只剩最后一组数据要传输,并在传完数据后放开IRDY#以释放总线控制权。PCI总线-读操作Data传送WaitData传送WaitData传送WaitBE#sAddressphaseIRDY#981765432地址Data-1Data-2Data-3命令DataphaseDataphaseDataphaseCPCI总线为了将PCI总线规范用在工业控制计算机系统上,1995年11月PCI工业计算机制造者联合会(PICMIG)颁布了CompactPCI(以后简称CPCI)规范1.0版。1997年推出了CPCI2.0规范。简言之,CPCI总线规范=PCI总线的电气规范+标准针孔连接器(IEC-1076-4-101)+欧洲卡规范(IEC297/IEEE1011.1)CPCI总线3U(100mm×160mm)6U(233mm×160mm)第四节

存储器概述电子盘NandFlashDOCDOMCompactFlashSmartMediaMemoryStickMMCSD概述嵌入式系统的存储结构嵌入式微处理器Cache片内RAM和ROM主存:NorFlash、SRAM、DRAM等外存:NandFlash、DOC、CF、SD、MMC等CPU地址索引机构置换控制器高速缓冲存储器主存段(页)地址高位地址低位地址地址总线数据总线

Cache结构框图CPU刷新定时器仲裁电路定时发生器刷新地址计数器地址多路开关DRAM读/写地址总线地址RASCASWRDRAMController的逻辑框图

ComparisonofFullSizeCards

ComparisonofSmallSizeCardsComparisonofMicroSizeCards嵌入式操作系统放在哪里?操作系统是如何启动的?操作系统是如何启动的?三种方式Flash加载RAM加载文件系统加载FLASH加载微处理器地址空间SDRAM/DRAMFLASHBOOT

ROM系统加电初始化向量操作系统驱动部分操作系统指令部分硬件初始化操作系统及应用程序部分启动操作系统操作系统数据段部分RAM加载微处理器地址空间SDRAM/DRAMFLASHBOOT

ROM系统加电初始化向量操作系统驱动部分操作系统其它部分硬件初始化操作系统及应用程序部分操作系统其它部分操作系统及应用程序部分启动操作系统外设文件系统加载微处理器地址空间SDRAM/DRAMFLASHBOOT

ROM系统加电初始化向量操作系统驱动部分操作系统其它部分硬件初始化操作系统及应用程序部分操作系统其它部分操作系统及应用程序部分启动操作系统系统引导BootLoader就是在操作系统内核运行之前运行的一段小程序。通过这段小程序,可以初始化硬件设备、建立内存空间的映射图,从而将系统的软硬件环境工作在一个合适的状态,以便为最终调用操作系统内核做好准备。每种不同的MCU体系结构都有不同的BootLoader方式。BootLoader装在哪里?系统加电或复位后,所有的MCU通常都从由MCU制造商预先安排的某个地址上取指令启动过程可以分为stage1(汇编)和stage2(C语言)两部分。

stage1中的初始化操作屏蔽所有的中断。设置MCU的速度和时钟频率。RAM初始化。初始化LED。关闭MCU内部指令/数据cache为加载BootLoader的stage2准备RAM空间。

C语言执行代码,因此在考虑空间大小时,除了首先考虑stage2可执行映象的大小外,还必须把堆栈空间

必须对所安排的地址范围进行测试拷贝BootLoader的stage2到RAM空间中。设置好堆栈跳转到stage2的C入口点。bootloader的stage2可执行映象刚被拷贝到RAM空间时的系统内存布局

BootLoader的stage2提供灵活的程序入口

.globl_trampoline_trampoline:bl mainb _trampoline初始化本阶段要使用到的硬件设备检测系统的内存映射(memorymap)加载内核映像和根文件系统映像规划内存占用的布局从Flash上拷贝设置内核的启动参数调用内核各种boot软件131ARMbootARMboot属于自由软件,/

是针对ARMCPU编写的通用BootLoader,其作用是对CPU以及主板进行初始化加载操作系统或者其他bootimage支持目前市面上的多种ARM板,也可以很容易的移植到新的开发板上目前ARMboot已经与PPCBoot合并

u-boot支持PPC、ARM等多种CPU

132u-boot(UniversalBoot)uboot是在ppcboot以及armboot的基础上发展而来支持很多处理器,比如PowerPC、ARM、MIPS和x86。项目主页

/projects/u-boot

133RedBootRedBoot

RedHatEmbeddedDebugandBootstrap的缩写,是RedHat公司的一个标准嵌入式系统引导和调试环境

134blobBlob

BootLoaderObject的缩写

是一款功能强大的Bootloader。它遵循GPL,源代码完全开放。Blob最初是Jan-DerkBakker和ErikMouw为一块名为LART(LinuxAdvancedRadioTerminal)的板子写的,该板使用的处理器是StrongARMSA-1100。现在Blob已经被移植到了很多CPU上。

135嵌入式实时内核数据结构

数据结构注册表双向链表任务控制块操作系统操作系统数据结构处理器的管理存储管理网络和通信的管理I/O设备管理文件管理任务管理任务表存储分配表文件目录设备表

总之,需要一大堆表数据结构(数组)数组1.同一数据类型数据的集合;2.占用连续内存空间;3.其中的所有元素名称都相同,但每个元素都有一个编号;4.元素名去掉编号(下标),得到的是数组名,数组名是个指针。inta[10]a[0]a[1]a[2]a[3]a[9]aa+1使用上的特点:1.分类存放;2.检索速度快且恒定;3.缺点:占用连续空间大……a+2a+3a+9应用:记录同类事物的表数据结构(位图)位图是数组的一种特殊应用a[10](可以记录80个事物的状态)a[0]a[1]a[2]a[3]a[9]aa+1……a+2a+3a+9应用:登记表1/0D7D6D5D4D3D2D1D0双向链表数据结构(结构)1。不同数据类型数据的集合;2。占用连续内存空间;structStudent{intage;char*name;charsex;};使用上的特点:1。不分类存放,但用来描述同一事物;2。检索速度快且恒定;应用:通讯录中的一条记录、工具箱、厨房等等nextnext两个元素的链表数据结构(链表)structStudent{Student*nextintage;char*name;charsex;};1。同数据类型数据的集合;2。不占用连续内存空间。使用上的特点:1。分类存放,但空间上不连续(不需要大量的连续存储空间);2。检索速度慢,且耗费的时间不固定;应用:存放大量的较大的表,类似档案柜数据结构(队列)按照先进先出的规则组织的数据结构可以用数组也可以用链表来实现主要用于对象的排队数据结构(堆栈)按照先进后出规则组织的数据结构主要用数组来实现主要用于程序模块的嵌套运行差分时间链

原队列插入37之后插入188793687936879-3=63637-8-7-9-3-6=4418-8-7=3任务控制块什么是多任务系统简单地说,就是能用一个处理器并发(注意,不是同时!)地运行多个程序的计算机管理系统。并发:由同一个处理器轮换地运行多个程序。或者说是由多个程序轮班地占用处理器这个资源。且在占用这个资源期间,并不一定能够把程序运行完毕。并发过程示意图处理器如何进行程序的切换?程序的切换(两句话)处理器是个傻瓜,PC让它干啥,它就干啥。PC是个指路器,它指向哪儿,处理器就去哪儿。从此可以知道,哪个程序占有了PC,哪个程序就占有了处理器。

=PC深刻地理解PC是理解系统进行程序切换动作的关键。所谓切换就是:PC目标地址如何操作PC指令:不同的计算机类型的指令是不同的。数据传送指令子程序返回指令(由堆栈弹出)中断服务程序返回指令(由堆栈弹出)任务代码任务堆栈内存处理器PCSP任务运行时与处理器之间的关系处理器通过两个指针寄存器(PC和SP)来与任务代码和任务堆栈建立联系并运行它寄存器组程序运行环境运行环境包括了两部分:处理器中的运行环境和内存中的运行环境任务代码任务堆栈内存处理器PCSP多任务时的问题任务代码任务堆栈内存任务代码任务堆栈内存?当有多个任务时,处理器中的运行环境应该怎么办?寄存器组程序运行环境程序

虚拟处理器PCSP

虚拟处理器PCSP

虚拟处理器PCSP

虚拟处理器PCSP调度器多任务时任务与处理器之间关系的处理程序处理器PCSP在内存中为每个任务创建一个虚拟的处理器(处理器部分的运行环境由操作系统的调度器按某种规则来进行这两个复制工作复制当需要运行某个任务时就把该任务的虚拟处理器复制到实际处理器中复制当需要中止当前任务时,则把任务对应的虚拟处理器复制到内存复制再把另一个需要运行的任务的虚拟处理器复制到实际处理器中寄存器组寄存器组也就是说,任务的切换是任务运行环境的切换虚拟处理器虚拟处理器应该存储的主要信息:1。程序的断点地址(PC)2。任务堆栈指针(SP)3。程序状态字寄存器(PSW)4。通用寄存器内容5。函数调用信息(已存在于堆栈)另外再用一个数据结构保存任务堆栈指针(SP),这个数据结构叫做任务控制块,它除了保存任务堆栈指针之外还要负责保存任务其他信息。这些内容通常保存在任务堆栈中,这些内容也常叫做任务的上下文。任务控制块是由操作系统另行构造的一个数据结构,每个任务都有一个。任务控制块结构的主要成员typedefstructos_tcb{

OS_STK*OSTCBStkPtr; //指向任务堆栈栈顶的指针

……

INT8U OSTCBStat; //任务的当前状态标志

INT8U OSTCBPrio; //任务的优先级别

……}OS_TCB;

任务代码任务堆栈内存任务控制块其实,程序切换的关键是把程序的私有堆栈指针赋予处理器的堆栈指针SP实质上系统是通过SP的切换来实现程序的切换的。要建立一个概念:具有控制块的程序才是一个可以被系统所运行的任务。程序代码、私有堆栈、任务控制块是任务的三要件。任务控制块提供了运行环境的存储位置。把一个大型任务分解成多个小任务,然后在计算机中通过运行这些小任务,最终达到完成大任务的目的。在μC/OS-II中,与上述那些小任务对应的程序实体就叫做“任务”(实质上是一个线程),μC/OS-II就是一个能对这些小任务的运行进行管理和调度的多任务操作系统。

从应用程序设计的角度来看,μC/OS-II的任务就是一个用户编写的C函数和与之相关联的一些数据结构而构成的一个实体。

任务代码任务堆栈内存在内存中应该存有任务的代码和与该任务配套的堆栈任务切换过程获得待运行任务的任务控制块恢复待运行任务的运行环境处理器的PC=任务堆栈中的断点地址处理器的SP=任务块中保存的SP如何获得待运行任务的任务控制块?小结一个完整的任务应该有如下三部分:任务代码(程序)任务的私有堆栈(用以保护运行环境)任务控制块(提供私有堆栈也是虚拟处理器的位置)这些都是任务方应该提供的基本信息。注册表优先级位图算法OSRdyGrp:优先级就绪组OSRdyTbl:优先级就绪表35:00100011charOSRdyGrp;charOSRdyTbl[8];下标二进制值000000001100000010200000100300001000400010000500100000601000000710000000优先级映射表charOSMapTbl[8]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};OSMapTbl的数组元素的下标与任务优先级的高三位或低三位相对应。OSMapTbl的数组元素对应的二进制值中,位为1的位表示OSRdyGrp或是OSRdyTbl[]的对应位也为1。

35:00100011优先级判定表charOSUnMapTbl[256];以OSRdyGrp或是OSRdyTbl[]数组元素的值为索引,获取该值对应二进制表示中1出现的最低二进制位的序号(0-7)。

任务进入就绪态OSRdyGrp|=OSMapTbl[priority>>3];OSRdyTbl[priority>>3]|=OSMapTbl[priority&0x07];35:00100011OSRdyGrp765432101514131211109823222120191817163130292827262524393837363534333247464554434241405554535251504948636261605958575676543210OSRdyTblOSRdyTbl[0]OSRdyTbl[1]OSRdyTbl[2]OSRdyTbl[3]OSRdyTbl[4]OSRdyTbl[5]OSRdyTbl[6]OSRdyTbl[7]

00010000

00001000任务退出就绪态

if((OSRdyTbl[priority>>3]&=~OSMapTbl[priority&0x07])==0) OSRdyGrp&=~OSMapTbl[priority>>3];

35:00100011OSRdyGrp765432101514131211109823222120191817163130292827262524393837363534333247464554434241405554535251504948636261605958575676543210OSRdyTbl

00001000->11110111

00010000->11101111OSRdyTbl[0]OSRdyTbl[1]OSRdyTbl[2]OSRdyTbl[3]OSRdyTbl[4]OSRdyTbl[5]OSRdyTbl[6]OSRdyTbl[7]获取进入就绪态的最高优先级high3Bit=OSUnMapTbl[OSRdyGrp];low3Bit=OSUnMapTbl[OSRdyTbl[high3Bit]]; priority=(high3Bit<<3)+low3Bit;

35:00100011OSRdyGrp7654321015141312111098232221201918171631302928272625241000100047464554434241405554535251504948636261605958575601010000OSRdyTbl

0x60->4/high3Bit

0x88->3/low3Bit

ucOS中,任务按优先级进行组织,以优先级为数组元素下标,通过OSTCBPrioTbl[]即可找到相应的TCB。OSRdyTbl[0]OSRdyTbl[1]OSRdyTbl[2]OSRdyTbl[3]OSRdyTbl[4]OSRdyTbl[5]OSRdyTbl[6]OSRdyTbl[7]第四章嵌入式实时内核基础任务任务进程:有自己的内存空间线程:有自己的堆栈和硬件寄存器任务:抽象概念,一个无限循环任务划分的例子IP任务,telnet任务,COM口任务,OSPF任务,BGP任务,UDP/TCP任务例子起始任务Task0Task1Task0Task0Task1Task1t0t1t2t3t4t5t6t7t8

图1-1(1)系统经历一系列的初始化过程后进入boot_card()函数,在其中调用ucBsp_init()进行板级初始化后,调用main()函数;(2)main()函数调用OSInit()函数对µC/OS-II内核进行初始化,调用OSTaskCreate创建起始任务TaskStart;(3)main()函数调用函数OSStart()启动µC/OS-II内核的运行,开始多任务的调度,执行当前优先级最高的就绪任务TaskStart;(4)TaskStart完成如下工作:a、安装时钟中断并初始化时钟,创建2个应用任务;b、挂起自己(不再被其它任务唤醒),系统切换到当前优先级最高的就绪任务Task0。操作系统配置配置的方法为修改uC_OS-II源代码目录中的OS_CFG.h文件

#defineOS_MAX_EVENTS10/*最多可以有10个事件*/#defineOS_MAX_FLAGS5/*最多可以有5个事件标志*/#defineOS_MAX_MEM_PART5/*最多可以划分5个内存块*/#defineOS_MAX_QS2/*最多可以使用2个队列*/#defineOS_MAX_TASKS3/*最多可以创建3个任务*/#defineOS_LOWEST_PRIO14/*任务优先级不可以大于14*/#defineOS_TASK_IDLE_STK_SIZE1024/*空闲任务堆栈大小*/#defineOS_TASK_STAT_EN1/*是否允许使用统计任务*/#defineOS_TASK_STAT_STK_SIZE1024/*统计任务堆栈大小*/。。。。C-OSSampleCodevoidmain(void){

/*PerformInitializations*/...OSInit();...

/*CreateatleastonetaskbycallingOSTaskCreate()*/OSStart();}OSTaskCreate(TaskStart,(void*)0,&TaskStartStk[TASK_STK_SIZE-1],4);TaskStart任务

TaskStart任务负责安装操作系统的时钟中断服务例程、初始化操作系统时钟,并创建所有的应用任务: ucos_x86_idt_set_handler(0x20,(void*)OSTickISR,0x8e00);/*InstalluC/OS-II'sclocktickISR*/ ucos_timer_init();/*Timer初始化*/

TaskStartCreateTasks();

/*Createalltheapplicationtasks*/OSTaskSuspend(OS_PRIO_SELF);staticvoidTaskStartCreateTasks(void){INT8Ui;for(i=0;i<N_TASKS;i++){/*CreateN_TASKSidenticaltasks*/ TaskData[i]=i;/*Eachtaskwilldisplayitsownletter*/}OSTaskCreate(Task0,(void*)&TaskData[i],&TaskStk[i][TASK_STK_SIZE-1],5);OSTaskCreate(Task1,(void*)&TaskData[i],&TaskStk[1][TASK_STK_SIZE-1],6);}应用任务1voidTask0(void*pdata){INT8Ui;INT8Uerr;i=*(int*)pdata;

for(;;){

……/*此处为输出信息,显示任务运行的状态*/ err=OSTaskSuspend(5);/*suspenditself*/}}应用任务2voidTask1(void*pdata){ INT8Ui;INT8Uerr;i=*(int*)pdata;

for(;;){OSTimeDly(150);

……/*此处为输出信息,显示任务运行的状态*/OSTimeDly(150);err=OSTaskResume(5);/*resumetask0*/ }}运行结果在μC/OS-Ⅱ中,当一个运行着的任务使一个比它优先级高的任务进入了就绪态,当前任务的CPU使用权就会被抢占,高优先级任务会立刻得到CPU的控制权(在系统允许调度和任务切换的前提下)练习系统初始化,之后进入main函数;在main函数中创建TaskStart任务,由TaskStart任务创建所有的应用任务(TA0、TA1、TA2)。优先级较高的任务TA0、TA1先延时若干个时钟节拍,以便低优先级任务TA2运行。任务调度1.调度算法非抢占式图1所示为非抢占式内核程序流程:①低优先级任务(LPT)执行;②低优先级任务被中断;③执行中断服务例程,使高优先级任务(HPT)就绪;④中断服务例程返回到被中断的低优先级任务;⑤低优先级任务继续执行;⑥低优先级任务放弃CPU;⑦高优先级任务运行。调度算法抢占式图2所示为抢占式内核程序流程:①低优先级任务执行;②异步事件使任务中断;③响应异步事件,运行中断服务例程,使高优先级任务就绪;④中断服务例程返回到高优先级任务;⑤高优先级任务执行,直到它被中断转向执行优先级更高的任务;⑥高优先级任务结束,内核切换到低优先级任务;⑦低优先级任务继续执行。2.可抢占内核就绪态运行态等待态获得CPU被高优先级任务抢占或超时获得资源需要资源任务状态变迁任务1任务2任务3调度程序05101520253035404550运行等待就绪三个任务进行状态转换的过程

包含三个任务和一个调度程序。调度程序用来确定下一个需要投入运行的任务,因此调度程序本身也需要占用一定的处理时间。Ucos任务的程序实现

(一)TaskstatesandtransitionofucOS空闲任务whichisexecutedwhennoneoftheothertasksisreadytorun.Theidletaskisalwayssettothelowestpriority.Theidletaskcanneverbedeletedbyapplicationsoftware.typedefstructos_tcb{

OS_STK*OSTCBStkPtr;

/*Pointertocurrenttopofstack

*/#ifOS_TASK_CREATE_EXT_EN>0void*OSTCBExtPtr;

/*PointertouserdefinabledataforTCBextension*/OS_STK*OSTCBStkBottom;/*Pointertobottomofstack

*/INT32UOSTCBStkSize;/*Sizeoftaskstack(innumberofstackelements)*/INT16UOSTCBOpt;/*TaskoptionsaspassedbyOSTaskCreateExt()*/INT16UOSTCBId;/*TaskID(0..65535)*/#endifstructos_tcb*OSTCBNext;/*PointertonextTCBintheTCBlist

*/structos_tcb*OSTCBPrev;/*PointertopreviousTCBintheTCBlist*/#if((OS_Q_EN>0)&&(OS_MAX_QS>0))||(OS_MBOX_EN>0)||(OS_SEM_EN>0)||(OS_MUTEX_EN>0)OS_EVENT*OSTCBEventPtr;/*Pointertoeventcontrolblock

*/#endif#if((OS_Q_EN>0)&&(OS_MAX_QS>0))||(OS_MBOX_EN>0)void*OSTCBMsg;/*MessagereceivedfromOSMboxPost()orOSQPost()*/#endifTCBofucOS#if(OS_VERSION>=251)&&(OS_FLAG_EN>0)&&(OS_MAX_FLAGS>0)#ifOS_TASK_DEL_EN>0OS_FLAG_NODE*OSTCBFlagNode;/*Pointertoeventflagnode*/#endifOS_FLAGSOSTCBFlagsRdy;/*Eventflagsthatmadetaskreadytorun*/#endifINT16UOSTCBDly;/*Nbrtickstodelaytaskor,timeoutwaitingforevent*/INT8UOSTCBStat;/*Taskstatus

*/INT8UOSTCBPrio;/*Taskpriority(0==highest,63==lowest)

*/INT8UOSTCBX;/*Bitpositioningroupcorrespondingtotaskpriority

(0..7)*/INT8UOSTCBY;/*Indexintoreadytablecorrespondingtotaskpriority

*/INT8UOSTCBBitX;/*Bitmasktoaccessbitpositioninreadytable

*/INT8UOSTCBBitY;/*Bitmasktoaccessbitpositioninreadygroup

*/#ifOS_TASK_DEL_EN>0BOOLEANOSTCBDelReq;/*Indicateswhetherataskneedstodeleteitself

*/#endif}OS_TCB;

任务管理与调度需要掌握的主要知识点任务任务管理任务调度优先级反转第一节

任务HighPriorityTaskLowPriorityTaskTaskTaskTaskTaskTaskTaskEventEventEachTaskInfiniteLoopImportanceSplittinganapplicationintoTasksintmain(void){//InitializeuCOS-II.OSInit();//CreatethefirsttaskOSTaskCreate(TestTask1,(void*)11,&TestTaskStk1[TASK_STK_SIZE],11);//Startmultitasking.OSStart();return0;}voidTestTask1(void*pdata){printf("%4u:*****TestTask1Firstcall*****\n",OSTime);

//Create3othertasksOSTaskCreate(TestTask2,(void*)22,&TestTaskStk2[TASK_STK_SIZE],22);OSTaskCreate(TestTask3,(void*)33,&TestTaskStk3[TASK_STK_SIZE],33);OSTaskCreate(TestTask4,(void*)10,&TestTaskStk3[TASK_STK_SIZE],10);while(1){

printf("%4u:*****TestTask11*****\n",OSTime);

OSTimeDly(1);}}TaskdemobasedonucOSvoidTestTask2(void*pdata){

while(1){printf("%4u:*****TestTask22*****\n",OSTime);

OSTimeDly(1);

}}voidTestTask3(void*pdata){

while(1){

printf("%4u:*****TestTask33*****\n",OSTime);OSTimeDly(1);}}voidTestTask4(void*pdata){

while(1){printf("%4u:+++++TestTask10+++++\n",OSTime);OSTaskSuspend(10);//Suspendyourself

}}程序运行结果单进程/单线程模型单进程/多线程模型多进程/多线程模型多进程/单线程模型任务的定义及其主要特性任务是一个具有独立功能的无限循环的程序段的一次运行活动,是实时内核调度的单位,具有以下特性:动态性:任务状态是不断变化的。一般分为就绪态、运行态和等待态。在多任务系统中,任务的状态将随着系统的需要不断进行变化。并行性:系统中同时存在多个任务,这些任务在宏观上是同时运行的。异步独立性:每个任务各自按相互独立的不可预知的速度运行,走走停停。任务的内容任务主要包含以下内容:代码:一段可执行的程序数据:程序所需要的相关数据(变量、工作空间、缓冲区等)堆栈程序执行的上下文环境任务的内容任务所包含的程序通常为一个具有无限循环的程序/*ioTaskimplementsdataobtainingandhandlingcontinuously*/voidioTask(void){ intdata;

initial(); /*Thefollowingsentencesgetdataandhandledatacontinuously*/ while(TRUE) { data=getData(); han

温馨提示

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

评论

0/150

提交评论