1、嵌入式系统硬件组成概述嵌入式最小硬件系统:嵌入式处理器运行必备条件的硬件电路与嵌入式处理器共同构成了嵌入式最小硬件系统。嵌入式最小硬件系统组成:嵌入式处理器、时钟电路、电源电路、复位电路、存储器、调试测试接口电源电路:嵌入式系统常用的电源模块式交流变直流(AC-DC)模块、直流到直流(DC-DC)模块以及低压差稳压器(LDO) 。稳压器包括普通稳压器和低压差稳压器 LDO。78XX 系列属于普通稳压器,LM2576/2596 为开关稳压芯片,CCAT6219/AS2815/1117/2908 等属于低压差稳压器。稳压器最大的特点是低噪声、低成本、纹波小、精度高、电路简单。时钟电路:几乎所有的嵌
2、入式处理器本质上均为同步时序电路,需要时钟信号才能按照节拍正常工作。复位电路:嵌入式处理器都有一个系统复位引脚为 nRESET 或 RESET,n 表示低电平复位,不带 n 的表示高电平复位。JTAG 测试接口:联合测试行为小组(JTAG)是一种国际标准测试协议,主要用于芯片内部测试以及对系统进行仿真和调试。 测试访问口:TAP基于 ARM 内核的电性嵌入式应用系统硬件组成:嵌入式最小硬件系统、前向通道、后向通道、人机交互通道、以及相互互联通信通道等组成。前向通道,即输入接口,包括传感器、信号调理电路(滤波器、放大器等) 、A/D 转换器等构成。后向通道,即输出接口,包括 D/A 转换器、功率
3、放大器。执行器等组成。人机交互通道,包括键盘或触屏输入接口以及 LED 或 LCD 显示输出接口。相互互联通道,包括 RS-232/RS-485 串行通信接口、CAN 通信接口、以太网通信接口、USB 通信接口等。嵌入式处理芯片AMBA:先进微控制器总线体系结构系统总线(ASB、AHB、AXI、ACE)主要用于连接高带宽快速组件:电源管理与时钟控制器、测试接口如 JTAG、外部存储器控制接口、DMA 控制器、USB 主机、片上 SRAM 及 Flash、中断控制器、LCD 控制器。外围总线:(APB)主要连接低带宽组件以及与外部相连的硬件组件:GPIO、UART、SPI、I2C、USB 设备、
4、CAN、Ethernet、ADC、DAC、WDT、Timer、RTC、PWM 等。存储器及控制器:片内程序存储器通常用 Flash ROM,一般配有几 KB 到几 MB 不等;片内数据存储器通常使用的是 SRAM,一般配有几 KB 到几百 KB 不等。目前程序存储器大都采用 Flash 存储器,而数据存储器可采用SRAM 和 DDR 或 DDR2 或普通的 DRAM。中断控制器:一般采用向量中断(VIC)或嵌套向量中断(NVIC)方式管理中断。Cortex-M 系列就支持嵌套的向量中断。DMA 控制器:直接存储器访问控制器电源管理与时钟控制器:ARM 处理芯片内部的电源管理主要有正常工作模式、
5、慢时钟模式、空闲模式、掉电模式、休眠模式、深度休眠模式等。时钟信号是 ARM 芯片定时的关键。GPIO 端口:通用输入/输出端口。输入时具有缓冲功能,输出时具有锁存功能。定时计数组件:看门狗定时器(WDT) 、Timer 通用定时器、RTC、脉冲宽带调制器(PWM)模拟通道组件:ADC、DAC、比较器。ADC:模拟到数字的转换器。 DAC:数字到模拟的转换器。 比较器主要功能是当比较器正端电压高于负端电压时,输出电压值接近正电源电压,反之输出电压接近负电源电压。互联通信组件:UART、I2C、SPI、CAN、USB、Ethernet 等。UART:通用异步收发器。I2C:集成电路互连的一种总线
6、标准,只有两根信号线,一根是时钟线 SCL,一根是数据线 SDA(双向三态)I2S:面向多媒体应用的音频串行总线。SPI:串行外设接口。包括 MISO、MOSI、SSL 和 SCK。可完成全双工的同步串行通信,用于板级芯片之间的短距离通信。CAN:控制器局域网,仅有 CANH 和 CANL 两根信号线,采用差分方式传输数据,可以进行远距离多机通信。主要用于要求抗干扰能力强的工业控制领域,可组成多主多从系统。USB:通用串行总线,主要应用于与外部设备的短距离通信,也采用差分方式传输数据,是目前应用最广的串行总线接口形式。Ethernet:以太网通信接口常用 ARM 嵌入式处理芯片:NXP 的、T
7、I 的、Samsung 的、Atmel 的、ST 的、Freescale 的、Nuvoton 的、Intel的等等嵌入式处理芯片选型遵循:性价比原则和参数选择原则3.3 嵌入式系统的存储器存储器层次结构对于 CPU 使用最频繁的少量的程序代码和数据用 SRAM 作为高速缓冲存储器(Cache)存放;正在运行中的程序的大部分数据和代码存放在主存储器(内存)中;尚未启动运行的其余程序或数据则存放在容量大的外部存储器如磁盘(虚拟内存)中待命。目前嵌入式系统采用 SRAM 作为 Cache,Cache 又分为嵌入式处理器内部一级 Cache(L1)和二级 Cache(L2)存储器分类按存取特性可分为随
8、机存取存储器(RAM)和只读存储器(ROM) ;按所处物理位置可分为片内春初期(芯片内置的存储器)和片外存储器(外部扩展的存储器)以及外部存储设备;按照存储信息的不同可分为程序存储器和数据存储器。在嵌入式系统中把片内存储器及片外扩展的存储器简称内存,把外部存储设备简称外村。嵌入式系统的存储器以半导体存储器为主。FRAM:铁电随机存取存储器;MRAM:磁性随机存取存储器随机存取存储器包括静态和动态两种形式,即 SRAM 和 DRAM,都是易失性存储器。目前嵌入式处理器内嵌的数据存储器基本都采用 SRAM,外部扩展的存储器大都采用 DRAM 及改进型(DDR SDRAM、DDR2 SDRAM、DD
9、R3、DDR4)只读存储器MROM、PROM、EPROM、EEPROM、Flash ROM、NOR Flash 和 NAND FlashNAND Flash ROM 以页(行)为单位随机存取,速度慢,变成复杂,大多作为数据存储器使用。 (数码相机、MP3随身听记忆卡、U 盘)NOR Flash ROM 以字节为单位随机存取,写入和擦除速度较慢。铁电存储器:非易失,可取代 SRAM 和 Flash 存储器磁性存储器:可取代 Flash 存储器存储器主要性能指标存储器的存取速度、存储容量、带宽容量:对于内存容量而言,单位之间换算以 210=1024 倍表示,对于外存容量(磁盘、U 盘、Flash
10、存储卡) ,以 103=1000 倍表示。内存储器容量取决于存储单元的个数和存储器各单元的位数:内存容量=单元总数*数据位数/单元存储芯片的容量完全取决于存储器芯片的地址线条数和数据线的位数。V=2m * n(L:单元个数,n:数据线位条数,m:地址条数,m=log2 L)存取时间:从 CPU 给出有效的存储器地址开始到存储器读出数据所需要的时间。带宽:存储器每秒可传输的最大数据总量。并行总线的存储器带宽:带宽=总线频率*数据宽度/ 8 * 传输次数 /总线周期(B/s)串行总线带宽=总线频率 * 1/10 以 10 位为一个数据帧(含一字节数据)片内存储器片内 Cache、片内 Flash
11、ROM(嵌入式微控制器内部集成的程序存储器) 、片内 SRAM(集成的数据存储器,SRAM属于易失性存储器) 、片内 E2PROM(作为长期保存重要数据的存储器,属于非易失性)、片内 FRAM(具有 RAM 和 ROM 的全部特点,是当前嵌入式微控制器内部的主要存储器之一)片外存储器外部存储器的扩展是靠 ARM 内核提供的高带宽外部存储器控制器接口完成的。片外程序存储器:NOR Flash、NAND Flash片外数据存储器:SDRAM、DDR/DDR2/DDR3/DDR4外部存储设备SM 卡、CF 卡、MMC、SD 卡、记忆棒、XD 卡、U 盘、微硬盘3.4 I/O 接口及常用 I/O 设备
12、通用 I/O 接口 GPIO嵌入式系统外部通信接口基于 UART 的 RS-232/RS-485 接口RS-232 接口:传输距离可以达到 15m 左右,无法消除共模干涉。RS-485 接口:采用差分信号传输方式,具有很强的抗共模干扰能力,传输距离可达 1200m,不能构成多主系统CAN 总线接口广泛应用于工控领域以及要求抗干扰和实时性强的场合;采用差分创术,控制器内置 CRC 教研,传输可靠性强,可构成多主多从系统;CAN 总线的数据帧由 7 不同的域组成:帧起始、仲裁域、控制域、数据域、CRC 域、应答域。帧结尾,其中数据域的长度可选为 0-8B以太网通信接口:分为基于内置以太网控制器的以
13、太网接口(以太网控制器 MAC 层,物理层 PHY 层的收发器电路)和不带内置以太网控制器的以太网接口常用无线通信接口GPS、GPRS、WiFi、蓝牙以及通用射频通信模块等GPS 模块:必须具备 GPS 终端、传输网络和监控平台三个要素。GPRS 模块:以封包(Packet,也称为分组)方式进行数据传输。WiFi 模块:使用 IEEE 802.11 系列协议,内置无线网络协议 IEEE 802.11 协议栈以及 TCP/IP 协议栈,能够实现用户串口、TTL 电平、USB 接口或 SPI 接口数据到无线网络之间的转换。蓝牙模块:支持设备短距离通信(10m 内)的无线低速(1Mb/s)通信技术,
14、基于串口 UART 或 USB其他无线模块:射频无线收发模块,如 Si4432嵌入式系统的软件组成嵌入式系统与通用计算机系统的软件的相同之处指的是:嵌入式系统具备引导加载程序、外部设备驱动程序、操作系统、文件系统、网络协议栈、图形用户界面、数据库、各种各样的应用程序等区别:嵌入式系统的软件配备没有通用计算机那样多;通用计算机的软件系统无疑以操作系统为核心,不可或缺;对于数据库、图形用户界面、因特网浏览器、媒体播放器等基于操作系统的外围工具软件,如果运行在通用计算机上则具有内部结构细致化、运行效率高效化、代码重量化的特点。嵌入式操作系统RTOS:实时操作系统 IEEE:美国电气电子工程师协会实时
15、系统的属性时间约束性。分为硬实时系统、软实时系统。常见的系统大多是软实时系统。可预测性;可靠性按响应时间将实时系统分为三类:强实时系统:响应时间在毫秒级或微秒及。普通实时系统:响应时间一般在几秒;弱实时系统:响应时间一般在数十秒。实时操作系统IEEE 的实时 UNIX 分委会认为实时操作系统应该具备 7 个特征:1.具有异步 I/O 和中断处理能力 2.任务切换时间和中断延迟时间确定 3.优先级中断和调度 4.抢占式调度 5.内存锁定 6.连续文件 7.同步RTOS 的三个主要实时指标:响应时间(中断延迟时间和任务切换时间) 、吞吐量(在给定时间内,实时系统可以处理的事件总数) 、生存事件(输
16、入数据的有效等待时间)嵌入式操作系统概述嵌入式操作系统(EOS)是嵌入式系统中的软件。与通用计算机的操作系统相比较具有可移植、强调实时性能、内核精简、抢占式多任务处理、使用可重入函数、可配置、可裁剪、高可靠性等特点。嵌入式操作系统可粗略地分为内核、驱动程序、服务模块与行命令解释程序几大部分。内核有广义和狭义两种解释。广义:指装入在存储器里的嵌入式软件中的操作系统部分。狭义:指嵌入式操作系统中负责多任务管理及任务间通信的多任务处理部分。它执行任务创建与初始化、任务调度、时钟管理、中断管理。内存管理等。例如 COS-II 就是典型的纯内核例子。主流嵌入式操作系统TinyOS:开源,深度轻量级,先进
17、先出调度,用于无线传感器网络C/OS-II/III:小型嵌入式操作系统内核,不含设备驱动程序和文件系统。开源,用于工控领域。iOS:苹果公司,微内核,系统结构分为 4 个层次:核心操作系统、核心服务层、媒体层、触摸框架层,系统运行占用约 512MB。iOS 与苹果公司的 MacOS X 操作系统一样,也是以 Darwin OS 为基础的,因此同样属于类Unix 的商业操作系统。Windows Embedded Compact 8:即以前的 WinCE 操作系统。属于大型嵌入式操作系统。可用于手持设备。 。具有 HAL 和 OAL。Windows Phone 8:前驱产品是 2003 年问世的
18、Windows Mobile。用于手机操作系统。VxWorks:目前公认为实时性最强、可靠性最高的一种嵌入式实时操作系统。广泛应用于航空航天、通信和国防领域。属于大型商用操作系统,具有配套的 Tornado 集成开发环境。嵌入式 Linux:普通 Linux 操作系统移植到嵌入式硬件平台上的版本。开源、不存在黑箱技术,安卓操作系统:以 Linux 为 基础,半开放源代码操作系统,属于大型操作系统,通过 Android SDK 使用 Java作为编程语言来开发 Android 应用程序。eCOS:免费和开源的实时操作系统,使用于嵌入式系统和那些只需要一个进程多个线程的应用项目。QNX:实时,可扩
19、充,内核小巧,速度快,可应用于虚拟机。嵌入式操作系统分类(1)按源代码规模分类:分为小型和大型,区别是源代码行数数量大小,超过 10000 行语句为大型,否则为小型。 (2)按内核大小分类:小内核和大内核,前者最小内核 8KB,后者最小 320KB。 (3)按照能否免费获得源代码分类:开放源代码和不开放源代码,开源系统:CLinux、RTLinux、Nucleus Plus、ECOS、C/OS-II (4)按照实时性能分类:分为强实时型和普通实时型。强实时:VxWorks、片 SOS、 COS-II 等,普通实时:Windows Embedded、CLinux、Symbian 等。 (5)按照
20、内核结构分类:单内核和微内核。单内核又称宏内核,内部含有进程管理、调度器、时间管理、设备管理、文件管理等模块。耦合度高,通过函数调用实现模块之间通信。如 Unix、嵌入式 Linux、WinCE、Mac OS、Android OS 和 DOS。微内核:内核小巧,接口一致,松散耦合,人物间通信机制为消息机制,以消息传递方式相传。如:Symbian、VxWorks、QNX、C/OS-II、iOS 等,iOS 前身是在 Darwin OS 基础上研发的 iPhone OS,是一个类Unix 操作系统,属于微内核架构。嵌入式操作系统的仿真平台一般指嵌入式系统开发过程中使用的指令集模拟器、仿真软件或者虚
21、拟机管理软件。如 ARM 公司的 Armulator和清华大学研发的 SkyEye 都是 ARM 指令集模拟器,更奇安达的为 VMware 虚拟机,可搭建嵌入式 Linux 的仿真开发平台。硬件抽象层、板级支持包和引导加载程序底层软件主要就是指硬件抽象层、板级支持包和启动引导程序。硬件抽象层(HAL)WindowsNT。板级支持包(BSP)由美国风和公司(VxWorks 研发商)提出。一般而言,音质 VxWorks 操作系统有四种操作类型:宿主机移植、体系结构移植、目标板移植、升级以前 Tornado 集成开发环境版本的 BSP 到最新版本。硬件抽象层(HAL)热点:是嵌入式硬件电路板的最基本
22、软件,基本上是用标准 C 编写的,负责嵌入式操作系统移植,需集中精力在 HAL 上座关键代码的编程工作,从而加速操作系统的移植。含有 HAL 的操作系统:RTAL、eCOS、ITRON 和Nios II。板级支持包 BSPHAL 和 BSP 的异同:对于同样的一个电路板,HAL 一般只有一个,但是不同的操作系统拥有不同的 BSP;移植一个操作系统 A 到一块新的电路板,为了构造 BSP,需要改写的源代码基于两种来源,一种是操作系统 A 在类似电路板的 BSP,另一种是这块电路板的 HAL。BSP 含有电路板的全套初始化程序,包括操作系统初始化,它要为操作系统的正常运行做好准备,而 HAL 通常
23、也包括硬件初始化程序,但是不完整,例如不包括操作系统的初始化处理。引导加载程序嵌入式系统加电后执行的第一批最初操作成为引导或者自举(Boot) ,对应的程序成为引导程序或者引导加载程序(Bootloader) 。引导加载程序主要完成内存加电自检、外设存在自检、内存地址映射、初始化外围设备、内存寻址定位、加载和启动操作系统。典型嵌入式系统启动顺序:(1)上电后,Bootloader 将执行基本的硬件自检、初始化硬件控制寄存器、初始化 SDRAM 等工作(2)Bootloader 将 OS 内核映像文件从非挥发存储介质(如 Flash)中复制到 SDRAM 中,并将控制权转交给 OS。 (3)OS
24、 内核执行创建页表、驱动外设、初始化中断控制系统等 OS 的流程,最终创建应用程序执行环境甚至图形用户界面。Bootloader 的两个执行阶段stage1 的基本步骤:基本硬件初始化,为加载 stage2 准备 RAM 空间,拷贝 stage2 的执行代码到 RAM 空间中,设置栈区指针 SP,跳转到 stage2 的 C 程序入口点。硬件初始化一般包括:关闭 WatchDog、关中断、设置 CPU的速度和时钟频率、RAM 初始化等。stage2 的基本步骤:启动加载模式下 Bootloader 的 stage2 操作流程:初始化本阶段要使用到的硬件设备,检测系统内存映射,将内存映像和根文件
25、系统映像从 Flash 上读到 RAM 空间中,为内核设置启动参数,调用内核。下载模式下 Bootloader 的 stage2 操作流程:初始化本阶段要使用到的硬件设备,主要是串口、网口和 Flash存储器等;等待用户输入行命令以进入下载模式,否则直接进入启动加载模式;通过串口终端与调试主机建立连接,提供人机交互接口;接收用户输入,通过串口或者网口进行文件下载,将文件写入 Flash 存储器保存;下载完毕,继续等待用户输入或者重启系统。嵌入式 Linux 的 Bootloader 执行步骤初始化处理器及外设的硬件资源配置;建立内存空间的映射管理,使能 MMU,将系统的外存和内存地址变换激活,
26、为最终调用操作系统内核做好准备;装载操作系统映像到内存;对 Flash 存储器编程;运行操作系统;传递系统启动参数;命令行解析和输入/输出控制。U-Boot 被认为是功能全面、具有灵活性以及应用广泛的开放源代码 Bootloader,目前由 DENX 公司维护。就目前来说,U-Boot 对 PowerPC 系列处理器的支持最为丰富,对 Linux 的支持最为完善,国内 ARM9 实验箱通常使用 U-boot 作为 Bootloader,引导多种嵌入式操作系统。嵌入式 Linux 操作系统Linux 是目前唯一可免费获得的、能为多用户提供多任务、多线程功能的大型操作系统。最初以 Unix 为原型
27、,以实现 POSIX 标准为目标,是最好的类 Unix 操作系统。嵌入式 Linux:MontanaVista Linux、Clinux、RTLinux(硬实时) 、RTAI从顶视图看,嵌入式 Linux 操作系统主要由用户进程、OS 服务组件和 Linux 内核三大子系统组成。用户进程:在 Linux 系统上运行的应用程序集合。OS 服务组件:位于 Linux 操作系统内核之上的一层服务模块或者实用程序集合,例如行命令解释程序(Shell) 、窗口系统(例如 X Windows、QT) 、内核编程接口等。Linux 内核:主要作用:进程管理与调度、内存管理、文件管理、网络接口和进程间通信。由
28、 5 个子系统组成:进程调度 SCHED、内存管理 MM、虚拟文件系统 VFS、网络接口 NET、进程间通信 IPC。嵌入式操作系统 C/OS-IIC/OS-II 的基本特点C/OS-II 是抢占式实时操作系统内核,不涉及硬件驱动程序。只能管理 64 个任务,目前版本保留 8 个任务给系统,这样用户编写的应用程序最多可以有 56 个任务。不支持时间片轮转调度法,赋予每个任务的优先级是不同的,每个任务拥有自用栈。使用 C/OS-II 的栈空间校验函数可以确定每个任务到底需要多少栈空间。C/OS-II 的层次位置C/OS-II 嵌入式应用系统开发具有面向任务的特点。任务中的功能处理可以通过调用 A
29、PI 函数实现,也可以通过中断服务例程 ISR 实现。应用程序接口层(API)主要包括文件系统、TCP/IP 网络协议栈、图形用户界面、中文系统、嵌入式数据库、因特网 Web 浏览器等。C/OS-II 的代码结构与初始化大部分代码由标准 C 语言写成。C/OS-II 主要由三大类程序文件构成,这三大类程序按照硬件和应用相关性分为:与处理器类型无关的代码、与应用程序有关的代码和与硬件平台移植相关的代码。按照功能还可以把这些文件分成核心模块、预处理模块、进程间通信(IPC)模块、内存管理模块、任务与调度管理模块、时间管理模块以及移植模块。C/OS-II 的启动过程:Bootloader 执行完毕后
30、,调用应用程序主文件(main()函数) 。main()函数在执行过程中,除了用户函数和硬件初始化函数外,按照以下次序执行 3 个主要的 C/OS-II 函数:1.操作系统初始化 OSInt() ;2.任务创建 OSTaskCreat() ;3.任务调度开始 OSStart() 。一旦 OSStart()函数开始执行,就标志着 C/OS-II 进入了多任务调度的正常运行状态。OSInit 函数先建立最初的任务就绪表,然后建立 4 个空白的数据链表。这些内存的空白数据区开辟之后,OSInt 创建第 1 个任务,这就是空闲任务(Idle Task) ,优先级设为最低(取常量 OS_LOWEST_P
31、RIO 的值),创建之后进入就绪态。条件满足的话,OSInt 还创建一个统计任务 OSTaskStat,也让进入就绪态,OSTaskStat 优先级取为 OS_LOWEST_PRIO-1(次低级) 。在 main.c 代码文件中还有两个 C/OS-II 的函数,其中 OSTaskCreate 函数创建用户定义的一个任务,OSStart 启动 C/OS-II 多任务调度。在 C/OS-II 多任务调度启动前,用户至少要使用 OSTaskCreate 函数建立一个应用任务。C/OS-II 任务的创建:可以使用 OSTaskCreate 函数或者 OSTaskCreateExt 函数。一个任务通常是
32、一个无限的循环,有函数返回类型,有形式参数变量,但是任务绝不会返回的,故返回参数必须定义为 void。C/OS-II 的内核C/OS-II 是嵌入式操作系统领域中的最小内核之一,只提供任务调度、任务间通信(ITC)与同步、任务管理、时间管理、内存管理、等基本功能。抢占式任务调度、多任务通信。临界区:指处理时不可分割的代码。一旦执行,不允许任何中断。在进入临界区之前必须关中断,执行完临界区代码之后要立即开中断。C/OS-II 调用 OS_ENTER_CRITICAL()和 OS_EXIT_CRITICAL()两个宏来执行关中断和开中断。C/OS-II 的任务状态C/OS-II 操作系统可以定义的
33、最大任务数是 64 个,最高优先级定为 0,最低优先级取值为实际定义的最大任务数减 1.任务建立之后,拥有优先级、执行函数、自用栈空间和任务控制块(TCB) ,运行时能够完全控制 CPU的操作以及全部用户可访问寄存器的操作。绝大多数情况下 C/OS-II 的每个任务都是一个无限的循环。每个任务处在以下 5 个状态之一:休眠态、就绪态(记录在就绪任务集中) 、运行态、挂起态和被中断态。任务控制块 OS_TCB:内核对任务的管理通过任务控制块 OS_TCB 进行。OS_TCB 全部驻留在 RAM。OS_TCB 数据结构中的 OSTCBX、OSTCBY、OSTCBBitX、OSTCBBitY 4 个
34、变量用于加速任务进入就绪态的过程或进入等待事件发生状态的过程。C/OS-II 的任务调度C/OS-II 的就绪任务登记在就绪表中。就绪表由两个变量 OSRdyGrp 和 OSRdyTbl构成。C/OS-II 总是运行处于就绪态任务中优先级最高的那一个,由调度器(Scheduler)确定哪个任务优先级最高,下面应该执行哪一个任务。任务级的调度是由函数 OSSched()完成的,是任务调度的前导函数;中断级的调度是由另一个函数 OSIntExit()完成的。C/OS-II 的任务切换也称为上下文切换、文境切换,实际含义是任务的 CPU 寄存器内容切换。完成任务切换所需要的时间取决于CPU 有多少寄
35、存器要入栈。C/OS-II 的中断处理C/OS-II 允许中断嵌套,嵌套层数可达 255 层。中断服务子程序执行事件处理有两种方法。一种方法是通过OSMBoxPost() 、OSQPost() 、OSSemPost()等函数去通知真正做该事件处理的那个任务,让任务完成中断事件的处理。另外一种是由中断服务子程序本身完成事件处理。调用中断退出函数 OSIntExit()标志着中断服务子程序的终结,OSIntExit()将中断嵌套层数计数器减 1。中断级任务切换函数 OSIntCtxSw() 。C/OS-II 的时间管理C/OS-II 能够提供周期性时钟信号,用于实现任务的正确延时和超时确认,节拍率
36、应在每秒 10 次到 100 次之间,即 10-100Hz,时钟节拍率越高,系统的额外负荷就越重。用户必须在多任务系统启动以后再激活时钟节拍信号发生器,也就是在调用 OSStart()之后,即在调用 OSStart()之后做的第一件事是初始化定时器中断。C/OS-II 的汇编语言时钟节拍中断服务子程序名称是 OSTickISR。OSTimtick()函数执行时以调用可由用户定义的时钟节拍接口函数 OSTimTickHook()开始,这个接口函数扩展了时钟节拍函数 OSTimtick() ,给用户一个完成特定处理的机会。C/OS-II 的任务间通信主要有三种:利用宏 OS_ENTER_CRITI
37、CAL()和 OS_EXIT_CRITECAL()来关闭中断和打开中断。利用函数OSSchedLock()和 OSSchekUnlock()对 C/OS-II 中的任务调度函数上锁和开锁。利用信号量OS_EVENT_TYPE_SEM、互斥信号量 OS_EVENT_TYPE_MUTEX、邮箱 OS_EVENT_TYPE_MBOX 或消息队列OS_ENENT_TYPE_Q 进行任务间通信。事件控制块 ECB:用于实现信号量管理、互斥型信号量管理、消息邮箱以及消息队列管理的 ITC 功能函数的基本数据结构。OSEventType:定义了事件的具体类型。OSEventCnt:当事件是一个信号量时,OS
38、EventCnt 是用于信号量的计数器。C/OS-II 的事件控制块有 4 种类型,需要使用 4 个不同的函数来创建,分别是OSSemCreate() 、OSMutexCreate() 、OSMboxCreate() 、OSQCreate() 。信号量控制下的任务间通信:在 C/OS-II 韩静霞,使用信号量进行任务间通信室,首先应该使用信号量创建函数 OSSemCreate 来创建一个信号量,并且对该信号量赋以初始计数值。如果信号量是用来表示一个或者多个事件的发生,那么该信号量的初始值应设为 0 。如果信号量是用于对共享资源的访问,那么该信号量的初始值应设为 1 。如果该信号量是用来表示允许
39、任务访问 n 个相同的资源,那么该初始值显然应该是 n,并把该信号量作为一个可计数的信号量使用。C/OS-II 的移植移植 C/OS-II 到一个嵌入式电路板上正常运行,必须满足一下要求:1、处理器的 C 编译器能产生可重入代码;2、用 C 语言就可以打开和关闭中断;3、处理器支持中断,并且能产生定时中断(通常在 10-100Hz 之间) ;4、处理器支持能够容纳一定量数据的硬件栈区;5、处理器有将栈区指针和其他 CPU 寄存器独处和存储到栈区或内存中的指令。嵌入式系统的开发5.1 开发嵌入式系统的基础知识嵌入式系统的开发过程可以划分为系统需求分析与规格说明、系统设计、构件设计、系统集成与测试
40、等几个步骤。需求分析与规格说明规格说明中应包含进行系统设计所需的足够信息。用户需求通常包括功能部分和非功能部分。非功能部分需求主要是指:性能、成本、尺寸、重量、功耗等。系统需求分析阶段以表格形式使用简练清晰的语句来描述系统的基本需求。表格中包含的主要项目如下:名称、目的、输入和输出、功能、性能、生产成本、功耗、尺寸和重量。为了更准确地反映用户的需求,设计者需要编写规格说明书,它是后续阶段设计者在设计时必须明确遵循的要求。规格说明书的编写应立足于系统分析阶段的系统需求表格,采用形式化的描述工具(如统一建模语言UML)来清晰地描述系统需求。规格说明书中通常只描述系统应做什么,而不要描述系统该怎么做
41、。系统设计也称为概要设计或总体设计,这个阶段要完成的任务是:根据规格说明书中所描述的系统需要实现的功能,确定如何实现这些功能的硬件和软件结构,特别是软件和硬件功能的划分,即哪些功能由硬件完成,哪些功能由软件完成,以求满足系统对功能、性能、成本、功耗等的要求。首先要集中考虑系统中的功能元素,然后在建造硬件和软件结构时考虑非功能约束。构件设计也称为详细设计,构件通常既包括硬件(如 FPGA、专用功能芯片、电路板等) ,也包括软件模块。系统设计和构件设计是嵌入式系统开发过程中两个最关键的阶段。系统集成与测试测试(Test)与调试(D 而不敢)既有联系又有区别。测试的目的是炎症模块/系统的功能和性能,发现错误。调试的任务是分析测试中发现的错误,检查原因,定位故障位置,采取适当的措施,修改软件/硬件,然后返回重新进行测试。嵌入式系统的开发平台与工具用于编程、调试的计算机称为宿主机(Host) ,用于程序最终运行的称为目标机(Target) ,两者借助数据通信手段进行连接。