摘要摘要随着数字技术的不断发展,数字存储示波器成为集测量、显示、运算、记录等功能于一体的智能化测量仪器。一般数字存储示波器的价格较模拟示波器要昂贵,所以没有模拟示波器普及。本课题旨在通过对DSO原理性的研究,生产具有自主产权的高性价比的数字存储示波器,并为开发具有更高性能的DSO积累经验和理论基础。本设计首先通过分析|Ic/os—II嵌入式操作系统和AI瑚S3C2410处理器的特点,详细介绍了lJc/os-II嵌入式操作系统向ARMS3C2410处理器移植的过程,并将示波器的功能要求分解为七个线程分别处理;其次,设计了一种结构合理清晰,扩展性好,具有良好的移植性,人机界面友好的菜单系统和按键模块。第三,为解决波形显示效率低的问题,提出了一种高效的波形显示算法;第四,分析三次样条插值法与正弦最小二乘拟合算法对于不同波形的处理效果;设计了一种软件测量波形周期的算法。关键词DSOuc/os-II链表波形显示三次样条插值正弦拟合IVAbstractWiththecontinuousdevelopmentofdilgitaltechnology,digitalstorageoscilloscopebecomeanintelligentmeasurementinstnmaentsofmeasurement,display,calculation,recordingandotherfunctions.Digitalstorageoscilloscopeismoreexpensivethananalogoscilloscopeingeneral,SOitislesspopularthananalogoscilloscope.Thepurposeofthisprojectisproductingthehi曲costperformanceDSOwithpropertyfightsandacgumulattingexperienceandtheoreticalbasisforthedevelopmentofbetterperformanceDSO.First,thisprojectdeseribstheprocessofthertc/os-IIembeddedoperatingsystemtransplantintoARMS3C2410processoranddividethefunctionofDSOintoseventhreadsbyanalyzingthelae/os-IIembeddedoperatingsystemandthecharacteristicsofARMS3C2410processor.Second,thisprojectdesignsascalablekeymoduleandmenuwithclearandrationalstructure,goodportabilityandfriendlyinterface.Third,thisprojectdesignsallefficientalgorithmofwaveformdisplayforsolvingtheproblemoflowefficiencyofthewaveformdisplay.Fourth,byanalyzingthehandledresultbythecubicsplineinterpolationalgorithmandsinefittingalgorithmfordifferentwaveforms;designaalgorithmformeasuringthewaveformcycle.KeywordsDSOI.tc/os—IIWaveformdisplayListCubicsplineinterpolationSinefittingV绪论1绪论1.1数字存储示波器的简介示波器是一种应用十分广泛的电信号测量仪器。数字存储示波器不但能观测信号波形的全貌,而且还能测量出信号的幅度、频率、周期、脉冲宽度、信号的相位关系等参数。这些功能是其它电子测量设备不能比拟的。模拟示波器的缺点是只能观测周期信号。对于非周期性的瞬间变化信号,用模拟示波器观测是非常困难的。为了提升示波器的性能,扩大示波器的使用范围,实现诸如无失真地显示并存储信号等功能,就必须采用数字技术n1。随着数字技术理论的日益成熟和数字电路以及微处理器技术的迅速发展,尤其是高速A/D转换器和半导体存储器的发展,数字存储示波器DSO(DigitalStorageOscilloscope)飞速发展起来。示波器已从初期的定性分析的工具,发展到可以用来精确测量工具。ADC是数字存储示波器十分总要的元器件,其性能的高低直接决定了示波器采样率的大小。ADC将输入示波器的模拟信号转换为对应数字量,之后,数字信号被存储在RAM中。采集完成后,处理器从RAM中调出这一系列数字信号,经过一定的处理后对应的波形在显示器上显示。数字存储示波器成长迅猛,目前已成为各个学术科研机构的主流电信号测量工具,只要价格上有所降低,则一定会逐步全面取代模拟示波器。数据存储示波器工作的基本原理:被测信号通过前级调理电路被衰减、放大、耦合后变成在ADC电压转换范围之内的信号,不断循环的被ADC采样样、量化、编码后成为数字信号并存入RAM中,一般DSO都有一定的存储深度,当存储数据量超过存储深度后,之前被存储的数据不断被新数据覆盖。与此同时,触发电路不断监视输入信号,只有满足触发条件,经微处理器处理后的显示波形才能达到同步的效果比1。1.2数字存储示波器的特殊功能1数字存储示波器可以存储波形并且需要时可以回放波形。因为数字存储示波器将经A/D转换后的数据存入RAM,显示时,将数据取出处理后显示,如选择1绪论保存,数据将被存入flash,供用户需要时回放。2光标测量功能。即DSO可以通过时间光标、电压光标、触发光标测量光标位置的时间差、电压值、触发电平值。光标测量功能是DSO所特有的,它既克服了模拟示波器由用户通过估值来估算电压数值的视读误差,又增加了界面的开放性。3参数测量功能。数字存储示波器可以通过按键控制,自动测量波形的各个参数并在显示屏的某一区域显示,如波形的最大值/最小值、脉冲宽度、平均值、有效值、峰峰值、上升/下降时间、频率、周期等。这些测量功能都是不同的测量算法通过软件编程对存入RAM中的数据处理后得到的。4预触发。DSO除了具有模拟示波器的后触发功能外,还具有预触发观察能力,即可以观察触发之前的信号部分。触发点只是防止波形显示混叠的一个显示参考点,触发点前后的数据都已经被存储在RAM中。5滚屏与单次捕捉。滚屏是针对慢速信号的,并可检测数据中随机出现的偶发信号;单次捕捉用于观测单次瞬变信号。6与计算机、绘图仪、打印机通信,实现I/O输出,用于对波形的存储、研究与打印。7自诊断和自校验口1。1.3课题研究的意义国内目前大中专院校教学和实验仍在大量使用模拟示波器,鉴于上述数字存储示波器的优点,故对数字存储示波器需求量很大。本课题源于公司针对学校等大量需求较廉价DGO的研发项目。目的是通过对DSO原理性的研究,生产具有自主产权的数字存储示波器,并为开发具有高性能的DSO积累经验。课题的主要任务是将IIc/os—II嵌入式操作系统向ARMS3C2410处理器上移植,研究与开发数字存储示波器的应用算法和程序。2硬件系统的介绍2硬件系统的介绍2.1硬件系统的总体概述由示波器系统基本框图2.1可以看出系统基本可以分为四层,第一个层:系统输入、菜单处理、界面管理、波形显示四部分,它们处于最外层,直接面对用户,供用户操作和观察;第二层:系统管理和显示驱动,这层是功能应用软件部分,作用是接收、处理用户的操作、实现示波器的基本功能,是主处理程序;第三层:HAL(HardwareAbstractionLayer,硬件抽象层)它主要包含底层函数和数据结构,是硬件的软件抽象形式,主要对系统硬件初始化,完成对硬件的控制。第四层是系统硬件。图2.1示波器系统基本框图3硬件系统的介绍整个示波器系统分为两大部分,一部分是硬件系统,一部分是软件系统即第二层:系统管理和显示驱动、第三层:HAL。其中硬件系统又分为①信号采集部分②信号处理与显示部分。二者分工不同,前级模拟电路主要包括探头、衰减电路、运放、DAC、RAM、同步电路和其它控制电路等。信号采集部分主要是处理输入的模拟信号,具体是对模拟信号进行放大、衰减、限幅、采样、数字化等;产生触发信号,即用比较器产生的触发信号,达到显示同步。信号采集部分的核心器件是CPLD和ADC。信号处理与显示部分主要包括主处理器、外围接口电路、供电电路和显示控制电路等。信号处理与显示部分主要负责A/D转换后的采样数据的处理,以及提供频率测量、数据传送、显示控制等功能。它所包含ARMS3C2410处理器模块,是操作系统运行的载体,用于完成对数据的处理和各种控制信号的发出。按键模块包括一片8位单片机、按键旋钮、LED和接口电路等。它通过RS232串口与2410处理器通讯,单片机将按键信息以对应的编码形式传送。2.2信号采集部分硬件原理下图2.2是信号采集部分的电路原理框图。其中前级调理电路主要包含继电器组、分压电阻连、可调增益放大器、DAC控制器。被测信号通过前级调理电路的衰减、放大、耦合后变成在ADC电压转换范围之内的信号,同时削弱了其它信号的干扰。本系统使用了两片CPLD。其中信号采集部分的CPLD主要负责控制ADC采样、A/D转换和采样数据的存储并且发送同步信号。这样,不仅节约了成本,而且提高了示波器采样和处理速度。两通道采样数据分别存储在两片RAM中,当需要时,通过数据总线送至¥3C2410处理。4硬件系统的介绍控制线模拟信号线c=====》数据线图2.2信号采集部分硬件原理框图2.3信号处理与显示部分硬件原理信号处理与显示部分主要有以下几个模块:CPU模块、内存模块、FLASH模块、总线控制模块、CPLD模块、液晶模块。显示时,信号采集部分RAM中的采样数据,被处理器读取,经过软件插值、波形的重构等处理后,被送至显示控制CPLD。示波器采用分层显示的方法,即波形数据与网格标尺分层显示,其中网格标尺的绘制由CPLD完成。FLASH用来存储处理器的程序代码,字库和一些需要保存的参数等。示波器信号处理与显示部分的核心器件是ARMS3C2410处理器,它是uc/os—II操作系统运行的载体,也是数据处理的核心,与总线控制器相结合完成数据调度。外部的接口有USB接口、串口、键盘接口。5硬件系统的介绍接插件l接菩土兰兰U望|一一.|弋t.一一t=一j一一一一i>离圜:l总线控制1...............t.一IIR』蛐讧IlIIIIFLASH刀卜、24lO!(J,4飞7卜\显示控制CPLD\IF广一∑一一一一一≮I智倍LI:I晶振j:。一:之多电源卜!世一一一.:10…j液晶显示器控制线模拟信号线c======≥’数据线图2.3信号处理与显示部分硬件原理框图2.4小结示波器的系统分为硬件系统和软件系统。硬件系统又分为信号采集部分和信号处理与显示部分。信号采集部分主要负责信号的采集、调理、存储和触发:信号处理与显示部分的核心器件是ARMS3C2410处理器,它主要负责对采样信号的处理,与总线控制器相结合完成数据调度,并与CPLD配合完成波形的显示,它可通过USB口、串口、键盘接口等与外部进行通讯。6IIc/os-II嵌入式操作系统的移植3PC/OS--II嵌入式操作系统的移植3.1引言嵌入式系统一般包括硬件(处理器、存储器、I/0设备等)和嵌入式操作系统(EmbeddcdOperationSystem,EOS)。嵌入式操作系统是嵌入式系统的重要组成部分。它应具备符合硬件特点的系统内核、图形界面、通信协议、底层驱动软件、设备驱动接口等。嵌入式操作系统(EOS)可以使硬件虚拟化,使得开发人员从复杂的驱动程序移植和维护中解脱出来,并且可以有效管理十分复杂的系统资源。与通用操作系统相比,嵌入式操作系统在系统实时性、可裁剪性、硬件的依赖性、可靠性以及应用的专用性等方面特点明显嘲。3.2lIlIc/os-II操作系统的简介c/os操作系统是加拿大软件工程师JeanJ.Labrosse于1992年发明的一个精简的实时操作系统。至今经过不断地完善,已经成为一个完善的稳定可靠并已在世界范围得到广泛使用的实时操作系统。在医疗设备、路由器、手机及工业控制等领域应用十分普遍。11c/os已经通过了非常严格的测试,十分稳定可靠。Ilc/os—II是llc/os的升级版本。二者内核的基本结构和调度方法并没有什么变化,而源代码的文件结构与组织方式有不少的改进,使之更便于移植;增建了一些功能函数,其中最有用的是两个系统任务qPU符合检测任务与堆栈容量检查任务。这两个任务在调试应用程序时十分有用的口1。|Ic/os—II是以多任务、高效实时内核、多中断组成的一个高性能的嵌入式实时操作系统。实时内核统一管理整个系统使之协调工作。因此应用系统能够高效地完成任务切换、调度、任务间通信、中断管理、实时时钟管理、同步、互斥等功能。为了提高应用程序间的独立性、便于应用程序的功能扩展和整个嵌入式系统的实时性,在lIc/os—II中,可以将~个复杂的应用功能分割为多个相互独立的任务(即线程),根据任务的重要程度和被调用的频繁度来分配优先级,程度重要的和被调用频繁的任务被赋予高优先级。每个任务都会被分配一定大小的堆栈,在处于运行态的情况下独占处理器资源。pc/os-II的实时内核7laC/OS-II嵌入式操作系统的移植完成任务的调度、负责CPU时间分配等,CPU时间优先分配给中断事件,后分配给处于就绪态的优先级最高的任务。任务调度的内容包括选择任务的状态管理、最高优先权的任务、运行任务等,|lc/os—II的通信机制包括信号量、邮箱、消息队列以完成不同任务间的信息传递。作为一个优秀的实时操作系统,|Ic/os-II具有如下优点:源码公开一使l-tc/os-II操作系统在商业应用的成本大幅度降低。多任务一pc/os-II不支持时间片轮转调度法,它最多可以管理64个任务,任务有优先级高低之分。系统默认保留了8个,那么用户的应用程序最多可以包含56个不同优先级的任务。可裁减一如果只使用部分功能,只要在用户的应用程序中定义哪些IIc/os-II中的功能是应用程序需要的就可以一即裁剪代码。可剥夺一1.tc/os—II的实时内核是完全可剥夺型,它总是运行就绪条件下优先级最高的任务,终止低优先级的任务,将低优先级的任务的寄存器状态全部保存在自己的堆栈空间中。可确定性一|lc/os-II的全部函数调用与服务的时间是可知的,除了OSTimeTick0和某些事件标志服务,uc/os—II系统服务的执行时间不依赖于应用程序任务的多少n钔。任务栈一允许每个任务有自己独立的堆栈空间,这可以压低应用程序对RAM的需求。中断管理一中断可使正在执行的任务挂起,中断嵌套层数可达255层。嘲综合上述原因,使用lac/os-II操作系统作为嵌入式操作系统在¥3C2410上移植。3.3ARMS3C2410处理器的简介ARMS3C2410处理器是三星公司推出的16/32位微处理器。其实现了MMU,AMBABUS和Harvard高速缓冲体系结构。这一结构具有独立的16Kb指令cache和16Kb数据cache,用于在处理器与主存储器之间存放当前被使用的主存部分的内容,以减少访问主存的等待时间。采用统一编址方式管理存储器和外设I/0,所有存储器和外设都被映射到内存区。通过提供一套完整的通用系统外设,¥3C2410减少了整体系统成本,无需额外配置的组件。8lIc/os-II嵌入式操作系统的移植综合对芯片功能描述,集成在¥3C2410片上的功能如下:●1.2V内核供电,1.8V/2.5V/3.3V存储器供电,3.3V外部I/O供电,具备16KB的i-cache和16KBDcache/删处理器●130个通用I/0口和24通道外部电源●2通道SPI●1通道IIC-BUS接口●兼容SD主接口协议1.0版和姗c卡协议2.11兼容版●外部存储控制器●3通道UA盯●LCD控制器●4通道DMA并有外部请求引脚●2端口USB主机一端口USB设备●4通道P硼定时器和一通道内部定时器/看门狗定时器●8通道10位M)C和触摸屏接口●具有日历功能的RTC●相机接口●具有普通、慢速、空闲和掉电模式●具有PLL片上时钟发生器n帕3.4嵌入式IlC/OS-II系统的移植3.4.1pc/os-II体系简介及移植条件llc/os-II的体系结构如图3.1,操作系统的内核有以下三部分●系统配置文件:定义了一些配置选项。●与处理器无关的代码:实现时间管理、任务调度等功能。●与移植相关的代码:提供系统与硬件的接口、运行中需要的操作等。将uc/os-II向ARM处理器移植,就是修改、编写与ARM处理器特点相符合的函数和数据类型。通过对编译器及ARM处理器的字长使用的数据类型整体综合分析来修改OS^cPU.H文件中数据类型的声明。通过对ARM处理器的体系结构与特点、uc/os-II操作系统在任务或者中断切换时对被中断的任务现场保护和恢复机制进行整体分析,来修改、编写与ARM处理器有关的函数。9llc/os—II嵌入式操作系统的移植用户的应用程序应用程序入口uC/OS-II与处理器无关的文件系统配置文件0S-core.COs—cfz.cos_flag.cincludes.hosI出ox.cosmencos_muteX.C0s—q.cOS_Sem.Costask.cosmtime.c与移植相关的代码OS—CPU.ⅡOS—CPU_A.SOS—CPU_C.C设备3E动程序接口硬件平台图3.1llc/os-II的体系图操作系统的移植,就是确保一个实时嵌入式内核能够在其他的微处理器或者微控制器上正常的工作,并且可以进行应用程序的功能扩展。pc/os-II的源代码基本上都是用C语言写成的,这样给移植提供很大的便利;但与硬件部分有关的一部分代码仍需要由汇编语言来编写,因为uc/os-11只能通过汇编语言来读/写处理器寄存器H1。能够正常运行IIc/os—II操作系统的处理器需要满足一定的条件,而ARMS3C2410处理器正是满足这些条件的处理器之一。ARMS3C2410处理器的C编译器能产生可重入型代码,处理器支持硬件堆栈、支持中断,并有定时器中断功能且可以通过C语言开/关中断。ARMS3C2410处理器有专门的ARM指令集,这些指令能将堆栈指针或者其他寄存器的内容读出并且存储到堆栈中去。上述要求是能够移植uc/os-II全部代码的条件。3.4.2系统移植的内容lic/os—II的移植的工作主要集中在对OS_CPU.H,0S』PU.A.S,OS』PU.C这三lOlIc/os—II嵌入式操作系统的移植个文件中的函数和需要修改或者编写的代码上。●oS-cPU.H:与处理器、ADS相关的数据类型的重定义和三个宏定义中断开关、堆栈生长方向属性和任务切换等。OOS_CPUJ.S:用于完成Tick时钟、任务的切换、ISR相关处理、任务的执行的汇编代码。●OS_cPU.C:堆栈初始化函数的修改、功能扩展函数等n帕。3.4.2.1OS_CPU.H的修改1与处理器编译器相关的数据类型的定义考虑到移植的方便性,pc/os-II是通过typedef重新定义数据类型的,而没有直接采用编译器相关的数据类型的定义。通过查看编译器手册,应如下修改n翻:typedefunsignedcharBOOLEAN;typedefsignedcharINT8S://重定义有符号8位整型typedefunsignedcharINT8U;//重定义无符号8位整型typedefsignedshortINTl6S://有符号16位整型typedefunsignedshortINTl6U;//重定义无符号16位整型typedefunsignedintINT32U;//无符号32位整型typedefsignedintINT32S;//重定义有符号32位整型typedeffloatFP32://单精度浮点数typedefdoubleFP64;//重定义双精度浮点数typedefunsignedintOS_STK;//定义堆栈入口为无符号32位整型typedefunsignedintOS_CPU_SR://定义状态寄存器的大小(PSR=32位)因为AP瑚¥3C2410处理器堆栈是32位,因此,OSSTK声明为无符号32位整型。2堆栈生长方向的定义宏定义0S-sTKGROWTH常量来定义堆栈的生长方向。当其为0时,表示堆栈的生长方向是从低往高;当其为l时,表示堆栈生长的方向是从高往低。由于AI孙IS3C2410处理器堆栈是从高向低的,所以定义如下#defineOS—STK_GROWTH13开关中断的宏定义pc/os-II嵌入式操作系统的移植如果实时内核在访问系统临界区之前没有关中断,或在访问之后未恢复中断,那么临界段代码就可能被中断服务程序或多任务破坏。Ilc/os—II嵌入式实时操作系统同样如此。故|Ic/os-II需要一定的机制防止临界代码被破坏。IIc/os—II定义了OS_ENTER_CRITIcAL()和OSEXIT__CRITICAL0两个宏来关/开中断,这两个宏的定义是由微处理器决定的。通过定义OS_CRITICAL_METHOD的值来决定用哪种方法实现对OS_ENTERCRITICAL()和OS_EXIT_CRITICAL0两个宏的定义。当宏定义OS_CRITICALMETHOD==l:直接用ARM指令关/开中断完成OS_ENTERCRITICAL()和OSEXlT_CRITIcAL()。如果程序在进入临界区调用OS_ENTERCRITICAL()之前,中断已经被禁止,而退出临界区之后又调用OS_EXIT_CRITICALO,那么适得其反,中断将被允许,这与调用OS_ENTER_CRITICAL()之前中断被禁止的情况不符。这种结果不是原先所期望的。当宏定义OS_CRITICAL_METHOD==3,可以弥补上述问题的缺陷。当程序选择这种方法进入临界代码段时,要多定义一个局部变量cup_st用以保存当前处理器的状态,然后关中断;而OS_EXIT_CRITICAL()只需要将处理器之前的状态恢复。故宏定义如下:#defineOS—ENTERSRITICAL(){cpu—sr=OS_CPU—SR—Save();disable—interupts()//保存当前处理器的状态//关中断#defineOS_EXIT_CRITICAL(){os_cPU—SR—Restore(cpu—sr)://恢复处理器状态)4OS_TASK_SW()的宏定义OS_TASK_SW0宏指向的是一个处理函数,这个处理函数是操作系统从优先级低的任务切换到优先级高的任务时所调用函数。任务切换功能是将CPU寄存器中的内容存储到将要被挂起的任务堆栈中,将优先级高的任务堆栈中的内容恢复到CPU寄存器中。OSTASK—sw()通过os_CPU』.S文件中任务级切换函数OSCtxSw()来完成n引。#defineOS_TASK_SW()OSCtxSw012Ilc/os-II嵌入式操作系统的移植以上是oscPu.H文件中需要修改的主要内容。3.4.2.20S-cPU.C的修改在0S』PU.C文件中仅介绍任务堆栈初始化函数OSTaskStkInit0的修改。llc/os-II中,OSTaskCreat0是任务(即线程)建立函数,每个任务都有各自的任务堆栈空间,而OSTaskStkInit0函数正是用来初始化任务堆栈的口1。A跚处理器一种有37个寄存器,其中31个通用寄存器和6个状态寄存器。ARM体系结构共支持7种处理器模式,即USR用户模式、FIQ快速中断模式、IRQ中断模式、SVC超级用户模式、ABT中止、UND未定义模式、SYS系统模式。每一种模式都对应一组寄存器,一般R15作为程序计数器PC,R14作为链接寄存器LR,R13作为堆栈指针,CPSR是程序状态寄存器,SPSR是用来保存进入当前处理器模式前的上一个模式下的的CPSRn钔。当中断发生时,寄存器的状态被按照由高到低的地址顺序压入堆栈,依次保存PC、LR、R12-RO、CPSR和SPSR如图。长方向lIl图3.2寄存器入栈顺序OS—STK*OSTaskStkInit(void(*task)(void*pd),void*p_arg,OS—STK*ptos,INTl6Uopt)‘161{OS—STK*stk:opt//声明一个OS—STK类型的指针=opt:13uc/os-II嵌入式操作系统的移植stk2ptos://加载堆栈的起始地址//将指向任务代码的指针赋予Pc//任意设置的初始化值*(stk)=(OS-sTK)task;半(一stk)=(INT32U)Oxl4141414L:半(--stk)=(INT32U)Oxl2121212L:宰(一stk)=(INT32U)0x11111111L:木(一stk)=(INT32U)OxlOlOlOlOL:木(--stk)=(INT32U)Ox09090909L;木(--stk)=(INT32U)Ox08080808L;:Ic(--stk)=(INT32U)Ox07070707L;木(--stk)=(INT32U)Ox06060606L;木(--stk)=(INT32U)Ox05050505L;木(--stk)=(INT32U)Ox04040404L;:Ic(--stk)=(INT32U)Ox03030303L;幸(--stk)=(INT32U)0x02020202L;:lc(--stk)=(INT32U)OxOlOlOlOiL;:Ic(一一stk)=(INT32U)p_arg;//任意设置的初始化值//任意设置的初始化值n刚:Ic(一stk)=(INT32U)ARM_SVC』ODE;return(stk)://返回堆栈指针3.4.2.3os_cPU._A.S的编写1OSStartHighRdy()OSStartHighRdy0函数被系统启动函数OSStart0调用,其功能是让进入就绪状态优先级最高的任务运行。此函数的任务就是将优先级最高的任务的任务堆栈中的寄存器信息完整的恢复出来,并执行中断的返回m1。其程序模块如下:MSRLDRMOVBXLDRMOVCPSR_cxsf,#OxD3rO,=OSTaskSwHooklr,pcr0r4,=OSRunningr5.#l//进入超级用户模式并且禁IRQ和FIQ//调用OSTaskSwHook0函数//将OSRunning赋值l,表示系统已经运行14uc/os-II嵌入式操作系统的移植STRBr5,[r4]LDRr4,=OSTCBHighRdy//通过OSTCBHighRdy获得堆栈指针LDRr4,[r4]LDRsp,[r4]LDRr4,[sp],#4MSRSPSR_cxsf,r4//恢复SPSRLDMFDsp!,{rO—r12,lr,pc}‘//恢复其它寄存器,启动任务2OSCtxSwO在0S-cPU.H文件中任务切换函数OSCtxSw()被重新宏定义为0SJASl(-sW()。此函数的功能就是将当前任务的CPU寄存器状态保存到该任务堆栈。之后,获得最高优先级任务的堆栈入口地址,从该任务的堆栈中获得此任务的CPU现场。OSCtxSw()的简略代码如下口幻:voidOSCtxSw0{保存处理器寄存器:在当前任务的任务控制块中保存当前任务的堆栈指针:调用OSTaskSwHook0:OSPrioCur=OSPrioHighRdy;OSTCBCur=OSTCBHighRdy:SP=OSTCBHighRdy一>OSTCBStkPtr:将新任务的CPU现场从任务堆栈中恢复:)3OSintCtxSw()OSintCtxSw()是中断级的任务切换函数,它被OSIntExit0调用运行,在ISR中进行任务的切换。OSintCtxSw0的示意性代码如下:voidOSintCtxSw(void){…执行OSTaskSwHook0:OSPrioCur=OSPrioHighRdy:OSTCBCur=OSTCBHighRdy:获得要执行的任务的堆栈指针:1511c/os—II嵌入式操作系统的移植恢复将要执行的任务堆栈中的CPU现场:}4OSTicklSR()OSTicklSR0是时钟节拍中断处理函数。它通过调用OSTimeTick0完成对任务运行的控制,调用OSIntExit()完成任务的切换。3.5示波器程序的线程与线程之间的通讯pc/os-II是高性能的嵌入式实时操作系统。|Ic/os-II通过将一个复杂的应用功能分解为多个独立的任务即线程,并根据线程的重要性来分配优先级,提高系统的可扩展性和实时能力。每个线程拥有自己的堆栈空间,当前运行的线程会独占CPU资源。不同任务间的通信可以通过uc/os-II提供的信号量、邮箱、消息队列等完成。示波器应用程序的设计过程主要就是把示波器的功能分割成多个任务来实现。任务是整个功能要求的一部分,被赋予一定的优先级,有自己的一套栈空间。如图3.3所示,任务是一个无限循环函数,总是处于就绪态、休眠态、挂起态、运行态及中断态等五状态之一口,。图3.3任务的状态为了降低软件结构内不同模块彼此之间的相互依赖的紧密程度即降低耦合,增强一个模块内部的各个组成部分的紧凑性和其处理动作的组合强度即增强内16pc/os—II嵌入式操作系统的移植聚,需要建立消息邮箱来保证不同任务之间的通讯。使用邮箱之前,首先要调用OSMboxcreat0建立邮箱,才可使用。由下图3.4看见,任务(即线程)和中断服务程序可以调用OSMboxpost0消息发送函数,只有任务可以调用OSMboxpend0等待消息函数和OSMboxquery0邮箱状态查询函数n耵。OSHboxCreate《'OSMboxPend《}pt《》厂也一TaskMessage图3.4邮箱与任务、中断服务程序的关系图示波器程序线程结构如下图3.5所示,整个示波器的功能被分割为七个线程来实现,根据任务的重要性和被调用的频率,按优先级高低顺序,依次是采样线程、主处理线程、波形显示线程、键盘处理线程、游标测量线程、自动测量线程和菜单处理线程。当优先级高的任务处于就绪态,它可以终止正处于运行态的低优先级的任务,使之变成就绪态并保存任务的当前状态即CPU寄存器中的全部内容的,这些内容被保存在当前任务的堆栈内,而将要运行的任务的堆栈中的内容被装入CPU的寄存器中。线程之间通过邮箱进行通讯,邮箱可以使一个线程向其他线程发送一个包含特定消息的指针变量。在使用邮箱功能之前应将OS—CFG.1-1文件中的oSMBoxEN置1。由图3.5可见,采样线程主要负责数据的采样,并将采样状态消息发送至主处理线程,采样数据被存放在数据缓冲区;使用者通过按键与旋钮对示波器进行操作,以达到不同的测量与显示功能。因此,当有按键或旋钮被操作后,键盘处理线程识别串口发送的操作编码,之后会根据不同的编码发送对应按键消息,主处理线程接受并识别按键消息后,会向不同的任务发送相应的消息。当AUTO键被按下后,即使用自动测量功能,那么键盘处理线程就会向主处理线程17IIc/os-II嵌入式操作系统的移植发送按键消息,主处理线程接收并识别按键消息后向自动测量线程发送自动测量消息。通过调节时基旋钮时,按键处理线程即发出对应的信息至主处理线程,主处理线程接收消息并向采样线程发出改变采样率的消息,采样线程通过对当前采样状态的判断,实现不同频率的采样。当使用者通过旋钮使用游标测量功能,按键处理线程发出对应的操作消息给主处理线程,主处理线程发送游标测量参数的功能消息,游标测量线程通过用户的选择,根据存储在I洲中的数据计算出波形的参数值。采样线程将采样状态消息发出,主处理线程根据采样状态判断是否进行波形的显示,一般采样点达到一定的数量,主处理线程即发送显示消息给波形显示线程,实现波形的显示。图3.5线程示意图3.6小结本章主要介绍了uc/os—II系统的移植内容和示波器程序线程之间的通讯。1.tc/os—II系统的移植内容主要是集中对os_cmu.H、osCPU_A.S和OS-CPU.C三18uc/os—II嵌入式操作系统的移植个文件修改与编写,内容主要是与处理器、ADS相关的数据类型的重定义,中断开关、堆栈生长属性、堆栈初始化函数的修改、功能扩展函数和汇编代码的编写。示波器功能被分解为七个线程,根据任务的重要性,按优先级高低顺序,依次是采样线程、主处理线程、波形显示线程、键盘处理线程、游标测量线程、自动测量线程和菜单处理线程。线程间主要通过邮箱进行通讯。19按键与菜单的设计4按键和菜单的设计4.1引言便捷的操作环境和良好的图形用户界面是产品良好与否的重要标准之一。如何充分利用系统资源,实现优化的人机交互功能,如何设计合理的按键系统和结构化菜单就成了嵌入式开发中非常关键的问题乜引。4.2按键系统的设计4.2.1按键系统的硬件设计本示波器单独使用一片8位单片机,通过不断扫描各个I/O口的状态判断按键的位置。被按下按键所对应的LED被点亮,之后将按键信息以一定格式的编码通过串口传送至CPU,CPU根据当前示波器的状态进行功能响应,对应的菜单变化也会反映在液晶显示器上。按键系统选用51系列STCl2C5410单片机。STCl2C5410单片机具有低功耗、低价格、高速、高可靠、强抗静电、强抗干扰等优点,适合本示波器的设计标准。用户通过按键与旋钮实现对示波器的控制。按键是导电橡胶结构,通过按键触点的通和断实现电气上的逻辑通和断,从而实现控制。每一个按键都有唯一的代码,2410处理器通过识别代码实现操作。由于示波器的操作功能较多,设计需要20多个按键和多个旋转式编码开关,其键盘原理图如4.2,由图可以看出,为了节省单片机的I/0接口资源,采用矩阵式键盘。键盘接口为5X5行列结构,各按键均采用上拉电阻,以保证在按键断开时,各个I/o口有确定的高电平,由于在使用中按键按下的时间远远小于按键弹起的时间,而一般单片机的逻辑0输入电流远远大于逻辑1的输入电流,所以采用上拉电阻还可以起到降低功耗的作用。其中5个行线与单片机P1口对应连接,5个列线与P2口对应连接。单片机的串口与CPU的串口对应连接。20按键与菜单的设计按键与旋转式拨码开关STCl2C54lO与按键对应的LED单片机RS232接口S3C2410LCD液晶显示电路图4.1按键系统结构框图K11K14K15量厂——协——KZlKjl厂叫~厂—啷≯一厂—《~…”厂—《~厂—嗡≯一厂叫~厂叫一KZ5K3’K4,…一厂——啪r_厂——、“谨万一KZ4K54K.44’…”厂—吲蕊矿一量量Ii量K4lK,l…“厂—吃》—一厂—吃》—一日吼1……KEⅥ.4日吼图4.2矩阵键盘原理图4.2.2按键系统的软件设计本示波器采用扫描法对按键进行识别,即先把某一列置低电平,其余各列置为高电平。不断扫描各行线,当某行列交叉点处的按键被按下,那么按键所在行线电平变为低电平。通过这种方法可以确定按键的具体位置。程序流程图如下图4.4。任何机械按键在断开或者闭合时都会产生抖动,这种抖动在电气上产生时断时续的信号,如图4.3,那么就可能误判有按键被多次按下,因此程序中必须加入防抖处理。本设计使用采集一延时一采集一延时一采集一延时,这种三次21按键与菜单的设计采集一延时的方法判断各次采集的按键信息是否一致,如果判断三次采集信息一致则认为按键被按下,否则重新采集判断。其中对延时时间的把握很重要,延时时间为50ms。图4.3按键闭合时行线输出电压波形除了按键,示波器上还有旋转编码开关。旋转编码开关和按键不同,分为左旋、右旋和被按下的动作。不同的旋转编码开关不同的动作也是有唯一的代码表示。对于旋钮,不存在机械抖动问题。按键与菜单的设计图4.4键盘程序流图23按键与菜单的设计4.3菜单的设计4.3.1菜单的设计要求菜单的设计属于界面软件的设计。界面软件由于直接面向用户,因此设计时应具有友好性、灵活性、明确性、一致性和结构性等特点。人机界面的好坏直接关系到用户对整个系统的满意度口引。本设计液晶显示器的分辨率为800×480像素,其中屏幕左侧的600x400像素为波形显示窗口,右侧的150×480像素为固定的菜单显示区域,其余区域用于其它的信息显示。菜单与按键的外观设计要求如图4.5。图4.5菜单与按键的外观设计要求开机显示“主菜单”区域的菜单项,即测量、设置、存储读出、下翻页、上翻页、光标测量、功能设置等。进入此七项菜单既可通过按下常用菜单区域的快捷键直接进入,也可以选择F卜F5进入。其他菜单项如CHl、CH2、MATH、REF、AUTO和TRIG菜单则必须按下相关的快捷键才可以进入。(快捷键按下时系统无条件优先进入此快捷键对应的菜单)。菜单区最上部为本菜单的名称;其下有5个菜单位置,每个位置与相应的F1-F5键对应。其中F1一F5主要用于进入下级菜单、操作和二值选择功能;Menu键用于回到上级菜单。菜单分3种类型:含有下级菜单的菜单、固定操作菜单和赋值菜单。在赋值菜单上除了显示菜单名称外还显示当前的值。当有按键被按下后,单片机响应按键并将不同的按键操作转换成对应的编24按键与菜单的设计码通过串口传送给CPU。CPU根据收到的按键信息,根据当前的菜单状态,判断新的菜单状态,发出消息,实现菜单在液晶屏的显示和对应的功能。4.3.2菜单的设计思路与按键和菜单直接相关的是TaskKey、TaskMenu两个线程和MA_OPERATE、MA—MENU两个消息邮箱。TaskKey接收单片机发出的按键编码信息并向MA_OPERATE邮箱发出处理消息,在状态机程序中,MA_OPERATE邮箱接收处理消息,做出相应的处理响应的同时,向MA—MENU邮箱发出菜单消息,TaskMenu接收菜单消息并做出响应。菜单相关程序的程序设计主要就是:TaskMenu收到按键信息后,及时的驱动液晶屏显示并执行按键对应的操作功能。TaskKey代码模块如下:staticvoidTaskKey(void*pdata){intkey_value;while(1){key—value=get_keyvalue0://接收单片机发出的按键信息OSmboxPost(MA_OPERATE,(void木)(ID_KEY_VALUE)://通过邮箱发出处理消息})状态机程序模块:staticintFSM_state(intvalue).{….intmsg:while(1){按键与菜单的设计msg=(int)OSMboxPend(MA_OPERATE,0,&err)://等待并接收按键处理消息switch(msg){caseID-KEY—yALUE:OPERATE//进行对应的处理OSMboxPost(MA_MENU,(void木)ID_KEY-VALUE)://发出按键菜单消息break:})}需要说明的是,F1-F5键被按下后的菜单操作效果是不固定的,因为在不同情况下具体什么操作,需要判断上、下级菜单才能确定,这些处理在ShowMenu0中实现。TaskMenu的代码如下:staticvoidTaskMenu(void*pdata){intkey:while(1){key=(int)OSMboxPend(MA_MENU,0,&err)://等待并接收菜单消息if(err-_OS—NO—ERR){ShowMenu(key)://实现菜单显示和操作功能}按键与菜单的设计该任务负责等待并接收菜单消息,通过判断之前菜单的状态,实现当前菜单的显示和操作功能。ShowMenu0函数的流程图如下:图4.6ShowMenu0函数的流程图按键与菜单的设计4.3.3菜单的数据结构菜单结构设计的使用的方法是树形拓扑结构法,菜单的树形拓扑结构为多叉树,结构图如图4.7,可用链表来表示菜单的树形结构。菜单的数据结构如下所示:typedefstruct_MENU{intStyle://l菜单的类型charInfor[25]://2菜单显示信息charOp[opMAx][25]://3选项信息Rcpos://4菜单的位置及大小,Rc的结构成员包括坐标和宽高参数intBackColor;//5菜单的背景色intForColor:116菜单的前景色struct—MENU*PreMenu;//7指向上一级父菜单的指针MenuListNextMenuList://8下一级子菜单的列表intDefaultOp://9菜单的默认选项(1)有选项时是默认的选项序号(2)有下级菜单时表示从哪个下级菜单开始(3)当是上下箭头时表示点击此箭头应该从哪个下级菜单开始显示void(*Perform)(conststruct_MENU*const)://10菜单的对应操作功能}Menu:由于示波器功能丰富,对应的操作也较多,因此菜单的数据结构比较复杂,其所能包含的菜单属性十分丰富,包括不同的菜单类型、菜单的显示信息、菜单在彩色液晶显示的前景色和背景色、指向上下一级菜单的指针、菜单的默认选项、菜单对应的操作等,示波器设计的所有的有关菜单属性都包含在内,这样可以避免定义多个结构体,使得系统内菜单结构体更加独立,修改它很少影响到其他结构体,这给软件的开发和维护带来很大的方便。根据示波器的功能及菜单的结构设计要求,菜单被设计为以下类型:第一种:STYLE—SUB(S表示)一含有下级菜单的菜单。第二种:STYLE—FIX(F表示)一直接动作菜单即本类型的菜单被确认只能产生固定的操作。28按键与菜单的设计第三种:STYLEOP(O表示)一二值选项的菜单即本类型的菜单含有两个选项通过选择不用的选项产生不同的操作。第三种:STYLE_DOWNARROW(D表示)一下箭头菜单即由于需要显示的菜单选项较多,需要设置下箭头菜单进行翻页。第四种:STYLE_UPARROW(U表示)一上箭头菜单即上翻页作用。图4.7菜单的结构图示波器按键操作和菜单显示是对应的。按键和旋钮被操作后,单片机就会通过串口向2410处理器发送对应的操作编码。某按键被按下,如果将要被执行的菜单操作是前面所述的STYLE_FIX类型,则直接实现功能操作;如果是STYLESUB类型,就显示对应的子菜单列表;如果是箭头菜单类型,则实现对应的上翻整页或者下翻功能。由于菜单设计是树形拓扑结构,因此,菜单的执行结果与菜单的之前状态是有直接关系的。整个系统的初始化包括对菜单初始化。菜单初始化的内容有:菜单数据结构成员的初始化赋值及字库的初始化,即每一个菜单状态都有一套初始化值,如菜单类型、显示的文字内容、在液晶上显示的位置、背景色前景色、其下级子菜单列表等。按键与菜单的设计4.4小结便捷的操作环境和良好的用户图形界面是产品良好与否的关键标准之一。按键与菜单是两个不可分割的整体,菜单处理线程收到按键信息后,及时驱动液晶屏显示菜单并执行按键对应的功能操作。菜单的设计要求是具有友好性、灵活性、明确性和良好的扩展性,因此菜单的设计采用树形拓扑结构,其数据结构为链表渊。利用链表良好的上下级指向关系来描述菜单的上下级的关系。波形绘制算法5波形绘制算法5.1引言数字存储示波器所显示的波形是由系列直线段有效的逼近而得到的。画波形函数是由画点函数按照一定的算法写出的,不同的算法画出的波形在速度和效果上会有所不同。因此有效的波形显示算法可以很大程度的提高波形显示速度和视觉效果。5.2波形显示线程和画波形函数的说明波形显示功能是由波形显示线程实现的,示波器采用分辨率为800×480的7寸24位色液晶屏。其中间固定的600×400的区域为波形的显示区域,其它区域用于显示菜单和各种测量参数。画点、画线、显示字符等都是由基本的画点函数来实现。液晶屏的左上角像素点的坐标为(0,0),右下角像素点坐标为(799。479)。示波器有两个通道,ADC分别对两个通道的信号进行采样,A/D转换后数据经量化后存储到数据缓冲区,再经过必要的处理,将数据转换成适应显示器的数据。一种常见的波形显示方法就是:分别根据两通道的显示数据绘制波形,待下一屏显示数据准备就绪之后,将上一屏已经显示的波形全部擦除,之后再绘制准备就绪波形。由于执行画点函数比较耗时,特别是在接近图形满屏的情况下,画点函数被调用次数较多,有可能会产生拖屏现象,严重影响其他线程获得CPU的使用权。本示波器采用一种高效的波形显示算法,可以有效的解决上述的问题,算法是在画波形函数中实现的。图5.1是画波形函数函数流程图。3l波形绘制算法图5.1画波形函数程序流图首先,声明一个wavebuff类型的指针pdl,pdl指向封装采样数据的链表。如果仅有一个通道处于工作状态,则pdl->next指向NULL;如果双通道同时工作,则将优先级高的通道的数据封装于链表的头结点,头结点的next指针指向封装另一通道数据的结点。以链表的方式封装数据,灵活方便、节省内存、扩展性强,如果有其他功能需求可以自由扩展链表长度乜5I。波形由系列直线段有效的逼近而得到的。因此,需要由采样的数字量构造出能够有效逼近显示图形的系列直线段。直线段的参数由LINE类型的数据结构封装。遮蔽分析主要是为了在两通道同时工作的情况下,尽量减少画点。清屏和绘图分析也是为了将待擦除线段与待绘制的线段进行比较:重复线段保留,多余线段擦除,进一步达到减少画点的目的。wavebuff类型数据结构定义32波形绘制算法typedefstructJAVEBUFF{intbuff[MAXSIZE]://数据缓冲区intdate—len://数据长度intdate—start://数据起点intch;//通道编号intcolor://显示颜色struct—WAVEBUFF*next:}wavebuff;LINE类型的数据结构的定义typedefstruct_LINE{struct—LINE,pnext:intcolor;//直线段的颜色intlo;//直线段的下端点值inthi://直线段的上端点值}LINE:5.2.1构造绘图线段波形显示要求达到:波形粗细均匀、连续;绘制的速度快砸1。本示波器分辨率是600X400,即每屏显示600个离散数据。如果仅仅是将离散数字量在LCD对应的位置画出点来(这是示波器的点显示功能而不是一般情况下的矢量显示),那么波形就不是连续的,且不清晰。构造绘图线段的作用就是根据相邻离散数据的大小关系得到绘制连续波形的一系列直线段的上下端点数值。流程图如图5.2.其方法如下:定义一个指向封装采样数据的链表的指针pdl。如果当前点的值大于与之相邻的下一点的值即pdl->buff[i]>pd卜>buff[i+1],那么当前点所对应的直线段的上端值hi=pd卜>buff[i],下端值lo=pdl->buff[i+1]+1;如果pdl->buff[i]<pdl一>buff[i+1],贝0hi=pdl->buff[i+1]-I,10=pdl一>buff[i];如果pdl一>buff[i]=pd卜>buff[i+1],则hi=lo=buff[i]。这样,离散的点就被一系列直线段所代替,构成连续的波形。波形的显示区域是有一定范围的,d一1imit是显示区域的下边界值,ujimit是上边界值,如果整个直线段都超出上下界的33波形绘制算法范围,整个直线段将被舍去,不显示。如果直线段没有全部仅仅是下端超出下边界,那么直线段的下端值就被赋为下边界的值;同理,相反情况下,直线段的上端值就被赋为上边界的值。图5.2构造绘图线段程序流图5.2。2遮蔽分析遮蔽分析主要作用就是在两个通道同时工作的情况下,分析代表不同通道数据的直线段在绘图时互相的遮挡关系,以达到少画点的目的,这种会相互遮挡的直线段在液晶屏上的横坐标总是相同的。数据先进入的通道的优先级高即此通波形绘制算法道的波形可以覆盖其它通道的波形。当代表不同通道的直线段在位置上有重合关系时,优先级高的线段覆盖优先级低的线段,这样可以避免重合部分的重复绘制。根据线段之间不同位置关系,遮蔽关系有六种:即(nlo>lo,nhi<hi),(nlo>lo,nhi>=hi,nlo<=hi),(nlo>hi),(nlo<=lo,nhi<hi,nhi>=lo),(nlo<=lo,nhi>=hi),(nhi<Io)。hi、lo分别代表高优先级线段的上、下端点值,nhi、nlo分别代表低优先级线段的上、下端点值。以nlo<lo,nhi>hi的情况为例如图5.3,说明遮蔽分析的原理。图中1代表优先级高的数据线段,2代表优先级低的数据线段,其程序具体流程如下:获取先入数据的10、hi、color,声明一个LINE类型的指针变量pdline,判断是否还有其它通道数据,如果没有,则直接结束遮蔽分析(遮蔽分析在这种情况下无意义,它起到减少画点作用是两通道同时工作时);如果有另一通道工作,则处理之后线段被分为了三部分。其遮蔽后的效果如图5.3示,最下面的线段2将作为链表头结点,成员值分别是pdline一>lo=nlo,pdline一>hi=lo一1,pdline一>color=ncolor;线段1则成为第二结点,pdline一>next一>lo=lo,pdline一>next一>hi=hi,pdline->next->color=color;最上面的线段2为第三结点,pdline一>next一>next一>lo=hi+1,pdline一>next一>next一>hi=nhi,pdline->next一>next->color=ncolor。链表的方向是由下至上的指向各线段的,这样可以简化清除和绘图分析,具体将在下文说明。可见,如果不进行遮蔽分析,当两个通道同时工作时,考虑到数据线段的优先级,线段绘制的先后顺序是先2后l,绘制线段的总长度为(nhi—nlo)+(hi—lo)。进行遮蔽分析后,线段绘制的顺序是由链表的指向性确定的,绘制线段总长度为nhi—nlo。nhi链表方向自下而上hi2pdli眦咖ext咖ext咖帆圮l阳沁2图5.3(n]o<lo,nhi>hi)遮蔽分析效果图35波形绘制算法图5.4遮蔽分析程序流图5.2.3清除与绘制分析在绘制新波形之前,总要先清除旧波形。一般的方法就是,将旧波形存于待清除波形列表中,通过画点函数将旧波形画成背景色,然后再绘制新波形,清除和绘图本质都是调用画点函数进行绘图。大多数情况下,待清除的波形和待绘制的波形都会有重合部分,如果通过一定的分析找到重合部分,重合部分不清除也不重新绘制,等于少调用了两次画点函数。36波形绘制算法颜色枷同__pl->next—◆一币.合音lj分.小绘制线段--pl掣卜高z瞎c。,!——pl·>next卜图5.5清除和绘图关系分析效果图清除和绘图分析流程图如图5.6,其中pc是指向待清除线段的指针,pd是指向待绘制线段的指针,待清除和待绘制的直线段位置关系有六种:(pl一>lo<p2一>io,pl一>hi>p2一>hi),(pl一>lo<p2一>lo,pl一>hi>=p2一>Io,pl一>hi<=p2一>hi),(pl一>lo>=p2一>10,pl一>hi<=p2一>hi,pl一>hi>p2一>lo),(pl一>lo>:p2一>Io,pl一>hi<=p2一>hi,pl一>hi<=p2一>io),(pl一>hi<p2一>io),(pl一>Io>p2一>hi)。其中pl、p2都是line类型的指针。以pl一>lo<p2一>Io,pl一>hi>p2一>hi的情况为例,如图5.5,说明分析的原理。首先,pl、p2分别与pc、pd指向相同的变量,如果p1或p2任一为空,则结束分析;若都不为空,则需要对链表进行插入操作,即将原待清除的一条线段分成两条。令va]ue=pl一>hi,当待清除和待绘制线段的颜色相同时,p卜>10不变,p卜>hi=p2一>10—l,pl->next一>lo=p2->hi+1,pl一>next一>hi:value,由于重合部分颜色相同,故不清除也不用绘图,p2指向的结点应被删除4当颜色不同时,pl一>lo不变,pl一>hi=p2一>io—l,pl一>next一>lo:p2一>hi+l,pl一>next~>hi:valHe,重合部分颜色不同故此部分仍需绘制,p2一>hi、p2一>Io都不变。由于遮蔽分析使链表方向是自下而}的指向各个线段,故只需让p1或者p2中指向位置在下面线段的指针指向其下。结点即可,之后判断是否符合循环条件。这样可以大大简化循环流程,假设清除线段和绘图线段各有三段,由于链表具有自下而上的指向性,37波形绘制算法则最多循环3次即可以完成分析;如果没有指向性,那么就至少需要循环3X3次才能完成分析。图5.6清除和绘图分析程序流图5.3小结采样率是衡量数字存储示波器示波器性能的重要指标之一,如果显示算法不理想,即使采样率很高也无法将采集的波形及时的显示。画点函数占用CPU时间较其它函数久,这会导致优先级低的任务长时间无法得到CPIJ的使用权。因38波形绘制算法此一种有效的波形显示算法对于提升示波器的性能同样是十分重要的。本算法有效解决了波形接近满屏情况下的拖屏现象,对于提升示波器的显示速度乃至整机性能有很大帮助。39波形重构算法及波形周期求解算法的应用6波形重构算法及波形周期求解算法的应用6.1引言数字存储示波器以一定的采样率采样,模拟信号被转换成数字信号并存入RAM,这些数字信号经过处理器处理以后被显示在LCD上。因此采样率是决定数字示波器性能的重要标准。采样率越高,能够测量波形的频率就越高。Nyquist采样定理规定:要完全复现被测信号,采样频率至少要大于2倍被测信号所包含最高频率。然而此定理所表达的意思是频率上恢复被测信号,而不是无误的从形状上复现信号,如图6.1所示。示波器主要功能就是从形状上观测信号,故仅仅以2倍被测信号最高频率采样无法达到示波器的功能要求。一般情况下,为了达到良好的复现效果,信号一个周期内至少要采集6-8个采样点。采样重构信号\、。八/\。/\u/\/\i/\/\。/\,图6.1对正弦信号欠采样导致重构的信号失真采样频率是数字处理技术及应用中需要考虑重要的一个因素,它决定数字处理的精度。在某些情况下,输入信号被某个较低采样率∞(∞大于2倍信号谱的最高频率)采样过,但鉴于低采样率导致显示波形的失真,故需要将采样数据通过一定的波形重构算法处理,到达丰富显示波形,进而提高等效采样率的效果。示波器低采样率工作时,用于观察被测信号的整体状态趋势;高采样率工作时,用于观察高频信号或者是信号的局部细节。数字存储示波器优于模拟示波器的一个优点是可以将感兴趣的波形储存,在需要时可以调出查看。在示波器正常工作时,调节时基旋钮会改变采样率,这样可以将观测的波形在时间轴上波形重构算法及波形周期求解算法的应用放大或缩小。当调出存储的波形或者示波器处于保持状态时,示波器停止采样,此时屏幕上会保留停止采样之前一刻采样显示的波形信号,如需观察信号的细节,则需要将波形放大。这种情况下,无法通过改变采样率达到目的。因此,也需要一种合理的波形重构算法对原始波形插值。6.2拉格朗日插值法插值就是指在所给定的函数点中间再插入一些新的所需要的点上的函数值。插值的基本方法就是根据已知的函数点构造一个简单的函数来作为真实函数的近似表达式,然后根据这个构造的简单函数求取新的需要的点作为真实函数的拉格朗日插值法最终目的是构造一个插值多项式,称为拉格朗日(Lagrange)插值多项式,记作LIl(x)。通过拉格朗日插值法构造的插值多项式是唯一的。¨加薹俐骢夥特需势劫他翻其中f”D(¨是f(x)在毛处的n+l阶导数。不高于n的多项式时,其13次多项式就是它本身。但构造几次插值多项式,一般无法预先知道,而且高次多项式插值易出现龙格现象即高次多项式插值不安全,尤其是等距结点。龙格现象说明高次插值多项式并不实用,插值结点增加,插值精度未必提高。所以对于示波器等间距采样数据不适用拉格朗同插值法。以下三种方法可解决龙格现象所带来的问题:1采用分段低次插值2采用分段光滑插值即样条插值3采用逼近法。波形重构算法及波形周期求解算法的应用6.3分段线性插值法所谓分段线性插值,就是将整个插值区间分成若干小区间,然后在每一个小区间上进行线性插值。其插值公式为:三。(x)=y。二生丑+少,导X0一X1X上一X0其中Y。是f(x)在X。处的函数值。示波器是等时间间距采样的,那么就可以将每个采样点作为结点,以结点间的区间作为插值的小区间,在小区间上进行线性插值。可以预想到,无论是几倍插值,插值点都在一条直线上,直线的端点是各个结点,因此插值后的波形与原始波形相比变得不够光滑。由仿真截图6.2可以验证这一点。图中波形1代表原始波形,2代表对采样数据使用分段线性插值法处理后的波形,3代表对采样数据使用三次插值法处理后的波形。可以明显看出分段线性插值法处理的图形的光滑度较差,三次样条插值法处理的图形更光滑更接近原始波形。图6.2分段线性插值与三次样条插值的效果对比42波形重构算法及波形周期求解算法的应用6.4样条插值原理分段低次插值以低代价而获得较好的收敛性质,特别像三次样条函数插值,具有一阶、二阶导数的收敛性质,应用十分广泛。样条插值法只要已知插值区间端点一阶或者二阶导数值,就可以得到既是低阶分段又光滑的插值函数[aft。示波器测量的信号函数f(x)往往比较复杂。示波器采集的只是信号的一些离散点X。(i=0,1,2…n)处的函数值,即yi=f(xi),i:O,l,2".-n在数值分析中,Xo,X1..oX。称为结点。根据函数f(x)已知的离散点函数值来计算f(x)在一些新的插值点处的函数值,这就是使用插值法的目的。插值就是根据已知的系列数据点找出这些数据点的规律,并根据点规律在系列数据点中间插入所需要的新的数据点。因而插值法的基本思想:1.根据已知的函数值构造f(x)的近似表达式Y(x),2.用Y(X)计算新的点上,当做f(x)的近似值‘3¨。6.4.1三次样条插值函数的定义定义设在区间[a,b]上取n+1个结点a=Xo<Xl-.-<x。:b函数y=f(x)在各个结点处的函数值为Y。=f(x。)(i=O,1,2..-n),若S(X)满足:(1)S(xi)=yl,i=O,l,···,n;(2)在区间[a,b]上,S(x)具有连续的二阶导数;(3)在每一个子区间[xH,Xi](i=O,1,2"--n)上,S(X)是x的不超过三次的多项式;称S(X)为在结点X上插值于Y的三次样条插值函数。6.4.2三次样条插值函数的计算方法构造三次样条插值函数一般有两种方法:一种是三弯矩插值法;另一种是三斜率插值法。下面只介绍三弯矩插值法。由于S(x)的二阶导数连续,设S(x)在结点X。的二阶导数为M;,即S。(xj)=Mii=O,1,···,n43波形重构算法及波形周期求解算法的应用Mi是未知、待定的数。BIS(X)是分段三次多项式,则S"(x)是分段一次多项式,且在每个区间[x。,XI+I]上,SⅣ(x)可表示为∥(x)=;争M,+三iMM…xj—xlHXtn—xi记hi--Xi+l-Xi,则∥(力=气堑M,+竿M,+1将上式在区间Ixt,Xl+1]上积分两次,并且由S(x;)=y。,S(x;+。)=yM来确定两个积分常数,可得当x∈[X。,x。+.]时,sc功=譬M+譬…"言h2鸩,TXl+1--X慨,{‰,等n)对上式求导得:趴加一譬M+譬蚝+竿+半k㈤利用S(x)一阶导数连续的性质,在上式中令X=X。,得:F(xz+0)-_扣一缸+l+半将式(2)中的i换成i-1,得S7(x)在ExH,x。]上的表达式趴归譬蚝+错鸠+訾+半kF(x,-0卜等砟·寺即警缸+华"鲁=竿一半用X=X;代入,得。利用S7(Xi--0)=S’(Xi+O)可得:一~。~……‘‘-_-●___●_-●●一●两边乘以hH+hi,得:uiMf—l+2Mf+4M“I=df.i=l,2,…,n-1(3)其中6波形重构算法及波形周期求解算法的应用肛=石hl百-i,五=石hl百-i红.t+%、吩di=上(她一拙)红一一(4)并且|Ii+入i=1这是含有n+1个未知量M0,M1..·Mn共有n—1个方程组成的线性方程组,欲确定该方程组的解,尚缺2个方程。因此求三次样条函数还要2个附加条件。常见的问题有下面两种提法:①第一种情况已知两个边界点的一阶导数值即:(1)s’(%)=‰,(2)S’(%)=%这样就能补充两个方程:I2Mo+Ml=do∽州+2M。=d。其中等丑一“dO:6鱼%dn;6———』L吃一l与式(3)联立得到n-1元线性方程组:2Mo+MI=do∥lMo+2Ml+^M2=dl∥。一lM。一2+2M。一l+以一lM。=d。-l膨。一l+2M。=d。K=I,2,…,n一1(5)“一≮盟其系数矩阵是严格对角占优的三对角矩阵:45波形重构算法及波形周期求解算法的应用21∥l2丑∥22如∥¨2以-112原方程组可以用追赶法求出M。,i=1,2…,n-1,将结果代入式(1),即得到三次样条函数的每两个结点之间的分段表达式。②第二种情况,已知两个边界点的二阶导数值即:(1)S”(而)=%,(2)S一(而)=%代入式(3)得一个n一1元线性方程组:2Ml+五膨2=dl一朋Mo∥2Ml+2M2+如M3=d2∥。一2M。一3+2M。一2+五n.2M。-l=d。一2,z。一lM。一2+2M。一l=d。一l—j乙一lM^系数矩阵为2∥2(6)A2如∥32五2∥。-3∥。一2以一22上面的系数矩阵一个三对角矩阵,由于u;+入。<2,故它是严格对角占优的。原方程组可以用追赶法求出M;,i=1,2…,n-1,将结果代入式(1),即得到三次样条函数的每两个结点之间的分段表达式‘3龃。6.5三次样条插值法的应用示波器正常工作时,每次采样1200个数据,其中整个液晶屏显示的数据量为600个,其余的作为深度存储数据,在波形左右移位时显示使用。如果需提高等效采样率或者需要放大波形,那么就需要将采样数据作为原始结点,来构造插波形重构算法及波形周期求解算法的应用值函数。构造出插值函数之后,就可以求出新的插值点的数值。根据采样数据的特点,可以确定样条插值的自然边界条件:即曲线的两端有S"(xo)=O,SⅣ(】【lI)=0。这是上面介绍的三弯矩法的第二类问题,可以列n-1元线性方程,通过追赶法解三对角矩阵。求出三次样条函数的分段表达式。6.6三次样条插值法的误差分析插值数据无论如何都会与实际数据有一定的误差,因此必须通过误差分析找出其规律,在不同的插值情况下,尽可能的接近实际数据。一般通过计算插值点与真实数据点的均方误差来分析算法的精确程度。均方误差公式:仃:、厚±生±==±蔓:,陛Y刀Y刀其中e是插值与实际值的差,n代表插值点数,E。代表插值点与原始数据的差。经过处理后的数据都是数字量,且大小都在[-200,200]区间,数值的大小都是整型数据,代表其对应液晶像素点的相对位置。表6.1原始波形是正弦信号的插值误差分析周期采样点数355102030’40插值倍数55i05均方误差19.871637.027987.483833.342661.773250.871635550.67163从表6.1可以看出,对于正弦信号,在插值倍数相同的情况下,周期采样点越多,插值的均方误差越小,但当周期采样点数达到一定的数量后,均方误差趋于稳定。这说明采样率越高,采样数据越接近实际波形,插值的结果也越接近真实数据。同样可以看到,插值倍数越低即插值的点数越少,均方误差越小,47波形重构算法及波形周期求解算法的应用但是区别不是十分明显。表6.2原始波形是方波或三角波的插值误差分析周期采样点数插值倍数方波的均方误差三角波的均方误差350.343270.32574550.198040.203141050.133980.145712050.117860.1235720100.120310.13075从表6.2可以看出,对于方波或三角波,当插值倍数固定,周期采样的点数越多,均方误差越小;当采样率固定,插值倍数越大,均方误差越大,但是区别不是十分明显。这与对正弦波的插值误差分析的结论是一致的。但可以看出,在同等条件下,三次样条插值法对于方波或三角波的插值误差远小于对正弦信号的插值误差。因此,三次样条插值法适合处理方波和三角波,但当采样率达到一定程度时,三次样条插值对正弦波的插值误差也在可接受的范围之内。下图6.4是周期采样点数为20,采用三次样条插值法将波形放大三倍后的matlab仿真图:图6.3未插值之前正弦信号的仿真图形48波形重构算法及波形周期求解算法的应用图6.4三倍插值后的正弦信号仿真图形6.7正弦最小二乘拟合算法原理拟合与插值有所不同,曲线拟合中不要求拟合后的曲线通过所有已知点,只要求拟合函数能准确反映已知数据点的基本关系。为了保证拟合曲线更接近真实的曲线,因而要求已知数据点和拟合数据曲线偏差的平方和最小,这就是拟合的最小二乘原理。正弦最d,--乘拟合就是利用最小二乘原理将已知数据点拟合成最接近真实曲线的正弦曲线陆3。理想的正弦信号的表达式是:J,(f)=4cos(cot)+B,sin(cot)+Cl(1)或者y(t)=Acos(cot+O)+C(2)其中中∞表示信号的频率,C。表示直流偏移,0表示相位,A。,B。,C。表示幅度。l、2式子可以相互变换。正弦波三参数最小二乘拟合算法一般有两种:一种是矩阵算法,一种是代数方程算法。三参数算法要求必须已知频率,它是一种闭合算法,不会导致发散,因此总能获得一个结果。这里只介绍在示波器信号拟合中应用的代数方程法:假设理想正弦信号表达式为:y(f)=4cos(cot)+骂sin(a,t)+q49波形重构算法及波形周期求解算法的应用表达式在不同时刻t。,t:,t。…t.的值为y。,Y。,y。…y-,拟合的最终目的就是找)UA。,B。,Cl的值,使下式的值最小:g=∑(n-4cos(cot.)-BIsin(cot.)-c,)2n=i那么就有:——=0a占aAI——=0agaBl一=o8s犯l设信号的角频率为ct,,设:吒=cos(tot,,)尾=sin(cot.)通过计算下面的值:MMM∑以∑%∑尾n=ln=lMM∑%尾口∑尾2n=ln=iMM∑y开%%尾∑Y疗2n=l亨争参脚n=i来计算:50(3)波形重构算法及波形周期求解算法的应用∑以%一歹羔%!=!=!三!M——.M∑M以厦一歹∑M孱一I=!M!三!M∑%尾一万∑吒∑孱2一万∑展∑%z一口∑M吃n=ln=l∑M%孱一夏∑M孱H;ln=i∑儿吒一歹∑M%兰》bB,一歹∑M孱n=ln=lBN=M.M∑吒2一口∑%∑吒展一云∑展n=ln=l∑%尾一∥∑吒兰孱:一磋屈∑M%尾一歹兰吒∑孱2一∥∑屈n=l^=In=1月;l-_-三:-,卫Ly力炉.fⅥ疗:I一口=一M∑%n=ll石∥2万∑尾n=i14哮岛=老C=y一氏oc—B0p拟合的结果是:一(f)=4C0s(缈乙)+B0sin(ot.)+G化简后的表达式是:波形重构算法及波形周期求解算法的应用Z(f)=Aeos(a,t.+p)+CA=丽肚断1【鲁】^≥。秒一-l【鲁】栅^<。均方误差是:压j‘2√万其中:MM占=∑(只一4%-BoA-Co)2--Z(咒一Z)2n=l^害l此算法是收敛的。6.8正弦最小二乘拟合算法的误差分析表6.3原始波形是正弦信号的拟合误差分析周期采样点数拟合倍数均方误差352.85746551.457461050.747552050.379815101.67577从表6.3可以看出,当实际波形是正弦信号,当拟合倍数不变的情况下,周期采样的点数越多,拟合的均方误差越小。这说明拟合点越多,恢复出的波形越接近实际波形。但当拟合点的数目到达一定的程度后,均方误差变化不大。这与上面介绍的三次样条插值的情况基本相同。但是与样条插值的误差分析结果比较,正弦拟合对正弦波的处理效果远远要优于样条插值算法。因此对于正弦信号J下弦拟合算法更合适。52波形重构算法及波形周期求解算法的应用表6.4原始波形是方波或三角波的拟合误差分析周期采样点数拟合倍数方波的均方误差三角波的均方误差3530.1432528.765745524.1682823.3024510510.4752911.058772058.783368.16743从表6.4可以看出,无论周期采样点数如何提高,虽然均方误差有减小的趋势,但无法保证可以准确的恢复原始波形。所以正弦拟合只适合对正弦信号的拟合,对于方波和三角波的拟合误差很大。6.9波形周期求解算法周期是信号的重要参数。一般情况下,示波器所测量的信号都是周期的信号。因此,通过合理的算法求得信号的周期,对提高示波器精度和性能有很大的帮助。6.9.1平均值法计算波形周期的一种常见方法是以波形穿越平均值的次数为依据通过一定的换算求出周期。平均值是处理后的采样数据的平均数值。如图6.5,以正弦波为例,图6.5中的直线为平均值线。}\’/\’/\/、/\’/、’』;;\/VV。\/V\/;图6.5平均值线对正弦信号的穿越示意图设L为最后一个穿越平均值线的采样点的序号,F为第一个穿越平均值线采样53波形重构算法及波形周期求解算法的应用点的序号,C为穿越平均值的点数,N为波形每个周期包含的采样点数,T为波形周期。令M=(L—F+1)×2/(C一1)(1)对M值取整就是N的值。由于采样率w是已知的,所以可得:波形周期T=N/W。当被测信号本身含有的噪声或者其他谐波分量,如图6.6所示,图中的波形只有两个周期,但如果采用公式(1)推算,图中的波形的周期会大大减小,因为按穿越平均值的标准,C会比真实情况要大。故在上述情况下,采用平均值穿越法获得的波形周期会不准确。为了解决上述的问题,可以采用双直线法确定波形的周期。厂\’八/\’八’/\’iV!VVV\/j图6.6平均值线对含有谐波分量信号的穿越示意图6.9.2双直线法双直线法的本质就是以采样数据为依据,找出两条合适的基准穿越直线,根据波形穿越这两条直线的次数,计算出一个周期内的采样点数,进而结合采样率求出波形的周期。双直线法是针对平均值法不能准确求算的含有噪声或者其它谐波分量的信号。数字存储示波器对采样数据的进行处理,得到一组待显示数据。一般每屏显示600个数据。通过这些数据找到两条合适的基准穿越直线,是准确计算波形周期的前提。设波峰值为Un,其个数为Uc;波谷值为Dn,其个数为Dc;大于平均值的点为波形重构算法及波形周期求解算法的应用Bn,其个数为Bc;小于平均值的点为Sn,其个数为Sc。穿越基准上限直线=(E(Un+Bn)/Uc+Bc))×0.8+平均值X0.2穿越基准下限直线=(E(Dn+Sn)/Dc+So))×0.8+平均值X0.2以下图6.7为例,只有当波形先上穿越上限直线,产生交点1,再下穿越下限直线,才产生交点1’,才记作一个周期。由图可见,这样产生的交点分别为1、l’、2、2’、3、3’,共可记作三个周期。同时应记录第一个交点1的序号S通过和最后一个交点3’的序号E。这样就可由公式(E—S+1)/3求出一个周期所包含的采样点数。再结合已知的采样率W,就可求出波形的周期。推而广之,设第一个交点的序号为S通过和最后一个交点的序号为E,记录的周期数为N,那么一个周期所包含的采样点数C=(int)((E—S+1)/N),波形的周期T=C/W。-‘、’‘、’f、二限直≤弋~\,~0VVV直甓图6.7双直线法对含有谐波分量的信号的穿越示意图双直线法相对于平均值法是一种更优更准确的周期求解算法。与平均值法最大的区别是:通过波形穿越两条基准直线产生穿越点来确定波形的周期,而不同于平均值法中仅以平均值作为基准穿越直线的作法。这就排除了信号中谐波分量和噪声的干扰,得以正确测量信号的周期。对于图6.8所示的含有噪声的波形,共600个采样点,A点的序号是9,I点的序号是529,1点的序号是24,3’点的序号是544。假设采样率是100MSa/s,如使用平均直线法通过上面已讨论的方法会计算出波形周期T=((int)((529—9+1)×2/(9—1)))/100X10呻=1.3×10咱S,而采用双直线法计算的波形周期T=((int)((544—24+1)/3)))/100×10弋1.73X10七s。经测量,波形的实际周期为1.65X10{S,可见平均值法计算的结果与波形实际周期的偏差达21%,而采用双直线法的得出55波形重构算法及波形周期求解算法的应用的周期值与波形实际周期的偏差为4.9%。图6.8双直线法对含有噪声的信号的穿越示意图6.10,J、结由上文的误差分析可知,根据不同的波形选择不同的波形重构算法可以有效的降低误差,达到更好的波形恢复效果。当波形是方波或者三角波时,样条插值的效果更好;当波形是正弦波时,正弦拟合的效果更优。但当插值结点足够多时,样条插值的恢复正弦波的效果也比较好,其误差在可接受的范围内。周期是信号的重要参数,通过所设计的双直线法可以比较准确的求出波形的周期。56结论7结论课题主要工作是完成嵌入式uc/os—II系统的移植、按键系统和菜单的设计、波形显示算法的编写以及分析三次样条插值法与正弦最小二乘拟合算法对于不同波形的处理效果。l通过对uc/os—II实时操作系统和ARMS3C2410处理器的研究,总结出了移植的要点并在ARMS3C2410上成功移植。移植的主要内容集中在OSCPU.H、oS-cPU_A.S和0s_CPU.C三个文件修改与编写,内容主要是与处理器、ADS相关的数据类型的重定义,中断开关、堆栈生长属性、堆栈初始化函数的修改、功能扩展函数和汇编代码的编写。同时在uc/os-II移植成功的基础上,完成了对示波器功能的分解,设计出七个任务。2按键与菜单是不可分割的。本设计以一片8位单片机作为按键模块的核心,对按键的行列扫描,确定被按下的按键并以对应编码的形式通过串口传送至2410处理器。菜单处理线程收到按键消息后,驱动液晶屏显示并执行按键对应的功能操作。菜单的设计要求具有友好性、及时性、明确性和良好的扩展性,因此菜单设计采用树形拓扑结构。利用链表良好的上下级指向关系,来描述菜单的上下级的关系,封装菜单的各种属性。3设计了一种应用于液晶显示的数字存储示波器的波形显示算法。算法主要分三步,首先,通过分析相邻采样数据之间的大小关系,得到逼近波形的系列直线段;其次,通过分析不同通道直线段的位置关系,得到最佳的线段合成效果;最后,通过分析待清除线段和需绘制线段的位置关系,得到最优的清除和绘图列表。之后利用优化的清除和绘图列表中的数据,完成波形的绘制。算法可有效的提升示波器的显示速度。4分别采用三次样条插值算法和正弦最d'--乘拟合算法分别对正弦波、方波和三角波进行处理,得出以下结论:样条插值对方波和三角波的处理效果更好,插值误差很低;正弦最小二乘拟合对于正弦波的拟合效果更优。但当插值的结点足够多时,样条插值的对正弦波的插值效果也比较好。并且得出结论,周期采样点越多,插值的效果就越好,误差越小,但当周期采样点数达到一定的数量后,误差的变化趋于缓和,采样点太多反而会增加计算量。周期是信号的重要参数,设计的双直线法能够比较准确的测量信号的周期。57参考文献8参考文献[1]唐正虎.1001蛀IZ数字存储示波器数字系统设计[D].成都:电子科技大学,2004[23张锡纯,常风娥.数字示波器原理、基本特性和应用[J].电测与仪表,1994(11):1~3[33戚瑞民数字存储示波器的设计研究[D].合肥:合肥工业大学,2007[43周建明.高速数字存储示波器实现技术EJ].电子测量与仪器学报,2005,(11):1~3[5]武举.便携式数字存储示波器的研究与设计[D].大连:大连理工大学,2005.[6]S.Furber.ARMSystem-on-ChipArchitecture[M].AddisonWesleyLongman,2000.[7]JeanLabrosse.嵌入式实时操作系统IIc/osII[M].第2版.北京:北京航空航天大学出版社,2010[8]李正军.基于NiosII软核CPU的TCPIP协议实现[D].西安:西安电子科技大学,2006[9]潘长清.基于Modbus协议的嵌入式数据通信系统研究[D].北京:北京交通大学,2008[10]张硕.基于ARM9的通用铁路信号测试系统的研究[D].北京:北京交通大学,2009[11]孙杰,中红巍.利用ARM实现的直流接地故障检测装置[J].沈阳工业大学学报。2009,(3):341-一344[12]朱立朝,陈晓荣,乐燕芬.嵌入式操作系统uc/os—II在ARM上的移植研究[J].仪表技术,2009,(12):41-一44[13]王皴.ARM9数据采集平台的设计和IJc/os-II操作系统的移植[D].西安:西安电子科技大学,2009[14]韩山,郭云,付海艳.ARM处理器应用开发技术详解与实例分析[M].北京:清华大学出版社,2007[15]袁华.基于ARM的无线遥控自动发球控制系统[D].上海:上海交通大学,2006[16]侯贻帅.基于LPC2129的嵌入式备用电源自动投入系统设计[D].西安:西安电子科技大学,2010[17]王田苗.嵌入式系统设计与实例开发[M].第2版.北京:清华大学出版社,2004[18]范晓询,高金山.基于lJClinux的嵌入式数字存储示波器[J].计算机测量与控制,2003(12):1100--一1102[19]梁志国,曹英杰.数字存储示波器的总体评价[J].仪器仪表学报,1999,(5):2~4[20]郭献宏.数字示波器波形显示处理技术[J].测试技术与自动化,2004,(11):12~14[21]王宏峰.ARM处理器在数字存储示波器中的应用研究[D].长沙:国防科技大学,2004[22]赵琪.1008Hz数字存储示波器的软件设计一参数测量与人机交互功能的实现[D].成都:电子科技大学,2004[23]卫刚.2008Hz手持式数字存储示波表软件系统设计[D].成都:电子科技大学,2006[24]郭献宏,王庚斗,褚洪.数字示波器波形显示处理技术[J].电子质量,2004,(7):12~13[25]谭浩强.C程序设计[M].北京:清华大学大学出版社,1999[26]严蔚敏.数据结构(C语言版)[M].第2版.北京:清华大学出版社,200758参考文献[27]郭雯婷.一种嵌入式系统液晶显示菜单结构的实现方法EJ].系统仿真技术,2010,(7):80~83E28]李雪梅,范寒柏,王峰.液晶显示多级菜单设计[J].河北经贸大学学报,2007,(7):112~114E29]黄文,一种高效的插值算法[J],陕西工学院学报,2002,3(1):30—32E303李顺新,匡翠云.基于三次样条插值计算长江三峡水位与库容关系函数EJ].软件导刊,2009,(3):45---46[31]徐士良.数值分析与算法[M].北京:机械工业出版社.[32]胡景.卫星高度计数据提取海洋潮汐信息及气候变化研究ED].青岛:中国海洋大学,2007[33]林茂六,尹宝智,刘治宇.高速采样信号数字内插理论与正弦内插算法研究[J].电子学报,2000(12):8~10[34]周培德,算法设计与分析[M].北京:机械工业出版社,1992[353张慧.数字存储示波器中的数字信号处理研究ED].南京:东南大学,200659