历史上的今天
返回首页

历史上的今天

今天是:2025年02月18日(星期二)

正在发生

2018年02月18日 | 基于Linux嵌入式操作系统掌上娱乐系统设计方案

2018-02-18 来源:eefocus

    近年来,随着微处理器技术、DSP技术、多媒体编解码技术以及嵌入式技术的发展,多媒体娱乐终端已经成为消费性电子产品的热点。同时,逐渐成熟的市场随着MP3在市场上取得的巨大成功,以及MP4、数字电视、3G通讯等相关技术的起步,在未来几年内都将会得到快速发展。

    嵌入式系统是以应用为中心、以计算机技术为基础、软件硬件可裁剪、适应应用系统对功能、可靠性、成本、体积、功耗严格要求的专用计算机系统。


    多媒体终端正是数字信息产业的一个重要组成部分,所以在这个背景下,MultimediaTerminal蕴含着极大地发展潜力。

    本文是基于Linux嵌入式操作系统在UP-TECHS3C2410DVK1。1开发平台下设计并实现了一个高性能、低功耗、低成本的嵌入式掌上娱乐系统。

    1系统概述

    本系统以UP-TECHS3C2410DVK1。1为开发平台,使用嵌入式linux作为操作系统。

    本系统的实现包括两个方面:

    一是底层系统的搭建。本系统是在通用的嵌入式Linux操作系统上进行适当的裁剪,使其符合系统的硬件平台,并且初始化开发底层的驱动,实现了对系统的控制以及数据的存储和传输。

    二是应用层的实现。

    系统的底层包括文件系统的搭建以及各种接口部件的驱动程序,这些驱动程序通过嵌入式Linux操作系统进行调用,然后完成应用的功能,为上层的接口层和应用层提供服务。

    中间的嵌入式GUI为接口层,采用QT4作为用户GUI的界面库。QT4是基于服务器-客户端的一种用户界面中间件,提供了丰富的功能控件和精美的界面设计功能,可以便捷的设计出所需要的各种功能模块。

    系统的最上层就是直接面向用户的应用层。该层采用QT4设计,向用户提供了精美的用户界面,用户可以通过触摸屏方便的调用相关功能。系统的软件结构框图如图1所示:

9.jpg?imageView2/2/w/550

    图1系统的软件结构框图

    应用层的设计是本文主要的开发工作,主要包含以下几种功能模块:

    ①多媒体功能模块:调用MPlayer播放器对系统内存或者USB接口中的外存定位对应的体文件,并将其解码;视频、视频文件可以全屏播放/最小播放。几乎可以播放市面上现存的所有的音频、视频文件。

    ②娱乐游戏功能:提供了几个界面友好有趣的游戏,增加系统的娱乐性。

    2开发平台

    2。1硬件开发平台介绍

    硬件平台采用博创UP-TECHS3C2410DVK1。1开发板,处理器类型:SamsungS3C2410。主频:203MHz。

    它适用于工业控制、移动通信设备、医疗仪器等多种场合,外扩64MBNANDFLASH和64MSDRAM,提供USB2。0接口与计算机进行高速通信;该平台集成了大尺寸LCD触摸屏,型号:LQ080V3DG01,分辨率:640*480像素,这也是选择它作为开发平台的重要原因。系统硬件结构框图如图2所示。

10.jpg?imageView2/2/w/550

    图2系统硬件结构框图

    2。2软件开发平台介绍

    在系统层,由于UP-TECHS3C2410DVK1。1开发板提供原始的系统(vivi、linux-2。4、root。cramfs)版本低,因此,针对多媒体娱乐系统,裁剪移植了适合本系统的Uboot-1。1。6、linux-2。6。24内核和yaffs文件系统。该系统使用较为通用的bootloader:UBoot,网络资源较多的内核linux2。6和可读可写的yaffs文件系统,易于系统的开发。并配置了LCD屏驱动、网卡驱动、SD卡等驱动。

    在应用层,采用QTSDK设计所有的应用程序。

    Qt是一个跨平台的C++图形用户界面(GUI)库,包括跨平台类库、集成开发工具和跨平台IDE。使用Qt"一次开发,多次编译",无须重新编写源代码,便可跨不同桌面和嵌入式操作系统部署这些应用程序。

    3实现原理

    应用层软件的设计主要包括两个模块:多媒体播放器以及游戏模块。用户主界面设计了一个主框架,然后将其他功能模块的图标放在该框架内,完成了整体的规划设计。下面详细介绍这两个功能模块的设计与实现。

    3。1播放器的实现

    对于音频和视频的播放,本系统使用QT设计一个前端播放、控制界面,并使用Mplayer作为后端程序,能播放mp3、ogg、ogm、wma、wav、asf、au、avi、mpeg、mpg、mv1、mov、wmv、pls、m3u、mp4、m4a等音频和视频格式。播放器模块的结构图如图3所示,播放器使用Mplayer作为后端程序(红色部分),使用QT4开发前端程序(绿色部分)。

