控制/MCU
近年来,随着嵌入式技术的不断发展,各种电子产品层出不穷,对于那些具有众多功能,但按键数目无法满足要求的设备来说,选择一个好的操作系统和设计一套合理的消息处理机制,已经成为研发人员研究的一个课题。本文以此为背景,研究了UCOS-II操作系统在数码相框中的应用,详细描述了UCOS-II操作系统在ZEVIO1020双核处理器上的移植,并且根据数码相框多任务的特点,设计了一套完整的消息处理机制。实践证明,采取本文所设计的系统可以灵活的完成任务间的调度和切换。
数码相框的主要特色是图片显示清晰,图片显示效果多种多样,同时还具有视频播放、音频播放、JPEG图片解码等附加功能。在本系统实现过程中主要分为六个模块:总控模块、GUI界面模块、图片显示模块、视频模块、音频模块、JPEG解码模块。总控模块实现对其它模块的管理与控制。图片显示模块通过ZEVIO1020双核处理器的3D图像内核处理,实现多种三维的动态显示效果,通过对定时器设置的改变,实现图片播放速率的调整。视频模块和JPEG解码模块因为对速度的要求较高,使用高速数据传输通道DMA来实现ARM和DSP之间的双核解码。音频模块可以解码MP3,WMA等多种音频格式。UCOS-II操作系统的任务就是在不同状态下,根据不同的键盘输入消息实现各个模块间的灵活调度。
ZEVIO1020多媒体应用处理器是美国LSILogic公司发布的第一款基于ZEVIO架构的标准芯片。具备低功耗、更高级图像和数字音/视频处理功能。ZEVIO1020处理器高度集成,包括通用处理的ARM9内核,多媒体处理的ZSP400内核,此外还包括了一个3D图像内核和一个2D/3DMIDI声音核,它也集成了一个视频DAC(数字到模拟转换器)用于直接输出到电视和一个SDIO(安全数字输入/输出)卡槽用于数据存储或者额外的周边扩展。
ZEVIO1020处理器的开发平台如图1所示,它的通用处理内核ARM926EJ-S的工作主频为150MHz,作为系统主处理器,可以完成控制和数据处理工作;ZSP400DSP处理器为视频解码和JPEG解码工作提供了高效运行平台,工作主频为150MHz。除此之外,ZSP400具有双MAC、双算法逻辑单元(ALU)DSP核,每周期4指令,正交的载入/存储指令集的特点。同时在ZEVIO1020的存储结构中,DMA提供了高速数据转移,能够完成ARM处理器和DSP处理器双核之间的高速数据传输。
图1 ZEVIO1020平台体系架构
UCOS-II操作系统是完全可剥夺型的实时内核,可以同时管理64个任务,函数的调用和服务时间具有确定性。其内核提供的任务调度与管理,时间管理,任务间同步与通信,内存管理和中断服务等功能,具有执行效率高、占用空间小、实时性能优良和可扩展性强等特点。最小内核编译可以达到2KB。UCOS-II的移植主要是编写和处理器有关的代码,以及根据处理器设置中断向量表,提供给操作系统一个时钟作为系统时钟。
OS_CPU_A.ASM是需要用户根据不同处理器的体系结构编写的汇编文件。该文件包括了四个函数:
OSStartHighRdy()、OSStartHighRdy()、OSCtxSw()、OSIntCtxSw()、OSTickISR()。
OSStartHighRdy()的作用是运行就绪态任务优先级最高的任务。OSCtxSw()是实现CPU在正常运行时任务间的切换,即对当前任务堆栈的保存和对高优先级任务堆栈的弹出,使最高优先级任务获取CPU的控制权。OSIntCtxSw()是在中断服务程序中执行切换功能的函数。
OSTickISR()是系统时钟的中断服务程序。该程序执行的频率为100HZ,主要功能是检查是否有由于延时而被挂起的任务成为就绪任务,如果有就调用OSIntCtxSw()进行任务切换,从而运行高优先级的任务。OS_CPU.C中主要编写任务堆栈初始化函数OSTaskStkInit()。
中断向量表是系统产生中断处理的索引表,系统会根据不同的中断类型引导它们进入不同的中断处理函数。ZEVIO1020双核处理器提供了多种不同类型的中断处理,主要分为两类:IRQ中断和FIQ中断。FIQ中断是快速中断处理函数,执行速度快,优先级高,一般用于重要和对实时性要求较高的中断处理。IRQ中断是普通的中断处理函数,一般的中断处理都归属于这种类型的中断。在各种中断同时触发的情况下,中断程序会根据各种中断优先级的设定来进行比较,执行优先级最高的中断处理程序。对于UCOS-II的操作系统来说,需要一个系统时钟作为操作系统的时钟节拍,供操作系统调用时间函数使用。ZEVIO1020有4个Timer可供选择,在这里选用Timer1作为系统时钟,设置系统时钟频率为100HZ且为FIQ中断。中断处理程序的实现过程如图2所示。
图2中断处理流程图
5.1、系统任务层的组成和优先级的设计
系统任务层并行存在以下六个任务:总控任务、音频解码任务、视频解码任务、JPEG图片解码任务、GUI界面任务,图片显示任务。每个任务均有以下三部分组成:应用程序、任务的堆栈以及任务的状态机。任务堆栈用以存储CPU寄存器内容。当某任务由运行态变为其他状态时,CPU寄存器内容压入相应任务堆栈,反之则将相应任务堆栈内容置入CPU寄存器。任务的状态机记录了当前任务的运行状态,当有新的消息转发给任务时,任务可根据状态机查询相应的状态,来决定下一步的具体操作。操作系统也可以查询任务的状态机来获得当前任务的运行状态。
优先级的设定是根据任务的重要性和任务的实时性需求来定的。总控任务优先级最高,视频任务的实时性大于音频任务的实时性,所以将音频的优先级排在视频解码任务的后面。对于其他几个任务一般没有太多的约束,我们可以任意安排其优先级。优先级从高到底的顺序排列:总控任务,视频解码任务,音频解码任务,JPEG解码任务,图片显示任务,GUI界面任务。
5.2、系统任务间的消息通信机制与状态机的设计
在数码相框这个系统中,消息的类型主要有两类:
一是外部输入(键盘)转化的消息;二是任务之间相互传递的消息。第一类消息不知道消息的接受方,直接交给总控任务来处理,总控任务通过查询状态机获得各个任务目前的运行情况后,进行内部消息的转换,转发给目标任务,由目标任务来具体处理。目标任务接受到总控任务传送过来的内部消息之后,查询自身的状态机,执行相应的处理。每个任务都有一个时间点来查询新的消息。在音频解码任务中这个时间点设在解码数据流后填充buffer和播放buffer互换的时刻。图片显示任务是一个不断循环的显示过程,利用每次循环结束的时刻查询新的消息。第二类消息是任务之间相互传递的消息,任务知道消息的接受方。因此在两个需要相互通信的任务之间直接建立消息邮箱和信号量进行同步和通信。
状态机是记录任务运行状态的一种工具,对于数码相框这个系统来说,在不同的运行状况下对于相同按键的处理是不同的,所以必须通过状态机来实现任务的调度和处理。本文的状态机实现采取分块的思想,即一级一级从上往下对消息进行处理。上级的状态机不需要对消息的内容进行具体的处理,只要明确传递给下面的哪一个状态机来具体处理。针对数码相框这个产品,本文设计了两级状态机的实现机制。一级是总控任务的状态机,二级是各个应用程序的状态机。总控任务的状态机,主要用来对外部消息的转发;应用程序的状态机主要处理启动,退出,暂停等具体操作。如图3所示,总控任务查询到有新的消息进来后,首先查询当前各个任务的运行情况,然后判别消息的内容,将消息转换成内部消息分发给当前任务或者即将运行的任务。应用程序的任务状态机接受到总控状态机发送过来的内部消息之后,也是查询自身的状态机,并且检查消息的正确性,然后根据自身的运行状态执行相应的操作。具体如图4所示。
图3总控任务的状态机流程
图4 应用程序的状态机流程图
5.3、数码相框系统的整体实现过程
系统上电后从flash中执行boot.s启动代码,boot.s的主要作用就是初始化SDRAM,设置PLL,将保存在flash中的CODE拷贝到SDRAM中。因为flash中的数据可以永久保存,不会因为掉电而消失,而SDRAM则不行。
在主函数main中初始化UCOS-II操作系统,创建总控任务、视频解码任务、音频解码任务、图片显示任务、GUI界面任务,同时创建信号量和mailbox等系统资源等待应用程序调用,启动UCOS-II操作系统。此后CPU的控制权交给操作系统,操作系统将CPU的控制权首先给予优先级最高的总控任务。
总控任务运行后,驱动所有外接设备,包括LCD驱动、SPU驱动、GUI驱动、Timer驱动、双核的驱动,开启必要的中断位,随后总控任务开始轮询外部消息,有消息进来时根据上述描述的状态机,传递给其他任务,运行其他任务,同时保证每隔5个时钟节拍重新轮询一次消息队列,处理新的外部消息,没有新的消息立即释放CPU的控制权,返回正在运行的任务。
本文讨论了UCOS-II操作系统在ZEVIO1020上的移植过程,阐述了移植过程中的几个主要步骤,同时针对数码相框这个电子消费产品给出了整个系统任务的设计方法以及如何进行任务间的消息传递方案。解决了系统中多任务之间相互切换和多任务同时运行的困窘。充分挖掘了UCOS-II操作系统的特性,灵活运用了操作系统的资源并且予以实现。实验测试结果显示,各种任务模块可以在预想的方案中实现灵活的调度。
图5 基于UCOS-II操作系统的数码相框实物图
全部0条评论
快来发表一下你的评论吧 !