已阅读5页,还剩19页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
课课 程程 设设 计计 报报 告告 课程设计名称:嵌入式系统综合课程设计嵌入式系统综合课程设计 课程设计题目:基于基于 Android 手机的手电筒程序手机的手电筒程序 的实现的实现 院(系):计算机学院 专 业: 班 级: 学 号: 姓 名: 指导教师: 完成日期: -I- 目目 录录 第第 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 章章 系统设计系统设计.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 章章 系统调试及运行系统调试及运行.10 3.1 调试分析 .10 3.2 结果分析 .11 参考文献参考文献.13 附附 录录.14 第 1 章 系统分析 -1- 第 1 章 系统分析 1.1 需求分析需求分析 在现代社会中,手机的功能越来越丰富,给生活带来了极大的趣味性和便捷 性。手电筒是生活中最普通的生活必需品,它在我们身处黑暗时给予我们光亮。 传统的手电筒体积较大,需要电池,不方便携带。手机与手电筒的结合恰恰可以 解决传统手机带来的不便,同时还可以节约资源,保护环境。既可以让用户及时 获得手电筒带来的益处,也可以让生活更加便捷,高效。 1.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 章 系统分析 -2- 1.2.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)是一个实现包括储存数据元素的存储结构以及实 现基本操作的算法。其中包括数据对象,数据关系和基本操作。 1.2.2 相关硬件简介相关硬件简介 在安卓手机上绝大多数的处理器都是 ARM 处理器,ARM 处理器的三大特点 是:耗电少功能强、16 位/32 位双指令集和合作伙伴众多。其具体体现是: 1)体积小、低功耗、低成本、高性能; 2)支持 Thumb(16 位)/ARM(32 位)双指令集,能很好的兼容 8 位/16 位 器件; 3)大量使用寄存器,指令执行速度更快; 4)大多数数据操作都在寄存器中完成; 5)寻址方式灵活简单,执行效率高; 6)指令长度固定。 1.3 软件分析软件分析 本次课程设计用到的软件是 Eclipse,此软件是一个开放源代码的软件开发项 第 1 章 系统分析 -3- 目,专注于为高度集成的工具开发提供一个全功能的、具有商业品质的工业平台。 它主要由 Eclipse 项目、Eclipse 工具项目和 Eclipse 技术项目三个项目组成。具体 包括四个部分组成Eclipse Platform、JDT、CDT 和 PDE。JDT 支持 Java 开发、 CDT 支持 C 开发、PDE 用来支持插件开发,Eclipse Platform 则是一个开放的可 扩展 IDE,提供了一个通用的开发平台。它提供建造块和构造并运行集成软件开 发工具的基础。Eclipse Platform 允许工具建造者独立开发与他人工具无缝集成的 工具从而无须分辨一个工具功能在哪里结束,而另一个工具功能在哪里开始。 1.3.1 嵌入式操作系统简介嵌入式操作系统简介 从嵌入式系统的应用来分类,可以分为面向低端设备的嵌入式操作系统和面 向高端设备的嵌入式操作系统。 (低端:微波炉,洗衣机,冰箱;高端:信息化 家电,掌上电脑,机顶盒,路由器) 嵌入式操作系统(Embedded Operation System,EOS)是一种用途广泛的系 统软件,过去它主要应用于工业控制和国防系统领域。EOS 负责嵌入系统的全部 软、硬件资源的分配、任务调度,控制、协调并发活动。它必须体现其所在系统 的特征,能够通过装卸某些模块来达到系统所要求的功能。EOS 从单一的弱功能 向高专业化的强功能方向发展。嵌入式操作系统在系统实时高效性、硬件的相关 依赖性、软件固化以及应用的专用性等方面具有较为突出的特点。EOS 是相对于 一般操作系统而言的,它除具有了一般操作系统最基本的功能,还有以下功能: 如任务调度、同步机制、中断处理、文件处理等。 嵌入式操作系统特点: 1)良好的移植性、开放性、可伸缩性的体系结构,提供各种设备驱动接口。 EOS 实时性一般较强,可用于各种设备控制当中。操作方便、简单、提供友好的 图形 GUI,图形界面,追求易学易用。提供强大的网络功能,支持 TCP/IP 等协 议,提供 TCP/UDP/IP/PPP 协议支持及统一的 MAC 访问层接口,为各种移动计 算设备预留接口。 2)强稳定性,弱交互性。嵌入式系统一旦开始运行就不需要用户过多的干 预,这就要负责系统管理的 EOS 具有较强的稳定性。嵌入式操作系统的用户接口 一般不提供操作命令,它通过系统调用命令向用户程序提供服务。 第 1 章 系统分析 -4- 3)固化代码。在嵌入系统中,嵌入式操作系统和应用软件被固化在嵌入式 系统计算机的 ROM 中。辅助存储器在嵌入式系统中很少使用,因此,嵌入式操 作系统的文件管理功能应该能够很容易地拆卸,而用各种内存文件系统。 1.3.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 方向) 。 第章 系统调试及运行 -5- 第 2 章 系统设计 2.1 操作系统移植操作系统移植 嵌入式操作系统与通用操作系统的最显著的区别之一就是它的可移植性。一 款嵌入式操作系统通常可以运行在不同体系结构的处理器和开发板上。为了使嵌 入式操作系统可以在某款具体的目标设备上运行,嵌入式操作系统的编写者须把 一部分与具体硬件设备相关的代码作为抽象的接口保留出来,让提供硬件的 OEM 厂商来完成。这样才可以保证整个操作系统的可移植性。这些代码通常是 板级支持包 (Board Support Package, BSP)的一部分。 在此次课程设计中是将在 Eclipse 中编写好的程序移植到了安卓 (Android4.4.2)手机上,安卓手机的处理器是 ARM。 2.2 系统模块设计系统模块设计 设计分为三个模块:开灯模块、屏幕背光模块和 SOS 模块。系统模块设计图 如图 2.1 所示。 进入App Button1Button2Button3 开 灯 模 块 屏 幕 背 光 模 块 SOS 模 块 图图 2.1 系统模块图系统模块图 第章 系统调试及运行 -6- 手电筒模块是调用手机相机的闪光灯,通过它的长亮和关闭来实现手电筒的 亮灭。 屏幕背光模块是调用屏幕亮度的函数,通过改变它的参数值将屏幕亮度调到 最亮或调到最暗。 SOS 模块是通过重复对 background 赋颜色的十六进制码,来实现屏幕的一直 红白闪烁。 2.3 关键流程关键流程 2.3.1 系统主流程图系统主流程图 进入主界面后,有三个功能可以选择:开灯、调节屏幕背光到最亮和打开 SOS。系统主流程图如图 2.2 所示。 开 始 是否进入开灯模块 是否进入屏幕背光模块 是否进入SOS模块 进入闪光灯模块 进入屏幕背光模块 进入屏幕SOS模块 结束 是 是 是 否 否 否 图图 2.2 系统主流程图系统主流程图 第章 系统调试及运行 -7- 2.3.2 开灯流程图开灯流程图 进入 APP 后,系统监听“开灯”按钮,当按钮被按下,进入开灯模块。通过 手机相机闪光灯的长亮、关闭,实现手电筒的开启、关闭。开灯流程图如图 2.3 所示。 进入开灯模块 判断isopen是否为 true 调用相机camera.open() 调用闪光灯camera.startPreviwe() 设置isopent=false 关闭闪光灯camera.stopPreview() 关闭相机camera.open() 设置isopent=true 否 是 监听“开灯”按钮 设置isopent=true 进入APP主界面 是否按钮按下 是 否 图图 2.3 开灯流程图开灯流程图 第章 系统调试及运行 -8- 2.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.4 屏幕背光流程图屏幕背光流程图 第章 系统调试及运行 -9- 2.3.4 SOS 流程图流程图 进入 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.5 SOS 流程图流程图 第章 系统调试及运行 -10- 第 3 章 系统调试及运行 3.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 按钮中,设置背景颜色为白色。 第章 系统调试及运行 -11- 3.2 结果分析结果分析 1)软件主界面如图 3.1 所示。. 图图 3.1 软件主界面图软件主界面图 2)屏幕背光界面如图 3.2 所示。 图图 3.2 屏幕背光屏幕背光 沈阳航空航天大学课程设计报告 第 3 章 系统调试及运行 -12- 3)SOS 红色界面如图 3.3 所示。 图图 3.3 SOS 红色界面红色界面 4)开灯界面如图 3.4 所示。 图图 3.4 开灯界面开灯界面 沈阳航空航天大学课程设计报告 参考文献 -13- 参考文献 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 沈阳航空航天大学课程设计报告 附录 -14- 附 录 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; 沈阳航空航天大学课程设计报告 附录 -15- 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; 沈阳航空航天大学课程设计报告 附录 -16- );/开灯的监听 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) 沈阳航空航天大学课程设计报告 附录 -17- 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 沈阳航空航天大学课程设计报告 附录 -18- switch(msg.what) case 1: Resources res = getResources(); Drawable drawable = res.getDrawable(R.drawable.bkcolor); MainActivity.this.findViewB
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 女性导尿测试题与答案解析
- 2026 年度团员考试题目及详细答案
- 递归二元拆分通 用认知方法论
- 宫女殿试考题及对应答案
- 应急处置必知试题与对应答案
- SEO测试题附带答案说明
- 药品法关键试题及详细答案
- 解析合理膳食的试题及答案内容
- 2026年安徽历届信息模拟考试卷
- 2026北京市安全员证书考试精准题库及答案
- 2025-2030年中国卫浴洁具行业市场深度调研及竞争格局与投资研究报告
- 商贸公司存货管理制度
- 电梯维保安全协议书
- TCCES 44-2024 老旧房屋结构安全监测技术标准
- 深基坑支护工程经济性分析方案
- 教师职业能力提升培训方案
- 2018年版电工-国家职业技能标准
- LNG槽罐车事故处置课件
- 秋季常见传染病的预防
- 大学英语六级词汇(乱序版)CET
- 基坑双排钢板桩围堰与钢支撑施工方案
评论
0/150
提交评论