新闻中心

EEPW首页 > 消费电子 > 设计应用 > S3C2410和Linux的电影列表系统设计

S3C2410和Linux的电影列表系统设计

作者:时间:2018-09-04来源:网络收藏

摘要:随着数字信息技术和网络技术的高速发展,建立在其基础上的也已经广泛应用于人们生活、工作的各个领域。本文介绍了基于S3C2410和嵌入式Linux操作系统的系统设计的实现过程。该系统基于嵌入式开发平台搭建,以实现对JPEG格式图片、文字的各种效果显示和外设鼠标的控制等。

本文引用地址:http://www.eepw.com.cn/article/201809/388328.htm

引言

随着新媒体的进步,网络媒体产品的日益发展,互联网将“颠覆”电视的传统地位。新媒体提供了丰富的媒体形态和多样化的收视方式,如点播、回看、下载等,使其有了交互功能和更长的生命周期。因此,交互式网络电视(IPTV)的出现是必然的结果。是IPTV中数字多媒体内容最为关键的节目来源,即电视节目导航系统,主要用来描述提供给电视观众的所有节目的信息,是构成交互电视的重要技术之一。在IPTV业务中,用户可通过功能来了解电视电影节目的名称、播放时间和内容梗概等相关信息,并实现对节目的快速检索和访问,进行频道选择或视频点播等操作。

1 系统环境的选择与配置

1.1 系统软硬件平台选择

是指以应用为中心,以计算机技术为基础,软硬件可裁剪,适用于应用系统对功能、可靠性、成本、体积和功耗有严格要求的专用计算机系统。由嵌入式微处理器、外围硬件设备、嵌入式操作系统以及用户应用程序4部分组成。本系统选择x86处理器和

Linux操作系统作为系统开发环境,嵌入式ARM系列微处理器和嵌入式Linux操作系统作为系统运行平台。

作为学校实验室开放基金项目,本系统选择学院实验室已有的JXARM9-2410教学实验系统进行设计与实现。JXARM9-2410实验箱采用三星公司的S3C2410微处理器,是一款为手持设备设计的低功耗、高集成度的基于ARM920T核的微处理器。它集成了外部存储器控制器、LCD控制器、ADC和触摸屏接口等,现在广泛应用于PDA、移动通信、路由器、工业控制等领域。常见的通用型嵌入式操作系统有Linux、VxWorks、Win  dows  CE等。Linux是以Unix为基础发展而成的操作系统,能够支持ARM、MIPS、ALPHA、x86、PowerPC等多种系列的嵌入式微处理器。Linux操作系统最大的特性就是开源性和可裁剪性,除此之外,Linux操作系统还有内核高效稳定、良好的可移植性、支持多种文件系统等优点,有利于Linux在嵌入式设备中的应用。

1.2 编译器的选择与配置

本系统选用C语言编写源码、编译生成在ARM平台上的程序,因此需要在Linux环境下安装标准的C开发环境和交叉编译器arm-linux-gcc。使用命令sudo  apt-getinstall gcc g++ libgccl libg++make gdb安装C开发环境。安装交叉编译器步骤如下:

①下载编译器源文件arm-linux-gcc-3.4.1.tar.bz2,使用tar命令进行解压此文件。

②将解压后形成的arm文件夹拷贝到usr/local/目录下,现在交叉编译程序集都在/usr/local/arm/3.4.1/bin目录下。

③修改环境变量,把交叉编译器的路径加入到PATH中,并使用命令source/root/.bashrc使新的环境变量生效。

2 ARM9嵌入式电影列表软件设计

在本系统中主要完成的任务是对所存在的电影信息的目录进行检索,通过解析生成电影节目菜单,将其可用信息主要以图片和文字的方式通过列表的形式显示出来,给用户一个直观的操作界面,以获取节目的有用信息。

2.1 初始化

(帧缓冲)是Linux内核的一种图形设备驱动接口,提供了LCD控制器的抽象性描述。它将LCD控制器上的显存抽象成一种字符设备,应用程序通过定义好的接口可以访问LCD控制器的显存,直接对显示缓冲区进行读/写操作。用户只需要直接向Framebuffer显示缓冲区写入数据就可以更新显示屏的输出。Framebuffer的设备文件一般是/dev/fb0、/dev/fb1等,其使用方法如下:

2.2 图片显示

