粤嵌开发板电子相册嵌入式课程设计
粤嵌gec6818课设心得

粤嵌gec6818课设心得引言粤嵌ge c6818课设是一门非常有意义和挑战的课程。
在这门课程中,我们学习了嵌入式系统的开发,并实践了在g ec6818开发板上进行设备驱动、嵌入式系统应用以及L in ux内核移植等方面的内容。
在这里,我将分享我在这门课程中的心得体会。
第一部分:课程概述粤嵌ge c6818课设是一门专注于嵌入式系统开发的课程。
课程中,我们首先学习了有关嵌入式系统的理论知识,包括处理器架构、中断和异常处理、内存管理等。
随后,我们学习了如何使用g ec6818开发板进行设备驱动的开发,包括串口、G PI O、LC D等设备的配置与控制。
同时,我们还学习了如何在ge c6818上搭建和配置L in ux系统,并进行Li nu x内核移植的实践。
第二部分:学习收获通过参与粤嵌ge c6818课设,我获得了许多宝贵的学习收获。
1.嵌入式系统开发实践在课程中,我有机会亲自动手进行设备驱动的开发。
通过编写代码并在g ec6818上进行测试,我掌握了设备驱动的开发流程和技巧。
我学会了如何对硬件进行配置和控制,以及如何通过设备驱动与应用程序进行通信。
这为我今后从事嵌入式系统开发打下了坚实的基础。
2.L i n u x内核移植L i nu x内核移植是粤嵌g ec6818课设的重要内容之一。
通过课程中的实践,我了解了内核移植的过程和原理,掌握了如何对Li nux内核进行配置和编译。
我学会了如何将Li nu x内核移植到ge c6818开发板上,并成功运行了自己编写的应用程序。
这为我今后参与嵌入式系统开发项目提供了宝贵的经验和技能。
第三部分:面临的挑战在粤嵌g ec6818课设中,我也遇到了一些挑战。
以下是我面临的主要困难以及如何克服它们的方式:1.硬件配置和控制在进行设备驱动开发过程中,我发现了硬件配置和控制方面的困难。
为了解决这个问题,我系统地学习了有关硬件的原理和规范,并查阅了相关的文档和资料。
粤嵌嵌入式实验室-电子数码相框-u盘自动挂载

粤嵌教育新浪官方微博/gecedu粤嵌教育官方网站 在ARM嵌入式Linux下,要让U盘自动挂载,可以用到mdev方式实现(mdev是busybox中的一个udev管理程序的一个精简版,它可以实现设备节点的自动创建和设备的自动挂载),下面是实现的步骤:1、确认Busybox做的根文件系统如下选项有选中:Linux System Utilities --->[*] mdev[*] Support /etc/mdev.conf[*] Support command execution at device addition/removal2、由于是利用到Linux内核的hotplug功能,要确定CONFIG_HOTPLUG=y。
3、修改根文件系统里面的etc/init.d/rcS文件,添加如下内容:mount -amkdir /dev/ptsmount -t devpts devpts /dev/ptsecho /sbin/mdev > /proc/sys/kernel/hotplugmdev -setc/fatab文件的内容为:proc /proc proc defaults 0 0sysfs /sys sysfs defaults 0 0tmpfs /var tmpfs defaults 0 0tmpfs /tmp tmpfs defaults 0 0tmpfs /dev tmpfs defaults 0 0执行 mdev -s:以 "-s" 为参数调用位于 /sbin 目录下的 mdev(其实mdev是个软链接,其作用是传递参数给 /bin 目录下的 busybox 程序并调用它)。
mdev 扫描 /sys/class 和 /sys/block 目录中所有的类设备目录,如果在类设备目录中含有名为 "dev" 的文件,且文件中包含的是设备号,则 mdev 就利用这些信息为这个设备在 /dev 目录下创建设备节点文件。
粤嵌科技课程设计

