• 学前教育
  • 小学学习
  • 初中学习
  • 高中学习
  • 语文学习
  • 数学学习
  • 英语学习
  • 作文范文
  • 文科资料
  • 理科资料
  • 文档大全
  • 当前位置: 雅意学习网 > 英语学习 > 正文

    [基于嵌入式Linux数码相框设计与实现]数码相框报价

    时间:2020-03-06 07:47:46 来源:雅意学习网 本文已影响 雅意学习网手机站

      摘要:以嵌入式Linux软件平台的开源特点及嵌入式处理器快速发展,建立基于嵌入式Linux数码相框相关软件,对系统平台和各应用开发包移植应用程序开发。结果表明,利用嵌入式Linux的软件开发框架,开发出的数码相框应用软件,开发灵活便于扩展和升级,该数码相框可以应用实际,并可以快速产品化,应用前景广泛。
      关键词:数码相框;Linux;Jpeg;自动挂载
      中图分类号:TP311.52文献标识码:A文章编号:1672�7800(2011)012�0090�02
      
      
      作者简介:陈强(1982-),江苏苏州人,硕士,苏州工业园区服务外包职业学院教师,嵌入式系统设计师,研究方向为嵌入式研究与开发;刘正(1974-),江苏常州人,苏州工业园区服务外包职业学院讲师,研究方向为嵌入式技术与运用、信息与信息处理。1软硬件总体框架
      数码相框是展示数码照片而非纸质照片的相框。数码摄影必然推动数码相框的发展,因为全世界打印的数码相片不到35%。数码相框通常直接插上相机的存储卡展示照片,当然更多的数码相框会提供内部存储空间以接外接存储卡功能。数码相框就是一个相框,不过它不再用放进相片的方式来展示,而是通过一个液晶的屏幕显示,它可以通过读卡器的接口从SD卡获取数字相片,并设置循环显示的方式,比普通的相框更灵活多变,也给现在日益使用的数码相片一个新的展示空间。
      数码相框的硬件主要有LCD液晶屏幕、PCB印制电路板组成如图1。其中PCB集成了大部分器件包括处理器ARM9、内存32M、Flash64M等其他外围电路。
      图1硬件结构图
      软件架构是基于嵌入式Linux操作系统完成图片显示等相关操作。软件功能当插入外存时候,完成自动挂载后,会检索外存内所有JPG图片并解码显示到屏幕上如图2。
      图2软件总体结构图
      2使用Udev自动挂载U盘
      udev是一种工具,它能够根据系统中的硬件设备的状态动态更新设备文件,包括设备文件的创建,删除等。设备文件通常放在/dev目录下。使用udev后,在/dev目录下就只包含系统中真正存在的设备。Udev只支持linux-2.6内核,因为udev严重依赖于sysfs文件系统提供的信息,而sysfs文件系统只在linux-2.6内核中才有。
      为了满足本项目外存自动挂载须修改配置文件(/etc/udev/rules.d/01-sda.rules)如下:
      KERNEL=="sd[a-z][0-9]",MODE="0660"
      ACTION=="add",KERNEL==" sd[a-z][0-9]",RUN+="/bin/mount -t vfat /dev/%k /mnt/udisk"
      ACTION=="remove",KERNEL==" sd[a-z][0-9]",RUN+="/bin/umount /dev/%k"
      ACTION为U盘的动作,add为插入U盘,remove为移除U盘。KERNEL是U盘在内核中的名称。RUN是满足以上两个条件时所做执行的命令。
      将交叉编译好的udevd和udevstart下载到开发板中的/root/bin下并修改自启动脚本如下:
      #start udevd
      if [ �f /sbin/udevd ]
      then
      /sbin/udevd �daemon
      if [ $? �ne 0]
      then
      echo "dfmRun : start udevd error"
      exit
      fi
       else
      echo "dfmRun : udevd file not exist"
      exit
      fi#start udevstart
      if [ �f /sbin/udevstart ]
      then
      /sbin/udevstart
      if [ $? �ne 0]
      then
      echo "dfmRun : start udevstart error"
      exit
      fi
       else
      echo "dfmRun : udevstart file not exist"
      exit
      fi
      将以上加入自启动脚本后,当系统启动的时候会被自动调用,并启动Udev相关工具,可以自动挂载U盘或SD卡。
      3自动检索U盘中的文件
       在Udev中已经指定的挂载路径是/mnt/udisk,接下来需要对该目录检索。由于U盘中的jpg图片数量未知,因此检索U盘返回的图片名称使用链表最为合适。使用Linux系统提供的函数opendir及readdir读取文件,通过strstr函数查找***.jpg文件加入链表中。
      Int search_files(const unsigned char *dirname,SEARCH_NODE *head,unsigned int *jpg_number)
      {
      if ((dir_ptr = opendir(dirname)) == NULL){
      …
      }
      while((direntp = readdir(dir_ptr)) != NULL) {
       ptr1 = strstr(direntp�>d_name, ".jpg");
      if (ptr){
      …
      }
       closedir(dir_ptr);
       *jpg_number = jpg_nums;
       return 0;
      }
      4Libjpg解码JPG图片成RGB数据
      libjpeg是一个被广泛使用的JPEG图片文件压缩/解压缩函数库。通过libjpeg库,应用程序可以每次从JPEG压缩图像中读取一行像素点构成的一条图像线条,而诸如颜色空间转换、降采样/增采样、颜色量化之类的工作则都由libjpeg去完成了。对于libjpeg而言,图像数据是一个二维的像素矩阵。对于彩色图像,每个像素通常用三个分量表示,即R(Red)、G(Green)、B(Blue)三个分量,每个分量用一个字节表示,因此每个分量的取值范围从0到255。以下是利用libjpeg解码JPEG格式图片,解码过程如图3。
      图3JPEG解码过程
      5FrameBuffer显示Libjpeg解压好的RGB数据FrameBuffer 是显示设备抽象为帧缓冲区。用户可以将它看成是显示内存的一个映像,将其映射到进程地址空间之后,就可以直接进行读写操作,而写操作可以立即反应在屏幕上。FrameBuffer 设备还提供了若干 ioctl 命令,通过这些命令,可以获得显示设备的一些固定信息(比如显示内存大小)、与显示模式相关的可变信息(比如分辨率、象素结构、每扫描线的字节宽度)。操作如下图进行,将Libjpeg解码的RGB直接写入Framebuffer的用户控件映射区域内,屏幕上也随之进行变化。
      图4Framebuffer显示RGB数据
      6过渡效果实现
       在libjepg解码后可以直接将RGB数据写入Framebuffer中,这样就可以产生一张张图片播放的效果。如果在播放下一张图片时,不按照图片时间和空间顺序进行填充Framebuffer的映射区,即产生了各种过渡效果。同时,过渡效果是非常吸引客户眼球的功能之一。以下仅举几例。
       如图5为劈裂效果,屏幕分为四部分。1和3部分自上而下显示,2和4部分是自下而上显示,每显示一行有 100ms延迟。
      图5劈裂效果
      如图6为隔行分区效果,每区从上到下间隔两行进行显示。
      图6隔行分区效果
      7结束语
      随着IC产品迅速发展,嵌入式处理器价格越来越低。并且伴随数码相机的普及,给数码相框带来了快速发展的契机。同时,该数码相框可以增加网络更新功能的扩展,多功能等相关的扩展,也是一个重要发展方向。参考文献:
      [1]华清远见嵌入式培训中心编.嵌入式Linux应用程序开发[M].北京:人民邮电出版社,2009.
      [2]孙琼.嵌入式Linux应用程序开发详解[M].北京:清华大学出版社,2006.
      [3]陈溯.基于ARM平台的数码相框软件开发[D].厦门:厦门大学,2008.
      (责任编辑:王钊)
      

    推荐访问:嵌入式 相框 数码 基于嵌入式Linux数码相框设计与实现 嵌入式linux课程设计 基于嵌入式的课程设计

    • 文档大全
    • 故事大全
    • 优美句子
    • 范文
    • 美文
    • 散文
    • 小说文章