《嵌入式开发系统概况.ppt》由会员分享,可在线阅读,更多相关《嵌入式开发系统概况.ppt(76页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、嵌入式开发系统概况 Still waters run deep.流静水深流静水深,人静心深人静心深 Where there is life,there is hope。有生命必有希望。有生命必有希望嵌入式开发系统概况和设备驱动n开发平台硬件资源n开发平台软件资源n嵌入式开发平台的硬件布局n嵌入式系统开发流程n集成开发环境n可以练习的实验项目开发平台硬件资源n1)CPU:ARM7TDMI结构芯片S3C44B0X,工作频率60MHz;n2)BIOS:2M,NOR FLASH;n3)内存:8M,SDRAM;n4)海量存储器:16M,NAND Flash;n5)键盘:17键数字小键盘;n6)显示:32
2、0240、256色LCD,带四线电阻式触摸屏;n7)USB接口:D12芯片,USB 1.1标准;n8)串口:2路,最高波特率115200 b/s;n9)网络接口:RTL8019,10M以太网;n10)CAN接口:波特率125Kb、250Kb、500Kb、1Mb;n11)调试接口:JTAG,14针、20针;n12)电机:直流电机,步进电机(带1/64减速器);n13)A/D:ARM自带8路10位A/D,满量程2.5V,4路电位器,4路扩展;n14)D/A:10位,满量程4.096V;n15)LED:8个,共阴,与键盘同由ZLG7289芯片驱动;n16)音频输出:IIS总线,UDA1341芯片,4
3、4.1KHz音频;n17)扩展插槽:2个,提供系统总线以及空余资源接口;嵌入式微处理器n嵌入式微处理器(EMPU)、嵌入式微控制器(MCU)、嵌入式DSP处理器(EDSP)、嵌入式片上系统(SOC)nARM、MIPS、68K、DSP、nARM7、ARM9、ARM11、XSCALE、n本开发系统的选择:ARM7TDMI结构芯片S3C44B0X ARMAdvanced RISC Machines nARM(Advanced RISC Machines),既可以认为是一个公司的名字,也可以认为是对一类微处理器的通称,还可以认为是一种技术的名字。nARM公司是专门从事基于RISC技术芯片设计开发的公司
4、,作为知识产权供应商,本身不直接从事芯片生产,靠转让设计许可由合作公司生产各具特色的芯片,世界各大半导体生产商从ARM公司购买其设计的ARM微处理器核,根据各自不同的应用领域,加入适当的外围电路,从而形成自己的ARM微处理器芯片进入市场。ARM微处理器的特点 n采用RISC架构的ARM微处理器一般具有如下特点:n1、体积小、低功耗、低成本、高性能;n2、支持Thumb(16位)/ARM(32位)双指令集,能很好的兼容8位/16位器件;n3、大量使用寄存器,指令执行速度更快;n4、大多数数据操作都在寄存器中完成;n5、寻址方式灵活简单,执行效率高;n6、指令长度固定;ARM微处理器系列 nARM
5、微处理器目前包括下面几个系列,以及其它厂商基于ARM体系结构的处理器,除了具有ARM体系结构的共同特点以外,每一个系列的ARM微处理器都有各自的特点和应用领域。n ARM7系列n ARM9系列n ARM9E系列n ARM10E系列n SecurCore系列n Inter的Xscalen Inter的StrongARMARM7微处理器系列 nARM7系列微处理器为低功耗的32位RISC处理器,最适合用于对价位和功耗要求较高的消费类应用。ARM7微处理器系列具有如下特点:n具有嵌入式ICERT逻辑,调试开发方便。n极低的功耗,适合对功耗要求较高的应用,如便携式产品。n能够提供0.9MIPS/MHz
6、的三级流水线结构。n代码密度高并兼容16位的Thumb指令集。n对操作系统的支持广泛,包括Windows CE、Linux、Palm OS等。n指令系统与ARM9系列、ARM9E系列和ARM10E系列兼容,便于用户的产品升级换代。n主频最高可达130MIPS,高速的运算处理能力能胜任绝大多数的复杂应用。nARM7系列微处理器包括如下几种类型的核:ARM7TDMI、ARM7TDMI-S、ARM720T、ARM7EJ。其中,ARM7TMDI是目前使用最广泛的32位嵌入式RISC处理器,属低端ARM处理器核。ARM7TDMI结构nT取至THUMB,表示支持16bit的高代码密度的THUMB指令集。T
7、HUMB指令集是ARM指令集的子集,并且压缩到16bit字长。在系统中合理地交叉使用ARM和THUMB指令集,可以使系统在达到设计要求的同时,尽可能地减小代码量。nD取至Debug,表示支持Debuging功能。nM取至Multiplier,表示具备32bit硬件乘法器。nI取至ICE,表示支持Embedded-ICE接口,可进行在线仿真。ARM微处理器的寄存器结构 nARM处理器共有37个寄存器,被分为若干个组(BANK),这些寄存器包括:n 31个通用寄存器,包括程序计数器(PC指针),均为32位的寄存器。n 6个状态寄存器,用以标识CPU的工作状态及程序的运行状态,均为32位,目前只使用
8、了其中的一部分。ARM微处理器的工作状态 n从编程的角度看,ARM微处理器的工作状态一般有两种,并可在两种状态之间切换:n第一种为ARM状态,此时处理器执行32位的字对齐的ARM指令;n第二种为Thumb状态,此时处理器执行16位的、半字对齐的Thumb指令。n当ARM微处理器执行32位的ARM指令集时,工作在ARM状态;当ARM微处理器执行16位的Thumb指令集时,工作在Thumb状态。在程序的执行过程中,微处理器可以随时在两种工作状态之间切换,并且,处理器工作状态的转变并不影响处理器的工作模式和相应寄存器中的内容。ARM处理器模式 nARM微处理器支持7种运行模式,分别为:n 用户模式(
9、usr):ARM处理器正常的程序执行状态n 快速中断模式(fiq):用于高速数据传输或通道处理n 外部中断模式(irq):用于通用的中断处理n 管理模式(svc):操作系统使用的保护模式n 数据访问终止模式(abt):当数据或指令预取终止时进入该模式,可用于虚拟存储及存储保护。n 系统模式(sys):运行具有特权的操作系统任务。n 未定义指令中止模式(und):当未定义的指令执行时进入该模式,可用于支持硬件协处理器的软件仿真。Samsung S3C44B0XSamsung S3C44B0XnSamsung S3C44B0X微处理器是三星公司专为手持设备和一般应用提供的高性价比和高性能的微控制器
10、解决方案,它使用ARM7TDMI核,工作在66MHZ。为了降低系统总成本和减少外围器件,这款芯片中还集成了下列部件:n8KB Cache、外部存储器控制器、LCD控制器、4个DMA通道、2通道UART、1个多主I2C总线控制器、1个IIS总线控制器,5通道PWM定时器及一个内部定时器、71个通用I/O口、8个外部中断源、实时时钟、8通道10位ADC等。基于基于ARMARM的嵌入式硬件平台体系结的嵌入式硬件平台体系结构构开发平台软件资源 n1)UarmJtag并口仿真器驱动程序;n2)23个实验案例源代码n3)UCOS-II操作系统、文件系统、驱动程序、API函数的库文件;嵌入式操作系统嵌入式操
11、作系统n近200种操作系统,WinCE、Linux、Vxworks、QNX、Nucleus、n适于学习的源代码开放的操作系统:Linux、C/OSnLinux:层次结构且内核完全开放、网络功能强大、完整开发工具、广泛的硬件支持、遵循通用国际标准,便于程序的移植 nC/OS:源代码公开、实时内核、易懂、易学、易用嵌入式开发平台的硬件布局 微处理器与接口设计微处理器与接口设计嵌入式操作系统嵌入式操作系统嵌入式系统编程嵌入式系统编程嵌入式软硬件协同设计嵌入式软硬件协同设计嵌入式系统开发实践嵌入式系统开发实践嵌入式系统设计集成开发环境nARM SDT 2.5开发环境 nADS1.2 开发环境 n集成开
12、发环境的使用,参看实验指导讲义可以练习的实验项目n实验一A:ARM SDT 2.5开发环境n实验一B:ADS1.2 开发环境n实验一C:超级终端设置及BIOS功能使用n实验二 ARM的串行口实验n实验三 键盘及LED驱动实验n实验四 D/A接口试验n实验五 ARM的A/D接口实验n实验六 电机转动控制实验n实验七 LCD的驱动控制实验n实验八 触摸屏程序设计n实验九 CAN总线通讯实验n实验十 定时器中断和驱动程序实验n实验十一 BOOTLOADER实验n实验十二A C/OS-II在ARM微处理器上的移植及编译n实验十二B 完善的C/OS-开发框架n实验十三 音频实验n实验十四 绘图的API函
13、数n实验十五 系统的消息循环n实验十六 文件的使用n实验十七 列表框控件的使用n实验十八 文本框控件n实验十九 多任务和系统时钟n实验二十UDP通讯实验n实验二十一 综合实验n实验二十二 模拟电子画板实验触摸屏应用n实验二十三 基于ARM的多通道仪表信号采集实验多任务与A/D转换嵌入式系统课题设计可选课题nGPS通讯与路况信息系统 n车辆照明模拟实验 n车内空调系统实验 n车内音频播放系统 n车速控制和刹车系统 n系统综合实验(看人数情况)实验方式及要求n46人一组,每组选定一个课题项目n课题内部进行任务规划与分配n对课题进行功能、性能方面的分析n完成硬件及操作系统裁减的规划设计n在开发平台上
14、实现操作系统的移植与裁减n完成课题各个任务模块的分析、模拟与仿真n系统调试n实验过程及经验总结嵌入式系统开发流程n系统功能、性能分析n系统方案总体设计n硬件平台的选择与裁减n操作系统的选择与裁减n最小系统的设计与验证n应用程序的设计n性能指标优化n开发经验总结GPS通讯与路况信息系统通讯与路况信息系统n1.背景背景n全球定位系统(Global Positioning System),通常简称GPS,是一个中距离圆型轨道卫星定位系统。它可以为地球表面绝大部分地区提供准确的定位和高精度的时间基准。n车辆自动导航系统,它根据GPS接收机提供的车辆当前位置和用户输入的车辆目的地,参照电子地图计算合适的
15、行驶路线并在行驶中以适当的方式给驾驶员提供必要的信息。2.车辆车辆GPS导航系统的功能:导航系统的功能:n及时显示汽车在预先制定的电子地图中的位置、及时显示汽车在预先制定的电子地图中的位置、行驶速度以及与目的地距离;行驶速度以及与目的地距离;n输入目的地后主动生成一条去目的地的最佳行输入目的地后主动生成一条去目的地的最佳行驶路线,并在转弯时用语言提醒用户,使其去驶路线,并在转弯时用语言提醒用户,使其去任何地方不用问路就可直接到达;任何地方不用问路就可直接到达;n随时可查询沿途的酒店、商店、加油站、修理随时可查询沿途的酒店、商店、加油站、修理厂、车站、码头等处的最新路况信息,为用户厂、车站、码头
16、等处的最新路况信息,为用户提供方便;提供方便;n可在汽车遭遇抢劫后,在指定范围内停止发动可在汽车遭遇抢劫后,在指定范围内停止发动机的运行,并把汽车所出的位置报告警察;机的运行,并把汽车所出的位置报告警察;使用处理流程n用户输入目的地。输入方法主要有下面几种。n在系统显示的电子图上直接点击选取地点;n借助外接键盘,以类似PC机的中文输入法将地名输入导航系统;n确定位置。n行驶路线。在用户输入了目的地之后,导航系统根据电子地图上存储的地图信息,就可以自动算出一条最合适的路线,指示给用户;n行驶中的导航。在必要时刻向驾驶员提示信息。比如,车辆行驶到系统推荐路线中应转弯的路口前,系统应提示驾驶员:“2
17、00m后请向左转”。3系统总体设计系统总体设计n由于实验平台没有配备GPS模块,本实验通过模拟实现。在LCD上显示模拟电子地图,实验者在触屏上直接点击选取目的地,然后实验者从PC机键盘输入汽车当前位置,通过串口传到ARM,用以模拟GPS模块接收到的从地面控制中心传来的汽车位置数据。导航系统将传回的数据与电子地图对比,得到汽车的当前位置,然后计算出一条最佳行车路线,并显示在LCD上。4硬件平台选择与剪裁硬件平台选择与剪裁n剪裁后的硬件:nCPU:ARM7TDMI结构芯片S3C44B0X;nBIOS:2M,NOR FLASH;n内存:8M,SDRAM;n海量存储器:16M,NAND FLASH;n
18、USB接口:D12芯片,USB 1.1标准;n显示:320*240像素、256色LCD,带4线电阻式触摸屏;5操作系统的移植与裁剪操作系统的移植与裁剪n5.1 操作系统的选择n5.2 操作系统的移植n5.3 操作系统的裁剪n文件系统的建立;n必要的外设的驱动程序;n实现基于Unicode的汉字字库;n绘图等实用API;6.最小系统的设计与验证 n6.1 最小系统的设计n6.2 最小系统的验证7应用程序设计 n7.1 程序功能n7.2 界面设计n7.3 程序流程8指标优化指标优化n时间指标n资源占用指标n系统稳定性 9总结总结n在实验课题设计中,实现了哪些部分,使用到了哪些知识,掌握了哪些。n在
19、方案设计与系统调试过程中遇到的问题与解决方案n系统方案中还存在的缺陷n对该课题提出的创新性的见解n在实验中,希望能加强掌握的知识与实验有哪些?车辆照明模拟实验 n背景n智能化的汽车照明系统又称适应性的照明系统(Adaptive Lighting Systems),它包括自适应前照灯系统AFS(Adaptive Frontlighting Systems)、改进的的信号照明和车内照明控制三部分。适应性的前方照明系统AFSn适应性的前方照明系统AFS是EUREKA的1403号项目,欧洲的汽车公司、车灯公司和光源公司共同承担了这个项目,美国和日本的一些公司也参与了此一项目。AFS具有弯道照明BL(B
20、ending Light)、高速公路照明ML(Motorway Light)/乡间照明CL(Country Light)/城镇照明TL(Town Light)和恶劣天气照明AL(Adverse Weather Light)等功能。在城区驾驶时路面情况复杂,因而光形较宽,又由于车速不快,因而照射的距离不要很远。在高速公路,车速快,因而ML光束照射得远。在弯道处,BL应该给弯道以良好的照明。实验要求:n本次实验主要设计模拟AFS系统的部分功能。通过处理器对车速信息和方向信息的采集来控制车灯的照明方向和强度。同时接收控制信息,对车灯进行控制。实验模拟条件:n由于实验板上资源有限,对于AFS系统只能作
21、简单的模拟,用8个共阴极LED模拟两个前大灯,点亮不同的LED表示不同的照明焦点。从正中间起对8个LED作对称编号,1号LED用于模拟正常前大灯,2号LED用于模拟高速行驶时的远光灯,3号LED用于模拟转向时的侧光灯,4号LED用于模拟转向时的信号灯。因为没有复杂的传感器,所以对道路情况和天气情况的传感转变为对油门和车速的传感。用AD1模拟方向盘,采样其值用作对3号和4号LED的控制,用AD2模拟油门,当油门超过一定值时认为进入高速行驶路段,点亮远光灯。n利用键盘作为用户输入,模拟车内控制信息。车内空调系统 n背景:n汽车空调系统作为影响汽车舒适性的主要总成之一,为汽车提供制冷、取暖、除霜、空
22、气过滤和温度控制功能。实验要求:n车内智能空调系统将可以采样车内温度,读取用户输入温度,根据两个温度的差别,确定供暖风和还是冷风,并根据所需温差的大小控制风力的大小。同时,可以根据用户的需要,改变供风的风向和状态。实验模拟条件:n鉴于实验开发板上的资源有限,在模拟空调系统时,用直流电机的转动模拟空调压缩机运转,用步进电机的转动模拟空调风向的变化。用两个AD转换器分别表示车内温度和用户输入温度,用键盘的上下调整风向变化。空调运行状态的信息显示在LCD上。车内音频播放 n背景:nMP3等多种音乐格式的广泛流行。设计一套适宜人们放松精神,缓解疲劳的音频播放系统是十分必要的。播放系统需要可以显示音乐列
23、表、按照驾驶员的控制播放音乐、方便的调节音量和切换歌曲、并且播放系统带有传感器,当出现复杂道路情况,车速变化频繁时自动停止播放以免干扰司机驾驶。实验要求:n1.能够对.wav文件实现单声道,多声道选择播放n2.能够自动存储播放列表.n3.自由调整播放声音大小n4.当车开动后能自动关闭播放,以免妨碍司机开车n5.自由控制播放与停止.实验模拟条件:n实验箱已经能够满足音频播放的硬件要求MCUScreenKeyboardFLASHIIS 总线D/A主控器输出执行检测输入控制框图控制框图物理框图物理框图播放器车速控制和刹车系统车速控制和刹车系统n背景及规划:n速度控制系统,英文为Speed Contr
24、ol System;又称为巡航控制系统(Crusle Control System),缩写为CCS.n速度控制系统是一种减轻驾车者疲劳的装置。当汽车在长距离的高速公路行驶时,启动速度控制系统就可以自动将汽车固定在特定的速度上,免除驾车者长时间脚踏油门踏板之苦。另外,还有节省燃料和减少排放的好处,因为汽车都有对应的经济速度,当驾驶者将速度控制系统调置在经济速度上就可以起到省油的作用.实验模拟条件:n指令开关部分可以通过按键模拟。(车速调置开关、制动踏板、恢复开关)n车速传感器可以用一个模拟信号,经ad转换模拟。n油门执行模块用直流电机和步进电机模拟。系统设计主要完成ECU控制部分的设计,可以在u
25、cos操作系统下实现。ECU车速传感器指令开关油门执行器系统综合实验n1.背景n完整的汽车电子系统,是一个有机整体,把上述部分进行系统整合,形成汽车车载系统的完整解决方案,将很有实际意义实验要求:n利用CAN总线,把各个模块连接起来n实现CAN总线的通信n对于数据通信协议的规划实验条件:n实验箱已具备CAN总线资料下载:n网上搜集n以往的总结资料联系方式:gaoyi_TEL:89538345uC/OS-II移植实验移植实验实验目的n了解uC/OS-II内核的基本原理和主要结构n掌握将uC/OS-II内核移植到ARM处理器上的基本方法n掌握uC/OS-II下基本多任务应用程序的编写实验内容n学习
26、uC/OS-II再ARM处理器上的移植过程n编写简单的多任务应用程序,同时实现跑马灯和数码管显示的功能预备知识n了解嵌入式操作系统的构架以及具体的uC/OSII的组成n了解操作系统的移植方法uC/OS-II概述nuC/OS-II在特定处理器上的移植工作绝大部分集中在多任务切换的实现上,因为这部分代码主要是用来保存和恢复处理器现场,许多操作如读写寄存器操作不能用C语言,只能使用特定的处理器的汇编语言来完成。n将uC/OS-II移植到ARM处理器上,需要完成的工作非常简单,大部分的修改工作集中在三个和体系结构相关的文件中,代码量大约是500行。这三个文件是OS_CPU_C.c、OS_CPU_C.H
27、以及OS_CPU_A.S。移植的主要工作n用#define设置一个常量的值(OS_CPU.H)n声明10个数据类型(OS_CPU.H)n用#define声明三个宏(OS_CPU.H)n用C语言编写六个简单的函数(OS_CPU_C.C)n编写四个汇编语言函数(OS_CPU_A.ASM)n根据处理器的不同,一个移植实例可能需要编写或改写50至300行的代码,需要的时间从几个小时到一星期不等。OS_CPU.Hn1.数据类型(与编译器相关)n2.与处理器相关的代码 OS_ENTER_CRITICAL()和和OS_EXIT_CRITICAL()OS_ENTER_CRITICAL();/*C/OS-II
28、临界代码段*/OS_EXIT_CRITICAL();OS_STK_GROWTH n3.OS_TASK_SW()它是在C/OS-从低优先级任务切换到最高优先级任务时被调用的。OS_CPU.H的移植q数据类型定义typedef unsigned char BOOLEAN;typedef unsigned char INT8U;/*Unsigned 8 bit quantity */typedef signed char INT8S;/*Signed 8 bit quantity */typedef unsigned int INT16U;/*Unsigned 16 bit quantity */t
29、ypedef signed int INT16S;/*Signed 16 bit quantity */typedef unsigned long INT32U;/*Unsigned 32 bit quantity */typedef signed long INT32S;/*Signed 32 bit quantity */typedef float FP32;/*Single precision floating point */typedef double FP64;/*Double precision floating point */*Define data types for ba
30、ckward compatibility.*/#define BYTE INT8S /*.to uC/OS V1.xx.Not actually needed for.*/#define UBYTE INT8U /*.uC/OS-II.*/#define WORD INT16S#define UWORD INT16U#define LONG INT32S#define ULONG INT32Uq堆栈单位定义typedef unsigned int OS_STK;/*Each stack entry is 16-bit wide */OS_CPU.H的移植nARM处理器相关宏定义n#define
31、OS_ENTER_CRITICAL()ARMDisableInt()n#defineOS_EXIT_CRITICAL()ARMEnableInt()n堆栈增长方向 堆栈由高地址向低地址增长,这个也是和编译器有关的,当进行函数调用时,入口参数和返回地址一般都会保存在当前任务的堆栈中,编译器的编译选项和由此生成的堆栈指令就会决定堆栈的增长方向。n#define OS_STK_GROWTH OS_CPU_C.CnOSTaskStkInit()nOSTaskCreateHook()nOSTaskDelHook()nOSTaskSwHook()nOSTaskStatHook()nOSTimeTickHo
32、ok()n唯一必要的函数是OSTaskStkInit(),其它五个函数必须得声明但没必要包含代码。OS_CPU.c的移植q任务堆栈初始化该函数由OSTaskCreate()或OSTaskCreateExt()调用,用来初始化任务的堆栈并返回新的堆栈指针stk。初始状态的堆栈模拟发生一次中断后的堆栈结构。在ARM体系结构下,任务堆栈空间由高至低依次将保存着pc、lr、r12、r11、r10、r1、r0、CPSR、SPSR,下图说明了OSTaskStkInit()初始化后的也是新创建任务的堆栈内容。堆栈初始化工作结束后,OSTaskStkInit()返回新的堆栈栈顶指针,OSTaskCreate(
33、)或 OSTaskCreateExt()将指针保存在任务的OS_TCB中。OS_CPU.c的移植n系统HOOK函数:在这个文件里面还需要实现几个操作系统规定的hook函数,这些函数为用户定义函数,它将在相应的操作系统调用后执行由用户定义的这些hook函数,执行特定的用户操作,如果没有特殊需求,则只需要简单地将它们都实现为空函数就可以。这些函数包括:nOSSTaskCreateHook()nOSTaskDelHook()nOSTaskSwHook()nOSTaskStatHook()nOSTimeTickHook()OS_CPU.c的移植n中断级任务切换函数n该函数由OSIntExit()和OS
34、ExIntExit()调用。它是在时钟中断服务例程中发现有高优先级任务等待的时钟信号到来,则需要在中断退出后并不返回被中断任务,而是直接调度就绪的高优先级任务执行。这样做的目的主要是能够尽快地让高优先级的任务得到响应,保证系统的实时性能。n该函数通过设置一个全局变量need_to_swap_context标志以表示在中断服务程序中进行任务切换,并在OSTickISR()中判断该变量以进行正确的动作。n其函数如下:nvoid OSIntCtxSw(void)nnneed_to_swap_context=1;nOS_CPU_A.ASMnC/OS-的移植实例要求用户编写四个简单的汇编语言函数:nOS
35、StartHighRdy()nOSCtxSw()nOSIntCtxSw()nOSTickISR()OSStart()调用本函数;OSStart()负责使就绪状态的任务开始运行;OSStartHighRdy()负责获取新任务的堆栈指针并从堆栈指针中恢复新任务的所有处理器寄存器。OSStart()调用本函数;OSStart()负责使就绪状态的任务开始运行;OSStartHighRdy()负责获取新任务的堆栈指针并从堆栈指针中恢复新任务的所有处理器寄存器。OSIntExit()调用本函数;OSIntExit由OSTickISR调用,负责在定时中断中任务之间的切换;OSIntCtxSw()主要保存当前
36、任务堆栈指针,并将新任务对应的处理器寄存器从堆栈中恢复出来。定时中断函数;OSTickISR()主要负责在进入时保存处理器寄存器,完成任务的切换,退出时恢复寄存器并返回。OSStartHighRdy()n运行优先级最高的就绪任务nvoid OSStartHighRdy(void)Call user definable OSTaskSwHook();Get the stack pointer of the task to resume:Stack pointer=OSTCBHighRdy-OSTCBStkPtr;/设置新的当前任务的地址 OSRunning=TRUE;Restore all pr
37、ocessor registers from the new tasks stack;Execute a return from interrupt instruction;OSCtxSw()n任务级的任务切换函数nvoid OSCtxSw(void)保存处理器寄存器;将当前任务的堆栈指针保存到当前任务的OS_TCB中:OSTCBCur-OSTCBStkPtr=Stack pointer;调用用户定义的OSTaskSwHook();OSTCBCur =OSTCBHighRdy;OSPrioCur=OSPrioHighRdy;得到需要恢复的任务的堆栈指针:Stack pointer=OSTCBH
38、ighRdy-OSTCBStkPtr;将所有处理器寄存器从新任务的堆栈中恢复出来;执行中断返回指令;OSIntCtxSw()n中断级的任务切换函数nvoid OSIntCtxSw(void)调整堆栈指针去掉在调用OSIntExit(),OSIntCtxSw()过程中压入堆栈的多余内容;将当前任务堆栈指针保存到当前任务的OS_TCB中:OSTCBCur-OSTCBStkPtr=堆栈指针;调用用户定义的OSTaskSwHook();OSTCBCur =OSTCBHighRdy;OSPrioCur=OSPrioHighRdy;得到需要恢复的任务的堆栈指针:堆栈指针=OSTCBHighRdy-OSTC
39、BStkPtr;将所有处理器寄存器从新任务的堆栈中恢复出来;执行中断返回指令;OSTickISR()n时钟节拍ISRnvoid OSTickISR(void)保存处理器寄存器;调用OSIntEnter()或者直接将 OSIntNesting加1;调用OSTimeTick();调用OSIntExit();恢复处理器寄存器;执行中断返回指令;多任务应用程序的编写nC语言入口函数Mainn调用函数ARMTargetInit初始化ARM处理器n调用OSInit进行操作系统初始化n调用OSTaskCreate函数两个任务:TaskLED和TaskSEGn调用ARMTargetStart函数启动时钟节拍中断n调用OSStart启动系统任务调度n任务处理函数nvoid Main(void)nnARMTargetInit();/硬件初始化硬件初始化nOSInit();/uC/OS初始化初始化nOSTimeSet(0);/系统时间设置系统时间设置n /创建主任务创建主任务nOSTaskCreate(TaskStart,(void*)0,&StackMainSTACKSIZE-1,0);nOSStart();/启动操作系统启动操作系统n