粤嵌科技课程设计一、教学目标本课程旨在通过粤嵌科技的学习,让学生掌握嵌入式系统的基本概念、原理和应用,培养学生的动手实践能力和创新思维。
具体的教学目标如下:知识目标:学生能够理解嵌入式系统的基本原理,掌握C语言编程,了解常见嵌入式处理器和开发平台。
技能目标:学生能够使用粤嵌科技开发板进行程序设计,进行简单的硬件接口编程,实现一些基本的嵌入式系统应用。
情感态度价值观目标:通过课程的学习,学生能够培养对嵌入式技术的兴趣,增强解决实际问题的信心和能力,提高创新意识和团队协作能力。
二、教学内容本课程的教学内容主要包括嵌入式系统的基本概念、C语言编程、嵌入式处理器和开发平台的使用。
具体的教学大纲如下:1.嵌入式系统概述:介绍嵌入式系统的定义、特点和应用领域。
2.C语言编程:学习C语言的基本语法和编程技巧,掌握嵌入式系统编程的基本方法。
3.嵌入式处理器:介绍常见的嵌入式处理器,学习其架构和指令系统。
4.开发平台的使用:学习如何使用粤嵌科技开发板进行嵌入式系统开发。
5.实践项目:进行一些实际的嵌入式系统项目实践,巩固所学知识。
三、教学方法为了提高学生的学习兴趣和主动性,本课程将采用多种教学方法,包括讲授法、讨论法、案例分析法和实验法等。
1.讲授法:通过讲解嵌入式系统的基本概念和原理,让学生掌握相关的理论知识。
2.讨论法:通过分组讨论,让学生深入理解嵌入式系统的应用和实际问题。
3.案例分析法:通过分析一些典型的嵌入式系统案例,让学生了解嵌入式系统的实际应用。
4.实验法:通过实验操作,让学生亲手实践,提高其动手能力和创新能力。
四、教学资源为了支持教学内容和教学方法的实施,我们将选择和准备以下教学资源:1.教材:选用《嵌入式系统设计与实践》作为主教材,辅助以相关参考书籍。
2.多媒体资料:制作PPT和相关教学视频,以便于讲解和演示。
3.实验设备:准备粤嵌科技开发板和相关实验器材,以便于学生进行实验操作。
五、教学评估为了全面、客观地评估学生的学习成果,我们将采取以下评估方式:1.平时表现:通过观察学生在课堂上的参与程度、提问回答等情况,评估其学习态度和理解能力。
嵌入式课设音乐相册说明书

信息与电气工程学院嵌入式课程设计说明书(2015 /2016 学年第一学期)课程名称:嵌入式课程设计题目:音乐相册专业班级:计算机1202学生:何珊立双仲栋平学号:120210207 120210213 120210211指导教师:王彬丽设计周数: 1.5周设计成绩:2016年01 月13 日1、课程设计目的嵌入式系统是在传统单片机等技术的基础上发展起来的一项结合硬件和软件应用广泛功能强大的系统。
嵌入式系统通过在软件平台编译控制程序并在硬件上运行,嵌入式软件的开发已经在工业各个方面都有很多应用,学习好嵌入式系统开发已成为现在从事计算机工作人员必不可少的技能。
本次课程设计是基于嵌入式硬件平台TQ2440开发板,完成了有操作系统的嵌入式系统软件设计,通过编译下载能够在开发板上显示相应容,从而达到课程设计要求。
本次课程设计是进行有操作系统的嵌入式系统软件开发,这其中就涉及到平时所学的嵌入式系统开发相关知识,包括系统的安装、相关软件的使用、程序的编译调试、相关端口的配置、程序的烧写、相关硬件的配置以及通过PC机和软件结合硬件进行程序的调试和运行。
这是完成一个基于操作系统的嵌入式软件开发所必须要经历的步骤,在这个设计过发现问题、解决问题和总结经验可以学到很多在实际嵌入式软件开发中有用的知识。
这是此次课程设计的主旨和精髓,通过本次课程设计可以达到一些课程设计目的。
2、课程软硬件设计2.1系统分析和设计此次课设是在原始数据TQ2440_Test.mcp基础上做出相应修改,以此达到课设要求。
主要运用C语言编写,修改Main.c、TQ_LOGO.c及LCD_TFT.h等文件,在天嵌2440开发板中实现六图片的轮换并且有背景音乐,图片随着音乐的节奏而变化。
我们的主题是生日快乐,背景音乐是生日快乐歌,图片是六生日蛋糕的图片。
2.2系统实施使用软件ADS1.2、TQBoardDNW和位图转换软件bmp2h.exe在win7上进行试验,通过改变脉冲列的周期可以调频,改变脉冲的宽度或占空比可以调压。
嵌入式简单课程设计教案