播放器结构图

    图3播放器结构图

    3。1。1后端程序简介

    本系统使用Mplayer作为其后端程序。MPlayer被评为Linux下的最佳媒体播放工具,不需要任何系统解码器就可以播放包括视频、音频、流媒体、广播、电视等各种媒体。

    Mplayer另一个重要特点在于其开源性。

    Realplayer,WindowsMediaPlayer,QuICkTime等许多播放软件都是性能优秀的播放软件,但由于它们都不开放源代码,给移植带来了麻烦。同时MPlayer还具有良好的移植性,可以移植到许多非X86平台上,MPlayer软件包中含有针对ARM架构的优化代码,这些代码利用ARM的特性加快了对媒体的处理速度。

    基于以上多个原因,本系统选择了MPlayer作为娱乐终端的播放软件。本系统通过移植Mplayer来实现对视频的播放功能。Mplayer编、解码模块,是系统的音、视频处理中心,在mplayer的编解码库中,包含的大量的音、视频格式处理程序,经过编译优化过的mplayer可以完成对大多数音、视频格式高效的编解码工作。

    3。1。2前端程序的设计与播放器的实现

    主界面窗口有一个显示屏和一些控制按钮,包括播放、暂停、下一首、上一首、音量调整以及播放进度条。文件操作窗口可以使用户选择要播放的文件。

    播放列表用来播放用户加载的多媒体文件。

    MPlayer默认全屏播放,但在GUI中一般都是指定区域或者控制来播放。这样显得美观,MPlayer支持在指定的X窗口播放的功能。用-wid参数告诉窗口ID即可。例如:mplayertest。mpg-wid0x00029#0x0029是XID,而QT的控件都是从QWidget继承下来,因此它本身也有wid,这样只要用QWidget::winID()取出WID,即可实现在指定窗口播放视频的功能。

    本模块是建立一个QtGUI程序。然后用一个label控件来播放视屏,用一个进度条显示播放的进度,用按键显播放,暂停,上一首,下一首,停止和添加资源文件。然后用一个Qprocess在后台执行MPlayer,并把label的WID传给它。然后把MPlayer的输入输出重定向,把原本从标准输入接收命令变成从GUI的接收命令。

    3。1。3播放功能设计

 

    播放器实现的软件流程图如图4所示:

11.jpg?imageView2/2/w/550

    图4播放器软件流程图。

    通过定义一个QProcess对象调用已编译好的Mplayer。

    QProcess*process=newQProcess();

    process->setProcessChannelMode(QProcess::MergedChannels);

    Process->start("mplayer–ac–madxxxxx");

    在命令中添加-slave和-quiet就可以通过命令设置Mplayer实现相应的功能。Process->start("mplayer–slave–quiet–ac–madxxxxx")。

    下面对播放器的暂停播放功能和音量调节进行介绍。

    ①播放暂停功能设计

    通过这段代码可以设置Mplayer暂停:process->write("pause");执行这段代码的时候在播放状态下就会暂停,暂停状态下就会继续播放。

    ②音量调节

    下面代码即可实现音量调节的功能:

    Process->write("volume-1");//音量减小;

    Process->write("volume+1");//音量增加;

    Process->write("volumeXX1");//音量设置成指定值

    该系统使用如下代码实现音量调节:

    QStringcmd="volume"+QString::number(value)+"1";

    process->write(cmd。toLOCal8Bit()。data());

    系统最终实现的实验效果图如图5所示:

系统最终实现的实验效果图

    图5播放器模块实验结果图

    3。2游戏模块的设计

    本系统设计了一个打砖块游戏。通过建立一个打砖块的游戏类CANnonFiELD,包含角度intangle、力度intforce、是否正在射击boolisShooting等成员,具有设置角度setAngle(intangle)、设置力度setForce(intforce)、射击shoot()、运动轨迹shotRect()、游戏控制newTarget()、setGameOver()、restartGame()等槽函数,能发出击中hit()、未击中missed()、角度变化angleChanged(intnewAngle)力度变化forceChanged(intnewForce)等信号。

    游戏开始时使用随机函数在指定区域内显示一个砖块,点击射击按钮时通过setAngle和setForce设置的角度和力度,使用shoot()进行射击,通过发出的击中hit()或未击中missed()信号来作出相应的动作。仿真效果图如图6所示:

12.jpg?imageView2/2/w/550

    图6游戏模块实验结果图

    4总结

    本系统采用开源的Linux操作系统和QT4界面设计工具,整个系统采用模块化设计,具有良好的可扩展性。硬件平台采用的是UP-TECHS3C2410DVK1。1嵌入式系统,该芯片采用ARM架构,其独特的架构设计具有功耗低、功能强的特点,因此非常适合用于手持式设备;采用LCD触摸屏与用户进行交互,使用简单,符合便携式终端的发展趋势。


推荐阅读

史海拾趣

ERGOBAHCO公司的发展小趣事

在快速发展的同时,ERGOBAHCO公司始终不忘履行社会责任和推动可持续发展。公司积极参与社会公益事业,捐款捐物支持贫困地区的教育、医疗等事业。同时,ERGOBAHCO公司还注重环保和节能减排工作,通过引进先进的环保技术和设备,实现了生产过程的绿色化、低碳化。这些举措不仅提升了公司的社会形象,也为公司的可持续发展奠定了坚实基础。