本系统使用Libjpeg库在Linux下显示图片。Libjpeg是一个被广泛使用的jpeg压缩/解压缩函数库,它能够读写JPEG格式的图像文件,通常这类文件是以.jpg或者.jpeg为后缀名的。通过Libjpeg库,应用程序可以每次从jpeg压缩图像中读取一个或多个扫描线,而诸如颜色空间转换、降采样/增采样、颜色量化等由Libjpeg完成。对于Libjpeg而言,图像数据是一个二维的像素矩阵。对于彩色图像,每个像素通常用三个分量表示,即R、G、B三个分量,每个分量用一个字节表示,因此每个分量的取值范围为0~255;对于灰度图像,每个像素通常用一个分量表示,一个分量同样由一个字节表示,取值范围为0~255。因此,本系统中只要将系统中需要显示的JPEG图片进行解码为bmp像素点,再通过Framebuffer设备写入应用程序空间就可以实现图片的显示。通过Libjpeg对JPEG图片进行解码的过程如下:

调用jpeg_start_decompress()函数之后需要为解压后的扫描线上的所有像素点分配存储空间,这个空间的大小由图像输出的宽度、高度和每个像素的字节数决定。JPEG解压缩对象cinfo中output_width和output_height分别表示图像输出的宽度和高度,output_components表示字节数。

对扫描线的读取是按照从上到下的顺序进行的,即图像最上方的扫描线最先被jpeg_read_scanlines()读入存储空间中,紧接着是第二个扫描线,最后是图像底边的扫描线被读入存储空间中。

2.3 文字显示

在Linux下显示文字使用FreeType库。FreeType库是采用面向对象的思想高度模块化的程序库,是一个开源的、高质量可移植的字体引擎。它提供了统一的接口来访问多种字体格式文件,包括TrueType、OpenType、Type1、CID、CFF、Windows  FON/FNT、X11  PCF等。本系统采用点阵的方式显示字体,即要先取得汉字的点阵表示形式,然后根据点阵中每一位是否为1来决定是否对屏幕上相应的像素赋值。FreeType库里保存字体属性的结构体FT_Bitmap,包括位图行、列、每行所占字节数等信息。对FreeType库的使用步骤如下:

2.4

目前最常见的鼠标有PS/2鼠标和USB鼠标。但就应用层去看这两种鼠标其实没有太大的区别,PS/2鼠标有4种工作模式:复位模式、流模式、遥控模式、检测模式。流模式是默认的工作模式,在流模式下鼠标的任何动作都会报告给主机。

(1)鼠标的解析与绘制

鼠标的设备文件为/dev/input/mice。当鼠标有动作(移动、按键、滚轴)的时候可以通过cat/dev/input/mice命令,获得动作数据并显示在屏幕上。但多数是乱码,原因是读到的鼠标动作数据,不一定是0~127的可见字符。

实现鼠标解析的主要代码如下:

通过上述对鼠标协议数据的解析,获取鼠标的按键事件和x、y方向的相对增量,只要声明一组变量,用来累加dx、dy即可获取鼠标在屏幕的绝对坐标。

鼠标的绘制首先需要定义一个鼠标的标志。在屏幕上绘制鼠标标志前,先保存屏幕相应位置(鼠标标志大小)的原有图像,而后再绘制鼠标的标志。当鼠标移动到一个新位置时,在原来位置就可以根据保存的原有图像恢复,而在新的位置继续重复保存、绘制即可。

(2)鼠标的按键事件控制

以按钮A事件为例,其主要实现代码如下:

通过解析的鼠标信息。判断D0,即左键的按键信息,当为1时,表明左键按下,这时可以通过鼠标是否按下的状态,调用相应的功能。

3 系统实现

本系统主界面包括系统时间的显示、电影海报排列、电影名、翻页和结束按钮,如图1所示。点击翻页按钮,可以进入下一页电影节目。点击电影海报图片进入该影片的介绍栏,显示该电影的详细介绍,如图2所示。点击结束按钮,程序进入退出界面,3  s以后程序结束。

结语

本文主要介绍了在Linux操作系统下采用JXARM9-2410教学实验箱设计实现的电影列表产品。本系统实现了图片和文字的显示、鼠标按键事件等功能,已经完成了电影列表的基本功能。按钮事件的实现为系统提供了交互功能,为后面IPTV的进一步制作奠定了基础。对于本系统后续研究设计,仍有可以进一步扩展和改进的地方,例如可以在本系统上扩展USB功能、网络通信功能和触摸屏功能等,以进一步完善上层操作界面的设计。作为学校实验室开放基金项目,本系统的实现与完成也给学院提供了更多的专业教学资料,有利于激励本专业学生的学习积极性,提高教学质量和水平。



评论


相关推荐

技术专区

关闭