嵌入式简单课程设计教案一、课程目标知识目标:1. 理解嵌入式系统的基本概念,掌握其组成和功能。
2. 学习嵌入式编程的基本语法和常用指令。
3. 了解嵌入式系统的应用领域和发展趋势。
技能目标:1. 能够使用嵌入式开发环境,进行简单的程序编写和调试。
2. 学会使用嵌入式系统的输入输出接口,实现基本的功能控制。
3. 培养学生动手操作、问题解决和团队协作的能力。
情感态度价值观目标:1. 培养学生对嵌入式系统的兴趣,激发其探索精神和创新意识。
2. 增强学生的责任心和自信心,使其在嵌入式学习过程中保持积极态度。
3. 培养学生遵守实验规程,养成良好的实验习惯,注重团队合作。
课程性质:本课程为实践性较强的学科,结合理论教学和实验操作,培养学生对嵌入式系统的认识和实际操作能力。
学生特点:六年级学生,具备一定的计算机基础,好奇心强,喜欢动手实践,但注意力集中时间较短。
教学要求:注重理论与实践相结合,以学生为主体,引导他们主动探索、实践,提高解决问题的能力。
将课程目标分解为具体的学习成果,以便在教学过程中进行有效评估。
二、教学内容1. 嵌入式系统基本概念:介绍嵌入式系统的定义、组成、特点和应用领域,对应教材第一章内容。
2. 嵌入式编程基础:讲解嵌入式编程的基本语法、数据类型、运算符和常用指令,对应教材第二章内容。
3. 嵌入式系统开发环境:介绍嵌入式开发环境搭建、编译器使用和程序下载,对应教材第三章内容。
4. 嵌入式系统输入输出接口:学习嵌入式系统的GPIO、中断、定时器等接口的使用,对应教材第四章内容。
5. 嵌入式系统应用实例:分析典型的嵌入式系统应用案例,如温度控制、智能家居等,对应教材第五章内容。
教学安排和进度:第一周:嵌入式系统基本概念第二周:嵌入式编程基础第三周:嵌入式系统开发环境第四周:嵌入式系统输入输出接口第五周:嵌入式系统应用实例及实验操作教学内容注重科学性和系统性,结合教材章节安排,确保学生能够逐步掌握嵌入式系统的相关知识。
粤嵌开发板电子相册嵌入式课程设计模板

粤嵌开发板电子相册嵌入式课程设计课程设计说明书题目:电子相册课程名称:嵌入式系统学院:专业:学号:姓名:指导教师:完成日期: 6月10日目录1. 设计的工程背景 .................................................... 错误!未定义书签。
1.1 任务阐述 ...................................................... 错误!未定义书签。
1.2 任务分析 ....................................................... 错误!未定义书签。
1.3 课题项目管理计划进度表 ............................ 错误!未定义书签。
2.工程设计方案......................................................... 错误!未定义书签。
2.1 系统方案设计................................................ 错误!未定义书签。
2.2 硬件电路设计................................................ 错误!未定义书签。
2.3 软件程序设计................................................ 错误!未定义书签。
3. 方案实施................................................................ 错误!未定义书签。
3.1软件程序调试过程........................................ 错误!未定义书签。
4. 结果与结论............................................................ 错误!未定义书签。
嵌入式电子相册实训报告