CYAN公司的发展小趣事

1996年,瑞典的工程师Jan Nilsson在电子行业中创立了CYAN公司,专注于高性能网络设备的研发。在初创阶段,CYAN就凭借其独特的技术理念和创新的产品设计,赢得了市场的初步认可。公司推出了一款具有高效能和高可靠性的网络交换机,解决了当时网络传输中的瓶颈问题,从而在市场中崭露头角。

Eurotechnique公司的发展小趣事

在XXXX年,Eurotechnique迎来了一次重要的技术突破。公司成功研发出了一种新型的微控制器,具有更高的性能和更低的能耗。这一技术的突破不仅为公司带来了大量的订单,也进一步巩固了公司在微控制器领域的领先地位。随着技术的不断进步,Eurotechnique开始逐步扩展产品线,将业务范围拓展到数字信号处理、无线通信等多个领域。

Advanced Energy公司的发展小趣事

随着公司的不断发展壮大,AE公司于某一时期成功在纳斯达克上市。这一里程碑事件标志着AE公司在电子行业的地位得到了进一步的巩固和提升。上市为公司带来了更多的资金支持,使得AE公司能够加大在研发、生产、销售等方面的投入,进一步提升了公司的竞争力。同时,上市也增强了公司的品牌影响力,吸引了更多的合作伙伴和客户。

Diotec Electronics Corp公司的发展小趣事

在竞争激烈的电子行业中,Diotec始终保持对技术创新的追求。公司不断增加研发投入,引进先进的研发设备和人才,积极开发具有自主知识产权的新产品。这些新产品不仅丰富了公司的产品线,还进一步巩固了公司在市场中的领先地位。同时,Diotec还注重知识产权保护,通过申请专利等方式保护自己的创新成果。

Cogent_Computer_Systems公司的发展小趣事

Cogent_Computer_Systems公司在成立之初,便以其独特的技术创新在电子行业中崭露头角。公司研发团队成功开发出一款高性能的计算机芯片,该芯片在运算速度和能效比方面均达到了行业领先水平。这一技术突破迅速吸引了众多客户的关注,Cogent_Computer_Systems公司也因此获得了大量的订单。随着市场需求的不断增长,公司逐渐扩大生产规模,优化供应链管理,实现了业务的快速扩张。

问答坊 | AI 解惑

基于DSP和FPGA的信号采集的设计与实现

基于DSP和FPGA的信号采集的设计框图和实现代码…

查看全部问答>

太阳能给锂电池充电,出现爆裂,不知怎么回事

锂电池加了充电保护,电池12.60v,太阳能板标准16v,5w(实际肯定达不到)…

查看全部问答>

免费实验室申请

前段时间看到东方集成提供这个服务,提供免费实验室,详细http://www.jicheng.net.cn/rental/cart/lab_apply.html 分享给大家,有实际用过的希望给讲讲内幕…

查看全部问答>

串口通信中遇到的问题

CPU是STM32F103CB,无操作系统。 通过UART1接受GPRS发来的数据,在中断函数中 USART1_IRQHandler 中进行处理 unsigned char a_GPRSData[500]; unsigned int  g_DataLength; void USART1_IRQHandler(void)        ...…

查看全部问答>

MPLAB编译问题

Clean: Deleting intermediary and output files. Clean: Deleted file \"C:\\Program Files\\Microchip\\lzz1\\lzz001.cce\". Clean: Done. Executing: \"C:\\HT-PIC\\BIN\\PICC.EXE\" -C -E\"lzz001.cce\" \"lzz001.c\" -O\"lzz001.obj\" -Q - ...…

查看全部问答>

有一个病毒高手帮我做掉它!

是一个U盘感染的病毒,在D盘中出现一个autorun.inf文件,同时点D盘右健会多一个\"浏览\"项,而这个文件的内容是: [autorun] open=.\\recycled\\info.exe shell\\1=浏览 shell\\1\\Command=.\\recycled\\info.exe shellexecute=.\\recycled\\info. ...…

查看全部问答>

DS18b20温度显示问题

#include sbit ds=P3^7; //0-F数码管显示(共阴) unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66, 0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; //0-9数码管的显示,共阴带小数点 unsigned char code tabledot[]={ ...…

查看全部问答>

关于nios烧写问题、求大神帮助

使用的是ep2s180f1020i4的片子,配置芯片epcs64,用flash programmer 进行烧写,从状态栏来看 烧写成功了,但是上电后没有任何反应,不止nios没跑起来,连逻辑都没烧进去,但是在线运行时是正常的,单独烧写逻辑从新上电也是可以起来的,就是用nios ...…

查看全部问答>

第一版开关电源(新手入门,大神勿喷!)

经过再三调试,我人生的第一版开关电源诞生了,激动ing,不过也仍有很多问题没有解决!希望高手指教!这里好像不能传附件啊,详细过程在下面链接里面了,有兴趣的亲可以看看,多多指教!…

查看全部问答>