资源描述
-目录摘要11.设计目的和要求11.1设计的意义11.2设计要求22.嵌入式技术22.1嵌入式的介绍22.2电子相册23开发工具及环境33.1 linu*操作系统33.2 Mini2440 开发板简介43.3 ARM处理器43.4穿插编译环境5穿插编译5关于穿插工具链53.5开发环境的搭建5建立嵌入式系统开发环境53.5.2 开发板的设置及连接64.程序流程图75.设计过程和结果85.1电子相册图片设置95.1.1 BMP图片显示95.1.2 BMP图片的显示方法95.2音乐文件的转换95.3 音乐电子相册制作96.总结13附录:14. z.-. z.-音乐电子相册摘 要随着数码相机的盛行,传统相机逐渐退出历史的舞台。对于数码相片的欣赏和摆设,人们一般只能通过PC机,极其不方便。电子相册正是迎合这种需求,它体积小,能随时更换相片,并具有USB传输功能,能够即插即用,拥有较大的存储空间。本设计采用了比较通用的Mini2440系列处理芯片为主芯片和源代码开放的嵌入linu*操作系统共同建立的平台设计了电子相册系统,主要实现的功能有对多种格式相片在320*240LCD触摸屏上以幻灯形式播放、USB读取等功能。该设计具有本钱低,功能强大等特点。针对nandflash启动的支持,实现了启动引导程序U-BOOT的修改和移植,以及嵌入式linu*核的裁剪和驱动的修改,包括nandflash分区、LCD驱动修改等;通过程序的穿插编译,让程序能够在开发板上运行,进展播放照片和简单的音乐。关键字: 电子相册 Mini2440 嵌入式系统1.设计目的和要求1.1设计的意义通过本次课程设计,掌握嵌入式程序的设计方法、调试。加深对嵌入式系统原理课程理论知识的理解,提硬件的操作能力和对软件的使用。分析嵌入式系统的原理,通过给定的技术指标要求编写程序,利用软件和嵌入式开发板进展仿真,分析设计程序及结果。通过本次设计掌握开发板的调试。加深对嵌入式系统原理课程理论知识的理解,提高了嵌入式程序设计及开发板调节的实践能力。1.2设计要求根据设计要求进展分析,找出其中的实体、属性、以及实体间的联系,完成对嵌入式操作性体统的根本使用,熟悉Linu*环境下的指令,完成对客户端的根本操作,熟悉根本程序设计的方式及要求,熟悉设计程序及运行结果。根据结果图得出结论验证结论,完成一些根本的操作,学会嵌入式软件和Mini开发板的使用。2.嵌入式技术2.1嵌入式的介绍IEEEInstitute of Electrical and Electronics Engineers,美国电气和电子工程师协会对嵌入式系统的定义:用于控制、监视或者辅助操作机器和设备的装置。嵌入式系统是一种专用的计算机系统,作为装置或设备的一局部。通常,嵌入式系统是一个控制程序存储在ROM中的嵌入式处理器控制板。事实上,所有带有数字接口的设备,如手表、微波炉、录像机、汽车等,都使用嵌入式系统,有些嵌入式系统还包含操作系统,但大多数嵌入式系统都是由单个程序实现整个控制逻辑。 从应用对象上加以定义,嵌入式系统是软件和硬件的综合体,还可以涵盖机械等附属装置。国普遍认同的嵌入式系统定义为:以应用为中心,以计算机技术为根底,软硬件可裁剪,适应应用系统对功能、可靠性、本钱、体积、功耗等严格要求的专用计算机系统。2.2电子相册电子相册分为两种,一种是软件类型的电子相册,一种是硬件类型的电子相册,上文所讲的windows media player等制作的电子相册,都属于软件类型,除此之外,还有一种电子相册为硬件类型,指能够不借助电脑可以在LCD面板上显示数码照片的电子产品的展示效果,还能够将照片显示到电视机上。还可接U盘、SD卡、MMC卡,除播放图片外,还可播放MP3、置左右双喇叭、边播放图片边听MP3、看手机AVI格式电影、DAT格式或MPEG格式或MPG格式电影VCD文件、VOB格式电影DVD文件其它不支持的格式可以软件转换、输出音频视频到电视机或音响,制作这种电子相册的产品称为电子相框,电子工程杂志将电子相框分为3类,简易电子相框、多媒体电子相框高级、多媒体电子相框。3开发工具及环境3.1 linu*操作系统Linu*操作系统是多用户、多任务的操作系统,具有强大的可移植性、良好地编程环境和强大的网络工程。Linu*操作系统是一个免费的操作系统,由于Linu*是由Linus开发的,故以Linu*s UNI*命名,简称Linu*。Linu*的主要特性1开放性:系统遵循标准规,特别是遵循开放系统互连(OSI)国际标准。2多用户:系统资源可以被用户使用,每个用户对自己的资源(例如:文件、设备)有特定的权限。3多任务:计算机同时执行多个程序,而且各个程序的运行互相独立。4良好的用户界面:Linu*向用户提供了两种界面:用户界面和系统调用。Linu*还为用户提供了图形用户界面。它利用鼠标、菜单、窗口、滚动条等设施,给用户呈现一个直观、易操作、交互性强的友好的图形化界面。5设备独立性:操作系统把所有外部设备统一当作成文件来对待,只要安装它们的驱动程序,任何用户都可以像使用文件一样,操纵、使用这些设备,而不必知道它们的具体存在形式。Linu*是具有设备独立性的操作系统,核具有高度适应能力。6提供了丰富的网络功能:完善的置网络是Linu*一大特点。7可靠的平安系统:Linu*采取了许多平安技术措施,包括对读、写控制、带保护的子系统、审计跟踪、核心授权等,这为网络多用户环境中的用户提供了必要的平安保障。8良好的可移植性:将操作系统从一个平台转移到另一个平台使它仍然能以自身的方式运行的能力。Linu*是一种可移植的操作系统,能够在从微型计算机到大型计算机的任何环境中和任何平台上运行。3.2 Mini2440 开发板简介Mini2440 是一款真正低价实用的 ARM9 开发板,是目前国性价比高的一款学习 板;它采用 Samsung S3C2440 为微处理器,并采用专业稳定的 CPU 核电源芯片和复位芯片 来保证系统运行时的稳定性。mini2440 的 PCB 采用沉金工艺的四层板设计,专业等长布线, 保证关键信号线的信号完整性,生产采用机器贴片,批量生产。如以下图3.2开发板图3.2 开发板外观3.3 ARM处理器ARM处理器是一个32位元精简指令集(RISC)处理器架构,其广泛地使用在许多嵌入式系统设计。微软在2021年10月26日发布的Windows 8操作系统也支持ARM系列处理器。在同一天发布的ARM架构版本微软Surface搭载Windows RT操作系统中,微软已经采用了ARM处理器,这款产品或许意味着Windows平板电脑已经成为现实。ARM处理器特点:1. 体积小、低功耗、低本钱、高性能;2. 支持Thumb16位/ARM32位双指令集,能很好的兼容8位/16位器件;3. 大量使用存放器,指令执行速度更快;4. 大多数数据操作都在存放器中完成;5. 寻址方式灵活简单,执行效率高;6. 指令长度固定。3.4穿插编译环境3.4.1穿插编译穿插编译cross-pilation是指,在*个主机平台上比方PC上用穿插编译器编译出可在其他平台上比方ARM上运行的代码的过程。嵌入式软件开发需要穿插开发环境,这是其开发的一个显著特点,穿插编译器只是穿插开发环境的一局部,我们说的穿插开发环境是指编译、和调试嵌入式应用软件的环境,它与运行嵌入式应用软件的环境有所不同,常采用宿主机-目标机模式。3.4.2关于穿插工具链它是穿插编译环境所需工具的集合体,是所需软件binuntials、gcc与glibc等的安装载体,主要包括:穿插编译器(arm-linu*-gcc)、穿插汇编器(arm-linu*-as)、穿插器(arm-linu*-ld)、各种操作所依赖的库及用于处理可执行程序和库的一些根本工具如arm-linu*-strip。3.5开发环境的搭建建立嵌入式系统开发环境(1) 在PC上建立Linu*操作系统的虚拟机(2) 建立PC、虚拟机和开发板之间的网络联系,使三者间可以相互通信。IP地址配置方案:(3)三者间相互通信搭建图,如以下图所示图2网络联系搭建图4在虚拟机侧,可以查看连接情况。图4通信畅通图3.5.2 开发板的设置及连接1开发板的启动模式选择,是通过拨动开关来决定的: 开关接到 Nor Flash 标识一侧时,系统将从 Nor Flash 启动;开关接到 Nand Flash 标识一侧时,系统将从 Nand Flash 启动。出厂的时候开发板的 Nor Flash 和 Nand Flash 已经烧入了一样的 BIOS(因为该 BIOS 同时支持这两 种 Flash,只是开机后表现形式不同,请参考开发板 BIOS 功能及使用说明一节),开关已经被接到 Nand Flash 一侧,系统一开机就从 Nand Flash 启动运行系统。 (2) 外部接口连接 请使用我们提供的直连串口线连接开发板的串口 0 和 PC 机的串口 用我们提供的穿插网线将开发板的网络接口与 PC 相连 用我们提供的 5V 电源适配器连接到板上的 5V 输入插座 把音箱或者耳机的插头接入板上的音频输出口(绿色) 如果您有液晶屏,请按照数据线头的方向与开发板的 LCD 接口相连 用 USB 电缆连接开发板和 PC 4.程序流程图5.设计过程和结果5.1电子相册图片设置将找到的图片用photoshop将图像大小设置为240*320,并保存为bmp格式。5.1.1 BMP图片显示这是本系统中的难点,也是关键技术。Bmp图片就是通常所说的位图,是一种与硬件设备无关的图像文件格式,使用非常广。它采用位映射存储格式,除了图像深度可选以外,不采用其他任何压缩,因此,BMP文件所占用的空间很大。BMP文件的图像深度可选lbit、4bit、8bit及24bit。BMP文件存储数据时,图像的扫描方式是按从左到右、从下到上的顺序。由于BMP文件格式是Windows环境换与图有关的数据的一种标准,因此在Windows环境中运行的图形图像软件都支持BMP图像格式。5.1.2 BMP图片的显示方法bmp图片的显示方法主要有三种:(1)是使用存调用方法显示bmp图片。我们通常所说的屏幕就是屏显,在将bmp调色板区写入计算机调色板和已经读取bmp文件图像存储区到存的根底上,再从存将数据读取并显存只需要进展一个存复制操作就可以了。(2)是直接从文件读取到屏幕显示bmp文件。这种方法将通过显示bmp文件所需要的存空间、读取数据到申请的空间、显示等多步的任务简化成一步。事实上也就是将读取文件数据到申请存变到显示存。3采用绘点的方法将图片的像素按照图片文件的排列顺序逐个在屏幕上画出来。5.2音乐文件的转换本实验是将wav格式音乐转换为音乐数据写进部Flash的,wav文件采用的是RIFF格式,音频格式为PCM编码,单声道,8000HZ,128kbps;因此为获得转换数据,在虚拟机里编写了转换程序。用音乐格式转换工具可以将其他格式的音乐,设置相关参数(例如采样率,声道数,立体声输出等),改为开发板允许播放的wav格式,参照照片数量,设置需要的时长,到达图片和音乐播放同步的效果。5.3音乐电子相册制作1将文件放入电脑D盘的share-unbantu文件夹中。如以下图所示:图(1) 导入文件2翻开虚拟机,从虚拟机下的share文件夹中将图片复制到Student文件夹下。如以下图所示:图2文件放入交互目录(3)进入Student文件夹,看到刚刚放入Student中的图片和音乐。如以下图所示:图3查看放入的文件( 4 )修改程序,将音乐和图片放入程序中。如以下图所示:图4程序修改(5)进展穿插编译,如以下图所示:图5穿插编译6在嵌入式开发板上显示相册图片,如以下图所示:图6效果图6.总结回忆起此次课程设计,我仍感慨颇多,从理论到实践,在这一段时间里,可以说得是苦多于甜,但是可以学到很多的东西,不仅是学习上的,而且是关于做人做事方面的感悟。通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会效劳,从而提高自己的实际动手能力和独立思考的能力。我在这次课程设计的过程中遇到了许多问题,同时也发现了自己的许多缺乏之处,对以前所学过的知识理解得不够深刻,掌握得不够结实,比方说不懂一些软件的使用方法,对编程语言掌握得不透彻。还有,这次课程设计让我明白了只有自己懂,自己做,才不会在关键时刻掉链子。别人学到的知识终究是别人的,路总是要自己走,属于自己的任务就要自己搞。所以,我们必须要时刻强大自己,不要一味依赖别人。这个过程虽然不是很平坦,肯定会遇到各种各样的问题,但一旦征服了它那它就是你的东西了,当这样的厚积到达一定程度那你就能享受到薄发那刻的辉煌。参考文献1君里,为理等.信号与系统.高等教育.2006年12月2健,勇.数字信号处理.清华大学.2007年2月3阳昌汉,红等.高频电子线路.高等教育.2007年4月4王福昌,熊兆飞等.通信原理.清华大学.2006年9月5樊昌信,丽娜.通信原理.国防工业.2021年7月6常华,海燕。嵌入式系统原理与应用. 清华大学.2021年3月附录:局部代码:*include *include *include *include static void sig_usr(int signo); static void sig_alarm(int signo);int i=1;pid_t child_pid;int main()pid_t pid; if (signal(SIGALRM, sig_alarm) 0) perror(signal SIGALRM error:); if (signal(SIGUSR2, sig_usr) 0) perror(signal SIGUSR2 error:);pid=fork(); if ( pid = 0 )/* 子进程 */printf(child_pid= %dn,getpid();for(;)system(./方 红豆.wav);pause();e*it(0);else/* 父进程 */child_pid=pid;for(;)alarm(3);pause(); return 0;static void sig_usr(int signo)int ret; printf(SIGUSR2 ming. n); if(ret=kill(child_pid,SIGCONT)9)kill(child_pid,SIGINT);/完毕子进程kill(getpid(),SIGINT);/完毕父进程int main()pid_t pid; if (signal(SIGALRM, sig_alarm) 0) perror(signal SIGALRM error:); if (signal(SIGUSR2, sig_usr) 0) perror(signal SIGUSR2 error:);pid=fork(); if ( pid = 0 )/* 子进程 */printf(child_pid= %dn,getpid();for(;)system(./Audio_player 方 红豆.wav);pause();e*it(0);else/* 父进程 */child_pid=pid;for(;)alarm(3);pause();. z.
展开阅读全文