一、实习背景随着信息技术的飞速发展,嵌入式系统已经广泛应用于各个领域,如智能家居、智能穿戴、物联网等。
为了提高自身对嵌入式系统的理解和应用能力,我们选择了嵌入式电子相册作为实训项目。
本报告将详细描述实训过程、实现方法和心得体会。
二、实训目的1. 熟悉嵌入式系统开发流程;2. 掌握嵌入式硬件平台(如ARM、AVR等)的基本原理和应用;3. 学习嵌入式软件编程,包括C/C++、汇编语言等;4. 掌握电子相册的基本功能实现,如图片显示、切换、删除等;5. 提高团队合作能力和动手实践能力。
三、实训内容1. 硬件平台:选用ARM开发板(如STM32、ARM9等)作为嵌入式系统硬件平台;2. 软件平台:选用Keil、IAR等集成开发环境进行软件开发;3. 编程语言:C/C++、汇编语言;4. 电子相册功能:a. 图片显示:支持JPEG、PNG等常见图片格式;b. 图片切换:支持手动切换和自动切换;c. 图片删除:支持删除指定图片或全部图片;d. 时间显示:显示当前系统时间。
四、实训过程1. 硬件搭建:首先,搭建嵌入式系统硬件平台,包括开发板、电源、显示屏、存储卡等;2. 软件环境配置:配置Keil、IAR等集成开发环境,设置工程参数;3. 编写程序:a. 初始化硬件资源:包括初始化时钟、GPIO、ADC、LCD等;b. 图片读取与显示:读取存储卡中的图片,并显示在LCD屏幕上;c. 图片切换:编写图片切换程序,实现手动和自动切换功能;d. 图片删除:编写图片删除程序,实现删除指定图片或全部图片功能;e. 时间显示:编写时间显示程序,实时显示系统时间;4. 程序调试与优化:在Keil、IAR等集成开发环境中调试程序,优化程序性能;5. 系统测试:将开发板连接到计算机,测试电子相册功能是否正常。
五、实训结果1. 成功搭建嵌入式电子相册系统;2. 实现了图片显示、切换、删除和时间显示等功能;3. 系统运行稳定,性能良好。
嵌入式开发程序-电子相册

