




已阅读5页,还剩31页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
精品资料 可编辑 课课 程程 设设 计计 报报 告告 课程设计名称:嵌入式系统综合课程设计嵌入式系统综合课程设计 课程设计题目:基于基于 AndroidAndroid 手机的手电筒程序手机的手电筒程序 的实现的实现 院(系):计算机学院 专 业: 班 级: 学 号: 姓 名: 指导教师: 完成日期: 精品资料 可编辑 目目 录录 第第 1 1 章章 系统分析系统分析.1 1 1.1 需求分析.1 1.2 硬件分析.1 1.2.1 实验环境.2 1.2.2 相关硬件简介.2 1.3 软件分析.2 1.3.1 嵌入式操作系统简介.3 1.3.2 开发技术简介.4 第第 2 2 章章 系统设计系统设计.5 5 2.1 操作系统移植.5 2.2 系统模块设计.5 2.3 关键流程.6 2.3.1 系统主流程图.6 2.3.2 开灯流程图.7 2.3.3 屏幕背光流程图.8 2.3.4 SOS 流程图.9 第第 3 3 章章 系统调试及运行系统调试及运行.1010 精品资料 可编辑 3.1 调试分析.10 3.2 结果分析.11 参考文献参考文献.1313 附附 录录.1414 精品资料 可编辑 第 1 章 系统分析 1.11.1 需求分析需求分析 在现代社会中,手机的功能越来越丰富,给生活带来了极大的趣味性和便捷 性。手电筒是生活中最普通的生活必需品,它在我们身处黑暗时给予我们光亮。 传统的手电筒体积较大,需要电池,不方便携带。手机与手电筒的结合恰恰可以 解决传统手机带来的不便,同时还可以节约资源,保护环境。既可以让用户及时 获得手电筒带来的益处,也可以让生活更加便捷,高效。 1.21.2 硬件分析硬件分析 Android 是一个以 Linux 为基础的半开源操作系统,主要用于移动设备,由 Google 和开放手持设备联盟开发与领导。 Android 的 HAL(硬件抽像层)是能以封闭源码形式提供硬件驱动模块。 HAL 的目的是为了把 Android framework 与 Linux kernel 隔开,让 Android 不至 过度依赖 Linux kernel,以达成 kernel independent 的概念,也让 Android framework 的开发能在不考量驱动程序实现的前提下进行发展。HAL stub 是一种 代理人(proxy)的概念,stub 是以 *.so 档的形式存在。Stub 向 HAL“提供” 操作函数(operations) ,并由 Android runtime 向 HAL 取得 stub 的 operations, 再 callback 这些操作函数。HAL 里包含了许多的 stub(代理人) 。Runtime 只要 说明“类型” ,即 module ID,就可以取得操作函数。 Android 本身是一个权限分立的操作系统。在这类操作系统中,每个应用都 精品资料 可编辑 以唯一的一个系统识别身份运行(Linux 用户 ID 与群组 ID) 。系统的各部分也分 别使用各自独立的识别方式。Linux 就是这样将应用与应用,应用与系统隔离开。 在 Android 开发中,我们就是通过 ID 来调用或更改组件的。 Android 平台提供给第三方开发者一个十分宽泛、自由的环境,不会受到各 种条条框框的阻扰。在本次课程设计中用到的是 Android4.4.2,型号为 SM-N9002 的三星手机。 .1 实验环境实验环境 1)JDK(Java Development Kit) JDK 是 Java 语言的软件开发工具包,主要用于移动设备、嵌入式设备上 的 java 应用程序。 2)Eclipse Eclipse 是一个开放源代码的、基于 Java 的可扩展开发平台。就其本身而 言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。幸运的 是,Eclipse 附带了一个标准的插件集,包括 Java 开发工具(Java Development Kit,JDK) 。 3)SDK(software development kit) SDK 是软件开发工具包。被软件开发工程师用于为特定的软件包、软件 框架、硬件平台、操作系统等建立应用软件的开发工具的集合。 4)ADT(Abstract Data Type) 抽象数据类型(ADT)是一个实现包括储存数据元素的存储结构以及实 现基本操作的算法。其中包括数据对象,数据关系和基本操作。 精品资料 可编辑 .2 相关硬件简介相关硬件简介 在安卓手机上绝大多数的处理器都是 ARM 处理器,ARM 处理器的三大特点 是:耗电少功能强、16 位/32 位双指令集和合作伙伴众多。其具体体现是: 1)体积小、低功耗、低成本、高性能; 2)支持 Thumb(16 位)/ARM(32 位)双指令集,能很好的兼容 8 位/16 位 器件; 3)大量使用寄存器,指令执行速度更快; 4)大多数数据操作都在寄存器中完成; 5)寻址方式灵活简单,执行效率高; 6)指令长度固定。 1.31.3 软件分析软件分析 本次课程设计用到的软件是 Eclipse,此软件是一个开放源代码的软件开发项 目,专注于为高度集成的工具开发提供一个全功能的、具有商业品质的工业平台。 它主要由 Eclipse 项目、Eclipse 工具项目和 Eclipse 技术项目三个项目组成。具体 包括四个部分组成Eclipse Platform、JDT、CDT 和 PDE。JDT 支持 Java 开发、 CDT 支持 C 开发、PDE 用来支持插件开发,Eclipse Platform 则是一个开放的可扩 展 IDE,提供了一个通用的开发平台。它提供建造块和构造并运行集成软件开发 工具的基础。Eclipse Platform 允许工具建造者独立开发与他人工具无缝集成的工 具从而无须分辨一个工具功能在哪里结束,而另一个工具功能在哪里开始。 .1 嵌入式操作系统简介嵌入式操作系统简介 从嵌入式系统的应用来分类,可以分为面向低端设备的嵌入式操作系统和面 精品资料 可编辑 向高端设备的嵌入式操作系统。 (低端:微波炉,洗衣机,冰箱;高端:信息化 家电,掌上电脑,机顶盒,路由器) 嵌入式操作系统(Embedded Operation System,EOS)是一种用途广泛的系统 软件,过去它主要应用于工业控制和国防系统领域。EOS 负责嵌入系统的全部软、 硬件资源的分配、任务调度,控制、协调并发活动。它必须体现其所在系统的特 征,能够通过装卸某些模块来达到系统所要求的功能。EOS 从单一的弱功能向高 专业化的强功能方向发展。嵌入式操作系统在系统实时高效性、硬件的相关依赖 性、软件固化以及应用的专用性等方面具有较为突出的特点。EOS 是相对于一般 操作系统而言的,它除具有了一般操作系统最基本的功能,还有以下功能:如任 务调度、同步机制、中断处理、文件处理等。 嵌入式操作系统特点: 1)良好的移植性、开放性、可伸缩性的体系结构,提供各种设备驱动接口。 EOS 实时性一般较强,可用于各种设备控制当中。操作方便、简单、提供友好的 图形 GUI,图形界面,追求易学易用。提供强大的网络功能,支持 TCP/IP 等协 议,提供 TCP/UDP/IP/PPP 协议支持及统一的 MAC 访问层接口,为各种移动计 算设备预留接口。 2)强稳定性,弱交互性。嵌入式系统一旦开始运行就不需要用户过多的干 预,这就要负责系统管理的 EOS 具有较强的稳定性。嵌入式操作系统的用户接口 一般不提供操作命令,它通过系统调用命令向用户程序提供服务。 3)固化代码。在嵌入系统中,嵌入式操作系统和应用软件被固化在嵌入式 系统计算机的 ROM 中。辅助存储器在嵌入式系统中很少使用,因此,嵌入式操 精品资料 可编辑 作系统的文件管理功能应该能够很容易地拆卸,而用各种内存文件系统。 .2 开发技术简介开发技术简介 Android 以 Java 为编程语言,使接口到功能,都有层出不穷的变化,其中 Activity 等同于 J2ME 的 MIDlet。一个 Activity 类负责创建视窗,一个活动中的 Activity 就是在 foreground 模式,背景运行的程序叫做 Service。两者之间通过由 ServiceConnection 和 AIDL 连结,达到程序同时运行的效果。如果运行中的 Activity 全部画面被其他 Activity 取代时,该 Activity 便被停止,甚至被系统清 除。 View 等同于 J2ME 的 Displayable,程序人员可以通过 View 类与“XML layout”档将 UI 放置在视窗上,Android 4.4.2 的版本可以利用 View 打造出所谓 的 Widgets,其实 Widget 只是 View 的一种,所以可以使用 xml 来设计 layout,HTC 的 Android Hero 手机即含有大量的 widget。至于 ViewGroup 是各种 layout 的基础抽象类,ViewGroup 之内还可以有 ViewGroup。View 的构造函数不 需要再 Activity 中调用,但是 Displayable 的是必须的,在 Activity 中,要通过 findViewById()来从 XML 中取得 View,Android 的 View 类的显示很大程度上是从 XML 中读取的。View 与事件息息相关,两者之间通过 Listener 结合在一起,每 一个 View 都可以注册一个 event listener,例如:当 View 要处理用户触碰的事件时, 就要向 Android 框架注册 View.OnClickListener。 Android 应用开发基础:Android 开发平台、Eclipse+ADT 开发环境、AVD 及 传感模拟器调试、Android 核心组件、Android 常用组件、Android 高级组件、文 件及网络访问、SQLite 数据库编程、后台服务编程。 精品资料 可编辑 Android 高级应用开发:音频视频摄像头、互联网应用、GPS 和位置服务、 Google Map、2D3D 绘制、传感器开发、游戏开发、电话及 SMS 服务、网络 BluetoothWi-Fi 等 Android 系统级开发:移植、驱动、NDK(C 方向) 。 精品资料 可编辑 第 2 章 系统设计 2.12.1 操作系统移植操作系统移植 嵌入式操作系统与通用操作系统的最显著的区别之一就是它的可移植性。一 款嵌入式操作系统通常可以运行在不同体系结构的处理器和开发板上。为了使嵌 入式操作系统可以在某款具体的目标设备上运行,嵌入式操作系统的编写者须把 一部分与具体硬件设备相关的代码作为抽象的接口保留出来,让提供硬件的 OEM 厂商来完成。这样才可以保证整个操作系统的可移植性。这些代码通常是 板级支持包 (Board Support Package, BSP)的一部分。 在此次课程设计中是将在 Eclipse 中编写好的程序移植到了安卓 (Android4.4.2)手机上,安卓手机的处理器是 ARM。 2.22.2 系统模块设计系统模块设计 设计分为三个模块:开灯模块、屏幕背光模块和 SOS 模块。系统模块设计图 如图 2.1 所示。 精品资料 可编辑 进入App Button1Button2Button3 开 灯 模 块 屏 幕 背 光 模 块 SOS 模 块 图图 2.12.1 系统模块图系统模块图 手电筒模块是调用手机相机的闪光灯,通过它的长亮和关闭来实现手电筒的 亮灭。 屏幕背光模块是调用屏幕亮度的函数,通过改变它的参数值将屏幕亮度调到 最亮或调到最暗。 SOS 模块是通过重复对 background 赋颜色的十六进制码,来实现屏幕的一直 红白闪烁。 2.32.3 关键流程关键流程 .1 系统主流程图系统主流程图 进入主界面后,有三个功能可以选择:开灯、调节屏幕背光到最亮和打开 SOS。系统主流程图如图 2.2 所示。 精品资料 可编辑 开 始 是否进入开灯模块 是否进入屏幕背光模块 是否进入SOS模块 进入闪光灯模块 进入屏幕背光模块 进入屏幕SOS模块 结束 是 是 是 否 否 否 图图 2.22.2 系统主流程图系统主流程图 .2 开灯流程图开灯流程图 进入 APP 后,系统监听“开灯”按钮,当按钮被按下,进入开灯模块。通过 手机相机闪光灯的长亮、关闭,实现手电筒的开启、关闭。开灯流程图如图 2.3 所示。 精品资料 可编辑 进入开灯模块 判断isopen是否为 true 调用相机camera.open() 调用闪光灯camera.startPreviwe() 设置isopent=false 关闭闪光灯camera.stopPreview() 关闭相机camera.open() 设置isopent=true 否 是 监听“开灯”按钮 设置isopent=true 进入APP主界面 是否按钮按下 是 否 图图 2.32.3 开灯流程图开灯流程图 .3 屏幕背光流程图屏幕背光流程图 进入 APP 后,系统监听“屏幕背光”按钮,当按钮被按下,进入银幕背光模 块。通过调用调节屏幕亮度的函数,将其参数值改为“1” (参数值从 0 到 1 的变 精品资料 可编辑 化,代表了屏幕的由暗到亮的过程) 。屏幕背光流程图如图 2.4 所示。 进入开灯模块 判断isopen是否为 true 调用相机camera.open() 调用闪光灯camera.startPreviwe() 设置isopen=false 关闭闪光灯camera.stopPreview() 关闭相机camera.open() 设置isopen=true 否 是 监听“开灯”按钮 设置isopen=true 进入APP主界面 是否按钮按下 是 否 图图 2.42.4 屏幕背光流程图屏幕背光流程图 .4 SOSSOS 流程图流程图 进入 APP 后,系统监听“SOS”按钮,当按钮被按下,进入 SOS 模块。调用 精品资料 可编辑 定时器内的函数 run(),更改背景颜色实现屏幕的红白闪烁。当按钮再次被按下时, 即退出 SOS 模块。SOS 流程图如图 2.5 所示。 进入SOS模块 判断isopent1是否为true 调用Timer,设置 为200毫秒的定时 调用run(); 关闭Timer,Timer 内的run(); isopent1=true; 退出SOS模块 否 是 监听“SOS”按钮 设置isopent1=true m_sos_flag=true 进入APP主界面 是否按钮按下 是 否 设置背景为红色, m_sos_flag=false; 经过200毫秒 设置背景为白色 m_sos_flag=true 经过200毫秒 否 是 判断m_sos_flag是否为true 否 图图 2.52.5 SOSSOS 流程图流程图 第 3 章 系统调试及运行 3.13.1 调试分析调试分析 1)在调试开灯模块时,一点击开灯按钮,APP 就自动退出。 精品资料 可编辑 解决方法:是在 AndroidManifest.xml 文件中申明对手机相机和闪光灯的调用 写下以下两句话: 2)在调试屏幕背光模块时,屏幕背光亮度亮度达不到最亮。 解决方法:是在 MainActivity 中的屏幕亮度函数调用中加入以下三句话 (wl.screenBrightness 的值从 0 到 1,代表了由暗到亮): WindowManager.LayoutParams wl = getWindow().getAttributes(); wl.screenBrightness =1; getWindow().setAttributes(wl); 3)在调试 SOS 模块时,在启动 SOS 按钮后,会直接退出 APP。 解决方法:当点击 SOS 按钮后有超过 5s 的延迟,我们的界面将处于一直假 死状态,系统将处于异常,自动退出。因此在 SOS 模块中加入 Handler()函数。 Handler()函数是在用户界面开发时,控制主用户界面程序的界面变化。它的作用 是与其它线程协同工作,接收其他线程的消息并通过接收到的消息更新主用户界 面线程的内容。用户界面的更新只能在本线程中完成,其他线程无法直接对主线 程进行操作。在主线程中绑定 Handler,并在事件触发上面创建新的线程用于完成 某些耗时的操作,当子线程中的工作完成之后,会对 Handler 发送一个完成的信 号,而 Handler 接收到信号后,就进行主 UI 界面的更新操作。 4)在调试 SOS 模块时,在准备退出 SOS,点击 SOS 按钮后,系统会时而会在红 色背景时停止,时而在白色背景时停止。 精品资料 可编辑 解决方法:在判断第二次按下 SOS 按钮中,设置背景颜色为白色。 3.23.2 结果分析结果分析 1)软件主界面如图 3.1 所示。. 图图 3.13.1 软件主界面图软件主界面图 2)屏幕背光界面如图 3.2 所示。 精品资料 可编辑 图图 3.23.2 屏幕背光屏幕背光 精品资料 可编辑 3)SOS 红色界面如图 3.3 所示。 图图 3.33.3 SOSSOS 红色界面红色界面 4)开灯界面如图 3.4 所示。 精品资料 可编辑 图图 3.43.4 开灯界面开灯界面 精品资料 可编辑 参考文献 1 高凯等编著. Android 程序设计基础教程M. 北京:国防工业出版社,2015 2 韩超. Android 系统原理及开发要点详解M. 北京:电子工业出版社,2010 3 李鲁群等编著. Android 应用程序设计M. 北京:清华大学出版社,2015 4 陈璟,陈平华,李文亮. Android 内核分析J . 广东工业大学计算机学院实践与 经验,2009:112-115. 5 王翠萍编著. Android 经典项目开发实战M. 北京:清华大学出版社,2015 6 吴亚峰等编著. Android 应用案例开发大全M. 北京:人民邮电出版社,2015 7 李鲁群等编著. Android 应用程序设计M. 北京:清华大学出版社,2015 8 邓文渊等. Android 开发基础教程M. 北京:人民邮电出版社,2014 9 郭志安. Android 应用开发详解M. 北京:电子工业出版社,2010 10 杨丰盛. Android 应用开发揭秘M. 北京:科学出版社,2010 11 SatyaKomatineni,DaveMaclean.Pro Android 4M.USA:Apress,2012 精品资料 可编辑 精品资料 可编辑 附 录 MainActivity.java: package com.example; import java.util.Timer; import java.util.TimerTask; import android.app.Activity; import android.content.res.Resources; import android.graphics.drawable.Drawable; import android.hardware.Camera; import android.hardware.Camera.Parameters; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.util.Log; import android.view.Menu; import android.view.MenuItem; 精品资料 可编辑 import android.view.View; import android.view.View.OnClickListener; import android.view.WindowManager; import android.widget.Button; public class MainActivity extends Activity Timer timer; private Button loginButton; private Button loginButton1; private Button loginButton2; private boolean isopent = false; private boolean isopen = false; private Camera camera; Handler handler=null; private boolean isopent1 = false; private boolean m_sos_flag=false; Override protected void onCreate(Bundle savedInstanceState) 精品资料 可编辑 super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); loginButton=(Button) findViewById(R.id.button1); loginButton1=(Button) findViewById(R.id.button2); loginButton2=(Button) findViewById(R.id.button3); / lp.screenBrightness = 0.1f; loginButton.setOnClickListener(new OnClickListener() Override public void onClick(View v) / TODO Auto-generated method stub if (!isopent) camera = Camera.open(); Parameters params = camera.getParameters(); params.setFlashMode(Parameters.FLASH_MODE_TORCH); camera.setParameters(params); camera.startPreview(); / 开始亮灯 isopent = true; 精品资料 可编辑 else camera.stopPreview(); / 关掉亮灯 camera.release(); / 关掉照相机 isopent = false; );/开灯的监听 loginButton1.setOnClickListener(new OnClickListener() Override public void onClick(View v) / TODO Auto-generated method stub if (!isopen) WindowManager.LayoutParams wl =getWindow().getAttributes(); wl.screenBrightness =1; getWindow().setAttributes(wl); isopen = true; else 精品资料 可编辑 WindowManager.LayoutParams wl = getWindow().getAttributes(); wl.screenBrightness =3/4; getWindow().setAttributes(wl); isopen = false; );/屏幕背光的监听 loginButton2.setOnClickListener(new OnClickListener() Override public void onClick(View v) / TODO Auto-generated method stub if(!isopent1) timer = new Timer(); timer.schedule(new TimerTask() Override public void run() if(m_sos_flag) 精品资料 可编辑 Message message=new Message(); message.what=1; handler.sendMessage(message); m_sos_flag=false; isopent1 = true; else Message message=new Message(); message.what=0; handler.sendMessage(message); m_sos_flag=true; isopent1 = true; /isopent1 = true; , 50, 200); 精品资料 可编辑 else Message message=new Message(); message.what=3; handler.sendMessage(message); );/SOS handler=new Handler() Override public void handleMessage(Message msg) / TODO Auto-generated method stub switch(msg.what) case 1: Resources res = getResources(); Drawable drawable = res.getDrawable(R.drawable.bkcolor); 精品资料
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025临时工派遣合同协议书示例
- 2025建筑外墙装修设计合同
- 2025租赁合同购销协议模板
- 心理健康促进与管理效能试题及答案
- 行政管理学对人力资源的研究试题及答案
- 实践与理论结合的建筑工程考试试题及答案
- 行政管理本科综合素质培养试题及答案
- 2025机器设备融资租赁合同模板
- 现代管理学在企业并购中的应用研究试题及答案
- 懂公文写作的试题及答案助你获得良好成绩
- 心血管内科降低患者桡动脉止血器压迫不适发生率品管圈PDCA成果汇报书
- 第11课 近代职业教育的兴起和发展
- 《研学旅行课程设计》研学旅行课程案例展示 题库
- 人音版音乐七年级上册《在希望的田野上》课件
- 初中班会 班主任工作经验交流 《教育是一场美丽的遇见》 课
- 基于STM32单片机的智能楼宇控制系统设计
- 第二单元《践行职业道德》测试卷-高二思想政治课《职业道德与法治》附答案
- 三年合同到期不续签劳动仲裁申请书
- 语文跨学科学习成功案例分析:语文与艺术学科的融合
- 《长大以后做什么》绘本省公开课获奖课件说课比赛一等奖课件
- GB/T 23106-2024家用和类似用途毛发护理器具性能测试方法
评论
0/150
提交评论