基于Atmel-View的电子相框实现
扫描二维码
随时随地手机看文章
0 引言
电子相框作为一种以数字照片的保存、回放和浏览为核心功能的产品,迎合了消费者的需求。电子相框结合液晶显示技术、电视技术、数字存储技术,日益成为面向时尚个性的数码相机、数码摄像的最佳伴侣。随着核心器件NandFlash和LCD屏的降价,必将进一步刺激电子相框的市场需求。
1 AT76C120处理器简介
本设计采用Atmel公司的AT76C120体系结构来构建应用。此架构采用ARM7TDMI CPU最大频率78MHz,支持JPG图片浏览、MP3音频功能、MPEG视频功能、可遥控电视功能,USB2.0接口和各类闪存卡的支持等,是一款高性能的数码图像和视频的处理体系。
2 Atmel-View框架分析
Atmel-View是Atmel公司为AT76C120开发板定制的应用程序,它已提供所有功能的低层次实现,是一套成熟的可扩展的Application解决方案。其与Command Shell、底层驱动Lib共同构成整个软件系统。
Command Shell主要用于动态非编译功能调试,在程序运行时直接通过串口进行命令操作,这样大大降低开发过程的调试时间,是便捷有效的辅助开发手段。
各驱动模块的API主要由底层驱动Lib 来实现。Atmel-View的功能实现主要是基于Lib中API的运用和组织。表1列出了Atmel-View中相关模块及其功能。
表1 Atmel-View相关功能模块
模块 | 功能 |
DCF模块 | 提供文件操作相关功能函数 |
Font模块 | 作为字库,以头文件形式加载 |
Infrared模块 | 提供红外遥控器控制的相关功能函数 |
Main模块 | 系统初始化工作和程序主入口 |
Menu模块 | 菜单系统的实现 |
Mp3模块 | 提供Mp3播放功能的实现 |
Ppt模块 | 提供文件夹、文件列表功能的实现 |
Setting模块 | 对于各项功能参数的设定在此模块记录和读取 |
Strings模块 | 记录对应于菜单项的各项功能和其他功能的字符串值 |
View模块 | 提供图片浏览、图片幻灯和视频播放等功能的实现 |
Bmp-icons模块 | 以头文件形式存储所有图标图片转换成的对象 |
board_sh120ek模块 | 卡板初始化驱动相关 |
3 功能概述及流程
基于Atmel-View的电子相框应用主要提供如下功能:
JPEG图片浏览、JPEG图片幻灯放映、JPEG缩略图模式浏览、对各类卡的读写支持、MP4视频放映、MP3背景音乐、MP3播放器、文件和文件夹浏览。
在上述功能基础上需要在UI上加以组织、整合,并面向新的需求进行实现。图2所示为带有蓝牙模块支持的UI功能流程图,分析了基于Atmel-View的UI过程。流程图1从电子相框启动开始到各个功能结点为止把整个菜单系统的框架和基本内容给勾勒了出来。首先进行蓝牙模块的初始化工作,设置卡上默认文件传输位置。随后,搜索存储卡中Jpeg文件,开始幻灯放映,放映幻灯期间若有蓝牙传输请求则在图片切换间隙挂起Atmel-View进程(防止资源重入冲突),传输结束继续放映直至用户退出播放。之后将正式从Main模块进入菜单系统模块,启动菜单包含了3个子菜单:选卡菜单、系统设置菜单和蓝牙设置菜单。选卡菜单项包括卡板所支持的所有存储卡项,选择已插的存储卡项进入下级功能菜单。功能菜单项提供图片、Mp3、视频、文件浏览这4项功能。系统设置菜单主要进行全局的配置设定:语言设定、幻灯效果设定、背景音乐(开/关)设定。蓝牙设置菜单进行蓝牙模块的设置和启用。“开/关”项决定是否启用蓝牙传输; “设用户名”项利用软键盘设置本设备蓝牙名称。
流程图2具体就图片浏览功能模块进行了流程刻画。存储卡中有Jpeg图片,则首先进入Thumbnail模式,一页显示多幅图片的缩略图。期间接受蓝牙传输请求并进行相应处理。然后进行全屏图片浏览,手动切换图片。在Thumbnail模式及图片浏览过程可调出设置菜单,进行幻灯效果、文件操作、文件排序等功能,设置幻灯切图间隔和启动幻灯放映也在此菜单项中。
流程图3简要描绘了在菜单(菜单都通过MenuMode来调用)过程中和蓝牙模块间的交互方式。在进行按键响应操作流程前,先和蓝牙模块进程间通信,监听蓝牙传输请求。若有蓝牙传输请求,则提示蓝牙传输进行中并等待蓝牙文件传输(蓝牙传输受红外遥控模块影响,所以传输过程关闭红外接收不进行按键响应,至传输完毕开启红外接收)。
图3 带蓝牙模块UI功能流程
4 Nucleus操作系统的嵌入
Nucleus Plus是美国源代码操作系统商ATI公司推出的新一代嵌入式操作系统,属于抢先式实时多任务操作系统内核, 95%的代码使用ANSI C编写,非常便于移植于各种处理器家族。在通讯、国防、工业控制、航空/航天、铁路、网络、POS、自动化控制、智能家电等领域的广泛应用。
Nucleus Plus通常作为一个C 库文件实现。实时的Nucleus Plus应用被链接到Nucleus Plus库。目标文件可以下载到目标机,或者放到ROM 里。在一个典型的目标环境,假设所有服务被应用,Nucleus Plus指令集的二进制映象文件需要大概20K 字节的内存。
总的来说,Nucleus Plus极大的提高了实时应用程序的开发工作。这些可以转变成更低的开发投资和更短的开发周期。自从Nucleus Plus支持应用程序移值到新的处理器系列上以来,应用的开发投资已经被保障了。
4.1多任务系统的实现
Atmel-View实质上还是一个单任务的嵌入式定制系统,现有功能的运用主要基于串行运行。但随着应用的深入功能模块的扩展,单任务系统逐渐显得力不从心。
蓝牙模块的运行需要多任务系统的支持,在蓝牙服务的开启状态下,需要不断监听无线请求,在接受到蓝牙传输请求后进行传输处理。使用单任务方式来支持蓝牙服务的监听显然是不合理的,那样Atmel-View将停止运行其功能。
本设计使用Nucleus Plus提供系统级的多任务调度,将Atmel-View模块和蓝牙模块作为同等的任务进行加载运行。选择Nucleus Plus作为任务调度系统,在于其易用性、代价小、嵌入式特性。
4.2 初始化
INT_Initialize 子程序在Nucleus Plus系统中是最先运行的。对大多数的目标环境,硬件复位向量必须包含在INT_Initialize 地址中。INT_Initialize 负责所有与目标硬件相关的初始化。与目标硬件相关的初始化通常包括设置不同种类的处理器控制寄存器,中断向量表,全局的C 数据元素,一些Nucleus Plus变量和系统堆栈指针。当INT_Initialize 完成,控制转移到高级Nucleus Plus初始化子程序INC_Initialize上。注意控制不会返回INT_Initialize。
INC_Initialize 调用每个Nucleus Plus组件的初始化子程序。在所有Nucleus Plus初始化完成之后,INC_Initialize 调用用户供应的初始化子程序Application_Initialize。
Application_Initialize 子程序负责定义初始化应用环境。初始化应用任务,邮箱,队列,管道,信号量,事件集,内存池和其他Nucleus Plus对象都在子程序中被定义。在Application_Initialize 返回后,INC_Initialize 开始初始化任务调度表。
4.3 任务
任务就是目的明确的半独立程序段。大多数现代实时应用都要求多任务。另外,这些任务的重要等级经常变化。管理这些竞争、实时任务的运行是Nucleus Plus的主要目的。每个任务都有五种状态:运行、就绪、挂起、中止、完成。
4.4 任务通信与同步
Nucleus Plus 为通信目的提供邮箱(mailbox),队列(queues),管道(pipes)。邮箱,队列,管道是独立的公共设备。任务之间和其他系统设备之间的联系由应用程序确定。这些通信设备之间主要的差别是数据通信的类型。在Atmel-View模块和蓝牙模块的进程间通信方式,这里选择使用队列和信号量来实现。
4.4.1 队列的应用
在菜单系统的应用中,需要加入对蓝牙模块的支持。除了构建蓝牙设定菜单外,在蓝牙进程开启并实时运行的状态下,需要通过队列方式的进程间通信来获取蓝牙进程的传输请求状况。当传输请求发生后,菜单系统将及时进行反应,提示用户当前处于蓝牙传输过程并且程序阻塞于此。当传输结束后,同样通过队列消息来得到通知,继续菜单系统的程序逻辑。
蓝牙进程进行蓝牙传输服务的监控工作,一旦外部传输请求发生,蓝牙进程将通过调用BTUI_UpdateResponse函数来通知Atmel-View任务,并开始数据接收写入工作。此函数主要是作为蓝牙任务端响应蓝牙传输相关事件,进而与Atmel-View进行及时有效的沟通、协调工作。当蓝牙任务端事件响应时,就调用NU_Send_To_Queue函数,将信息传递到队列Task_bt_queue中。
在MenuMode进行完初始界面绘制后,即刻开始不断监听与蓝牙模块共享的队列Task_bt_queue,在调用函数NU_Receive_From_Queue接收到蓝牙传输请求后,即弹出信息框通知用户蓝牙传输进行中,同时关闭影响蓝牙传输的红外接收并设置蓝牙传输状态为TRUE,以避免按键处理模块的进行。如此,程序将在蓝牙传输期间不断进行while循环随时监听Task_bt_queue的新信息情况。直至接收到来自蓝牙模块的传输完毕信息,标识着蓝牙传输工作的完毕,则更新显示区,重开启红外接收并将蓝牙传输状态设为FALSE以让按键处理模块重新进行。
4.4.2 Semaphore的应用
Nucleus Plus 提供信号量(semaphores),事件集(event groups)和信号(signals)解决信号同步问题。信号量和事件集都是独立的,公用的设备。任务和其他系统设备的联系由应用程序决定。在Atmel-View模块和蓝牙模块的进程间同步方式,这里选择使用信号量来实现。
在Atmel-View的UI应用中,加载媒体文件访问存储卡在所难免,而蓝牙模块的传输工作也将把接收到的文件写入存储卡中。在蓝牙进程和Atmel-View进程同时访问存储卡设备时,由于资源重入的不支持将导致资源冲突程序瘫痪的发生。因而,这里使用Nucleus的Semaphore来解决资源竞争问题。
声明了NU_SEMAPHORE变量后,此变量将在Atmel-View进程和蓝牙进程间共享,在访问冲突资源的时候,调用NU_Obtain_Semaphore和NU_Release_Semaphore函数来将资源访问模块包住,从而保证在得到Semaphore后,直至释放Semaphore前,资源访问都是安全的,因为另一正要访问此资源的进程将由于得不到唯一的Semaphore而暂时被自动悬挂起来。
5总结展望
随着电子相框市场的日趋成熟,技术的不断发展,功能模块日益增多,系统架构也变得越发复杂。这使得软件产品的可用性、易用性、友好性显得更为重要起来,UI的设计实现是否合理将直接影响这些因素。
市面上流行的不少电子相框的UI设计存在着架构简陋、复用性差、可扩展性差的问题。本论文的方案主要基于Atmel-View,完成了一套层次化、结构化、易扩展的菜单系统,实现效果良好。并嵌入Nucleus Plus操作系统,实现了菜单系统和蓝牙模块间的进程通信和同步,有效得支持了蓝牙模块。