嵌入式开发程序-电子相册#include#include#include#include#include#include#include#include#include#include "double_list.h"#define WIDTH 800#define HEIGHT 480#define WHITE 0xFFFFFFFF #define BLACK 0#define RED 0xFF0000#define GREEN 0x0000FF00 #define LCD_FILE "/dev/fb0" typedef void (*FUNC)(char *);enum{UP,DOWN,RIGHT,LEFT};enum{AAA,BBB,CCC,DDD,EEE,FFF,GGG,HHH,RRR,PPP};int *plcd = NULL;void lcd_draw_point(int x, int y, int color) {*(plcd + y*WIDTH+x) = color;}void lcd_draw_bmp(char *file,int w, int h, int x0, int y0) { //打开图片int fd;fd = open(file, O_RDWR);if (-1 == fd){perror("open 1.bmp failed\n");return ;}//读取图片文件char buf[w*h*3+54];read(fd, buf, sizeof(buf));//将buf中的像素点显示在lcd上int color;int x, y;int i = 0;for (y = h-1; y >= 0; y--){for (x = 0; x < w; x++){//LCD上一个像素点的组成为ARGB//24位的BMP图片组成为BGR//将BMP一个像素点取出来char b, g, r;b = buf[54+((h-1-y)*w+x)*3];g = buf[55+((h-1-y)*w+x)*3];r = buf[56+((h-1-y)*w+x)*3];//将b g r 组成一个四字节的color(ARGB) color = r<<16 | g<<8 | b;lcd_draw_point(x+x0,y+y0,color);}}close(fd);}void lcd_draw_cmpbmp(char *file,int w, int h, int x0, int y0) { //鎵撳紑鍥剧墖int fd;fd = open(file, O_RDWR);if (-1 == fd){perror("open 1.bmp failed\n");return ;//璇诲彇鍥剧墖鏂囦欢char buf[w*h*3+54];read(fd, buf, sizeof(buf));//灏哹uf涓殑鍍忕礌鐐规樉绀哄湪lcd涓?int color;int x, y;int i = 0;for (y = h-1; y >= 0; y--){for (x = 0; x < w; x++){//LCD涓婁竴涓儚绱犵偣鐨勭粍鎴愪负ARGB //24浣嶇殑BMP鍥剧墖缁勬垚涓?BGR//灏咮MP涓€涓儚绱犵偣鍙栧嚭鏉?char b, g, r;b = buf[54+((h-1-y)*w+x)*3];g = buf[55+((h-1-y)*w+x)*3];r = buf[56+((h-1-y)*w+x)*3];color = r<<16 | g<<8 | b;if(x%4==0&&y%4==0){lcd_draw_point((x/4)+x0,(y/4)+y0,color); }}}close(fd); }int *lcd_init() {int fd;fd = open(LCD_FILE, O_RDWR);if (-1 == fd){perror("open led failed !\n");return 0;}#if 0int color[800*480];int i;for (i = 0; i < 800*480; i++)color[i] = 0xFF0000;write(fd, color, sizeof(color));#endifint *p = NULL;p = mmap(NULL, WIDTH*WIDTH*4, PROT_READ| PROT_WRITE, MAP_SHARED, fd, 0);int x, y;for (x = 0; x < HEIGHT; x++){for (y = 0; y < WIDTH; y++)*(p + x*WIDTH+y) = WHITE;}return p;int get_touch_dir(){int fd;fd = open("/dev/input/event0", O_RDWR);if (-1 == fd){perror("open event0 error!\n");return ;}int x0=-1, y0=-1, x1, y1;while (1){struct input_event ev;read(fd, &ev, sizeof(ev));if ((ev.type == EV_ABS) && (ev.code == ABS_X)){if (-1 == x0)x0 = ev.value;elsex1 = ev.value;}else if ((ev.type == EV_ABS) && (ev.code == ABS_Y)){if (-1 == y0)y0 = ev.value;elsey1 = ev.value;}if (ev.type == EV_KEY && ev.code == BTN_TOUCH && ev.value == 0) break;}int delta_x, delta_y;delta_x = abs(x1-x0);delta_y = abs(y1-y0);if (delta_y > delta_x){if (y1 < y0){printf("up\n");return UP;}else{printf("down\n");return DOWN;}else{if (x1 > x0){printf("right\n");return RIGHT;}else{printf("left\n");return LEFT;}}}int get_touch_event(){int q;int fd;fd = open("/dev/input/event0", O_RDWR);if (-1 == fd){perror("open event0 error!\n");return ;}int x0=700, y0=480, x1=0, y1=0;do{struct input_event ev;read(fd, &ev, sizeof(ev));if ((ev.type == EV_ABS) && (ev.code == ABS_X))if (-1 == x0)x0 = ev.value;elsex1 = ev.value;}else if ((ev.type == EV_ABS) && (ev.code == ABS_Y)) {if (-1 == y0)y0 = ev.value;elsey1 = ev.value;}printf("a\n");q++;}while(q<10);if (y1<200&&x1<200){printf("quit");return 100;}else{printf("not correct area");return 0;}close(fd);}int get_touch_point(int *x, int *y){int fd;fd = open("/dev/input/event0", O_RDWR);if (-1 == fd){perror("open event0 error!\n");return ;}while (1){struct input_event ev;read(fd, &ev, sizeof(ev));if ((ev.type == EV_ABS) && (ev.code == ABS_X)){*x = ev.value;}else if ((ev.type == EV_ABS) && (ev.code == ABS_Y)){*y = ev.value;}if (ev.type == EV_KEY && ev.code == BTN_TOUCH && ev.value == 0) break;}}List *get_pic_name(){List *list;list = (List *)malloc(sizeof(List));list->head = NULL;list->tail = NULL;node_insert(list, "1.bmp");node_insert(list, "2.bmp");node_insert(list, "3.bmp");node_insert(list, "4.bmp");node_insert(list, "5.bmp");node_insert(list, "6.bmp");node_insert(list, "7.bmp");node_insert(list, "8.bmp");return list;}int get_touch_area(void){int fd;fd = open("/dev/input/event0", O_RDWR);if (-1 == fd){perror("open event0 error!\n");return ;}int x0=-1, y0=-1, x1, y1;while (1){struct input_event ev;read(fd, &ev, sizeof(ev));if ((ev.type == EV_ABS) && (ev.code == ABS_X)) {if (-1 == x0)x0 = ev.value;elsex1 = ev.value;}else if ((ev.type == EV_ABS) && (ev.code == ABS_Y)){if (-1 == y0)y0 = ev.value;elsey1 = ev.value;}if (ev.type == EV_KEY && ev.code == BTN_TOUCH && ev.value == 0) break;}if (y0<120){if (x0<200){printf("aaa\n");return AAA;}else if(x0>200&&x0<400){printf("bbb\n");return BBB;}else if(x0>400&&x0<600){printf("ccc\n");return CCC;}else if(x0>600&&x0<800){printf("ddd\n");return DDD;}}else if (y0>120&&y0<240) { if (x0<200){printf("eee\n");}else if(x0>200&&x0<400) {printf("fff\n");return FFF;}else if(x0>400&&x0<600) {printf("ggg\n");return GGG;}else if(x0>600&&x0<800) {printf("hhh\n");return HHH;}}else if (y0>240){if(x0<560){printf("rrr");return RRR;}else if(x0>560){printf("autoplay");}}}void texiao1(char *file){int w=800,h=480;int x0=0,y0=0;int fd;fd = open(file, O_RDWR);if (-1 == fd){perror("open 1.bmp failed\n"); return ;}。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
课程设计说明书题目:电子相册课程名称:嵌入式系统学院:专业:学号:姓名:指导教师:完成日期:2017年6月10日目录1. 设计的工程背景 (2)1.1 任务阐述 (2)1.2 任务分析 (2)1.3 课题项目管理计划进度表 (3)2.工程设计方案 (3)2.1 系统方案设计 (3)2.2 硬件电路设计 (5)2.3 软件程序设计 (5)3. 方案实施 (6)3.1软件程序调试过程 (6)4. 结果与结论 (12)4.1 设计结果 (12)4.2 结论 (13)5. 收获与致谢 (14)6. 参考文献 (15)7. 附件 (16)附件1 :答辩问题回答记录表 (27)1. 设计的工程背景1.1 任务阐述设计任务:制作一个电子相册,要求每个人一种特效,结果显示在ARM开发板上。
开发平台为LINUX。
电子相册简介:以数字照片的存储和浏览为主要功能,具有内置数据存储器、USB等卡接口、强大的文件管理等特征。
背景:在市场需求上,随着数码相机的普及,作为一种以数字照片的保存、回放和浏览为核心的功能产品迎合了消费者需求,嵌入式linux的电子相册比一般电子相册更具优越性和实用性。
目前市场,目前主流电子相册软件普遍体积庞大、占用内存多、硬件要求高。
所以开发一个运行速度快,占用空间小,对硬件要求较低的功能实用的嵌入式Linux电子相册很有意义。
Linux开发优势:Linux是一种自由和开放源码的类Unix操作系统。
目前存在着许多不同的Linux,但它们都使用了Linux内核。
Linux可安装在各种计算机硬件设备中,从手机、平板电脑、路由器和视频游戏控制台,到台式计算机、大型机和超级计算机。
Linux 是一个领先的操作系统,世界上运算最快的10台超级计算机运行的都是Linux操作系统。
严格来讲,Linux这个词本身只表示Linux内核,但实际上人们已经习惯了用Linux来形容整个基于Linux内核,并且使用GNU 工程各种工具和数据库的操作系统。
Linux是我国软件的国策,尤其是在IT行业,庞大的使用群体、开放的体系和丰富资源使得Linux将是日后普及和推广的重点。
Linux的优越性日益凸显Linux将是我们学习和工作实用的首选。
目前,很多网络技术、服务器、网络设备都是基于Linux操作系统,并且在不少时尚的手机、PDA、媒体播放器等消费类电子产品中已经广泛使用Linux作为操作系统。
在Linux软件国策的指引下,Linux已经得到很大的普及。
很多学生已经自发地通过书籍、互联网等资源学习Linux。
综上所述,提高技术水平就是以市场流行需求为导向进行研发,特别是像嵌入式种工程类的技术。
在条件允许的情况下,我们甚至应该时刻与国际接轨,掌握当前最领先的技术。
1.2 任务分析设计的目标是制作5种电子相册特效,每个人负责制作一种。
在制作前期,首先要查阅资料,了解电子相册的背景和制作原理,对其形成大致的设计方案。
然后,根据资料安装linux和虚拟机软件,搭建开发环境,安装交叉编译。
最后,根据自己设计的方案进行尝试,不断修改错误,直到达到目标。
1.3 课题项目管理计划进度表2.工程设计方案2.1 系统方案设计目前市场上的主要设计方案:①单芯片解决方案以单芯片的解决方案,以ESS/AMLOGIC/MPX等芯片设计为代表,PHILIP/Sony 等品牌厂商也以该方式为主。
该方案的优点:(1)结构简单,成本低,芯片功能强大;(2)多媒体的编解码速度快。
该方案的缺点:(1)可扩展的余地不足;(2)对读卡部分,某些方案使用硬件实现,不能支持新类型的卡;(3)应客户要求的二次开发比较不方便。
②以DSP+FPGA等硬件为基础,用软件算法实现功能这种方案,是以DSP来实现多媒体部分的编解码算法,再由FPGA实现显示输出格式的算法转化;读卡部分,文件系统部分由DSP软件处理,外围设备大的驱动由DSP的软件算法实现。
这种方案的优点:功能扩展升级性强,软件实现读卡部分,新的类型卡,外围设备可以通过升级方式实现。
这种方案的缺点:(1)整体成本比较大;(2)客户二次开发难度大。
DSP和FPGA的算法实现需要专业人员;(3)显示输出由FPGA实现,该类输出大部分是数字的输出,模拟输出支持比较弱。
③ARM核心方案以ARM等强大的CPU为核心,以WINCE、LINUX等操作系统为软件核心架构系统。
此方案以ARM如S3C2410、Intel xscale等强大的嵌入式CPU为架构,速度在200M-300MHZ。
嵌入WINCE、LINUX等操作系统,实现多媒体的编解码。
该方案的优点:(1)系统芯片功能强大,实现的功能多,对于新的多媒体格式支持好,只需要安装更新的软件;(2)硬件电路简单;(3)二次开发容易实现。
该方案的缺点:(1)成本较大,该类强大的CPU一般使用在PDA等嵌入式领域;(2)比较耗电,使用软件解码功耗与频率相关性很大。
本设计选用的是第三种方案:以Cortex A8为核心,以Linux操作系统为软件核心架构。
基于Cortex A8的微处理器具有低功耗、低成本、高性能等特点。
GEC210开发板简介:GEC210是一款高性能的Cortex A8核心板,它由广州粤嵌股份设计、生产和发行销售。
它采用三星S5PV210作为主处理器,运行主频可高1GHz。
S5PV210内部集成了PowerVR SGX540高性能图形引擎,支持3D图形流畅运行,并可流畅播放1080P大尺寸视频。
GEC210主要采用了2.0mm间距的双排针,引出CPU大部分常用功能引脚,,另外还根据S5PV210芯片的特性,分别引出了标准的miniHDMI 接口,如图所示。
GEC210板载512M DDR2内存,可流畅运行Android, Linux 和WinCE6等高级操作系统。
它非常适合开发高端物联网终端,广告多媒体终端,智能家居,高端监控系统,游戏机控制板等设备。
图2-1 GEC210开发板(a) 图2-2 GEC210开发板(b)2.2 硬件电路设计粤嵌GEC210开发板为硬件平台,Ubuntu 为开发环境,通过串口进行文件的传输,在工程师给定的项目基础函数上,通过修改和运用“void lcd_draw_bmp(char *name, int x0, int y0, int w, int h)”函数实现图片位置,大小的改变,再加上延时函数的运用,实现五种图片特效。
图2-3 硬件总框图2.3 软件程序设计总设计方案:ARM 芯片 Cortex A8时钟电路 LCD 显示USB 接口 电路3. 方案实施3.1软件程序调试过程①安装虚拟机和linux软件。
②搭建环境和安装交叉编译。
1)找到ubuntu系统工作目录大层叠(图形浮现大小及位置)小反转(反转函数)大图3-12)在windos系统下找到该工作目录并创建一个文件夹,将arm-2009q3.tar.bz2复制过去。
图3-23)启用共享文件夹图3-34)主机路径为windos系统下arm-2009q3.tar.bz2的目录,名称自动生成图3-4图3-55)可以在文件系统中/mnt/hgfs/share目录下看到这些。
图3-66)为了可以将arm-2009q3.tar.bz2复制到/opt目录下,/opt默认所有者为root,所以要更改/opt的所有者为我登陆的账户。
图3-77)将文件复制到/opt 目录下。
图3-88)执行如下解压命令。
②聚焦逐现特效部分调试原本打算做图片翻转的特效,在网上查到图片翻转特效的算法并经过修改如下://24bit to 32bitfor(x=0,y=800*480*4-1;x<800*480*3;x+=3){pic_mem[y-3] = bmp_mem[x] ;pic_mem[y-2] = bmp_mem[x+1] ;pic_mem[y-1] = bmp_mem[x+2] ;y-=4;}但是在调试时总是出错,寻找最终的原因,应该是图片转换为矩阵时和图片翻转之间的步骤有误,导致调试时一直报错。
因此转变设计方案,先确定所要出现图片的位置,再通过在不同位置处显示不同图片的大小依次出现达到一个三维视觉动态效果,最后经过反转函数实现图片的反转,在制作过程中想要加入音乐,但是由于时间有限就未能实现。
图片显示函数如下://显示一张24位的bmp图片,图片的宽度必须为4的倍数void lcd_draw_bmp(char *name, int x0, int y0, int w, int h){int fd;fd = open(name, O_RDWR);if (-1 == fd){printf("open %s error!\n", name);return ;}图片反转函数如下://位运算int x, y, k,i = 0;for (y = 0; y < h; y++){for (x = w; x >0; x--){b = ch[i];g = ch[i+1];r = ch[i+2];i += 3;color = (r << 16) | (g << 8) | b;lcd_draw_point(x+x0, h-y+y0,color);}}}显示界面调用函数如下://显示BMP图片lcd_draw_bmp("zs.bmp", 1, 1, 796, 477);delayms(3000000);lcd_draw_bmp("zsone.bmp", 100, 60, 600, 360);delayms(3000000);lcd_draw_bmp("zstwo.bmp", 200, 120, 400, 240);delayms(3000000);lcd_draw_bmp("zsthree.bmp", 300, 140, 200, 200);delayms(3000000);lcd_draw_bmpop("zs.bmp", 1, 1, 796, 477);图片效果的速度可通过改变延时函数的时间来改变。
4. 结果与结论4.1 设计结果设计结果实现了以下4点:1)在LCD上显示图片,文字;2)关于GEC210芯片的使用,Ubuntu环境下的操作;3)可随时更换图片,具有串行通信功能;4)聚焦逐现图片特效。
效果分布展示如下:图4-1 开始界面图4-2 逐步缩小界面图4-3 放大反转界面4.2 结论设计优缺点:1)实现了多种不同的图片播放特效。
2)二次开发容易实现。
3)图片的自动播放。
4)未实现手动播放和音乐功能。
设计的核心及工程实用价值:随着数码相机的大量普及和人们对多媒体播放的需求,不同用户的计算机中存满各种照片,连桌上相框中照片的更换频率也提高了。