tag 标签: 框架

相关帖子
相关博文
  • 热度 14
    2013-8-29 20:38
    2948 次阅读|
    0 个评论
    目的:简单、实用的自组网协议栈,面向位置相对固定的路由节点。终端节点可以入网也可以不入网发送接收消息,以方便终端节点移动。较完善的网络管理功能。   功能: 业务功能用例: UC1 : 网关节点启动后,判断可用信道状态,选择合适的信道创建无线网络,成功后向网络提供以下服务( UC1.1 ): 响应入网请求(直接、间接),响应离网请求(直接、间接); 响应路由节点更换父节点请求,响应终端节点更换父节点请求; 转发无线网络节点的消息给网关应用,转发网关应用的消息给无线网络节点; 在无线网络节点之间转发消息; 向网关应用提供以下服务( UC1.2 ): 获取无线网络拓扑结构; 获取无线网络节点的工作状态和网络配置参数; 修改无线网络节点的网络配置参数; 获取无线网络路由节点的通信性能参数; 在无线网络节点与网关应用之间转发消息; 节点首次入网确认; 将无线网络节点之间转发的消息转发给网关应用作为日志记录; UC2 : 路由节点首次接入网络,须通过网关应用确认,获取网络名称和可能使用的信道。然后根据网络名称申请加入网络,保存网络地址和父节点地址,在后续重启时可优先使用原来的配置加入网络,如果连接不上则重新申请加入网络。 路由节点更换网络需重新通过网关应用确认。 路由节点加入网络后,可以为其它网络节点(非网关)提供以下服务( UC2.1 ): 首次入网申请; 加入网络,脱离网络; 在子节点与网关应用之间转发消息; 子节点通信状态更新; 子节点被呼通知; 本节点状态定期通知; 广播来自网关应用的消息; 路由节点可以合并发往网关的消息,可以分拆来自网关的消息。 UC3 : 终端节点首次接入网络,须通过网关应用确认,获取网络名称和可能使用的信道。 终端节点可以在不加入网络的情况下(游离节点)( UC3.1 ),发送消息给网关应用,以及接收周边相同网络的节点广播的消息。 终端节点可以申请加入网络,作为网络拓扑中的一员( UC3.2 ): 终端节点可以休眠,在醒来后使用保存下来的父节点地址等网络配置发送消息; 终端节点可以申请更换父节点,可以申请离网; 入网的终端节点须定期向父节点报告状态; 终端节点在休眠醒来后可以向父节点查询是否有被呼通知(消息缓存业务由网关应用提供);   UC1.2.1: 网关应用从网关节点获取无线网络拓扑结构 ~.1: 网关应用运行在嵌入式系统或电脑上,与网关节点通过RS232接口连接。 ~.2: 网关节点和路由节点保存子节点列表及地址空间表,网关应用可通过接口获取指定节点的子节点列表和地址空间表。子节点列表的数据应满足网关应用从中还原当前的无线网络拓扑结构。 ~.3: 当有节点加入网络、离开网络、更换父节点时,网关节点须通知网关应用,通知接口的参数应满足网关应用在不需要进一步查询的情况下更新当前的无线网络拓扑结构。 UC1.2.2: 网关应用获取无线网络节点的工作状态和网络配置参数 ~.1: 网关应用可通过接口从指定节点获取其工作状态,包括: 电源电量; I/O端口配置,I/O端口当前值; ~.2: 网关应用可通过接口从指定节点(网关节点和路由节点)获取其子节点的工作状态,包括: 联网状态:在线--配置的时间段内有与父节点发生通信;离线; ~.3: 网关应用可通过接口从指定节点(网关节点和路由节点)获取其网络配置参数,包括: 节点名称,节点类型; 节点网络地址; (供子节点使用的)网络地址空间;(包含已使用的和未使用的);由若干地址段组成,每个地址段有特定的配置参数,指定该地址段中允许的路由子节点、终端子节点数目; 当前频道,可选用频道列表; 定时状态上报周期; 父节点网络地址,父节点配置形式:固定、半固定、动态; 网络名称(仅网关节点); 通信性能统计周期; ~.4: 网关应用可通过接口从指定节点(终端节点)获取其网络配置参数,包括: 节点名称,节点类型; 节点网络地址; 当前频道,可选用频道列表; 定时状态上报周期; 父节点网络地址,父节点配置形式:固定、半固定、动态; 通信性能统计周期; UC1.2.3: 网关应用修改无线网络节点的网络配置参数 ~.1: 网关应用可通过接口令指定节点修改其网络配置参数,包括: 节点名称; 可选用频道列表; 定时状态上报周期; 父节点配置形式:固定、半固定、动态; 通信性能统计周期; UC1.2.4: 网关应用获取无线网络路由节点的通信性能参数 ~.1: 网关应用可通过接口从指定节点获取其通信性能参数,包括: 发送消息数目,射频发送失败数目,因缓冲区满丢弃数目; 接收消息数目,其中CRC错误消息数目,因缓冲区满丢弃数目; 重启总次数;    
  • 热度 20
    2013-6-8 16:48
    1075 次阅读|
    0 个评论
          最新版 Android框架与HMTL5开发平台PhoneGap架构设计与深度定制培训   在软硬整合领域, Android以其对软件和硬件的高度开放性引领了当今的软硬整合潮流,全世界正在进行一场轰轰烈烈的Android运动,Android以不可思议的速度渗透越来越广的领域,Android智能手机、Android智能电视、Android微波炉、Android平板电脑、Android智能机器人、Android车载系统等越来越多的Android产品涌入人们的工作和生活中,自从Google的Android@Home战略发布以来,更是让世界对Android充满了怦然心动的期待,可以预测,未来的家庭智能化和物联网时代将是Android的天下! 谁,将成为软硬整合时代的新主人? 谁,将彻底掌握Android从底层开发到框架整合技术在到上层App开发的全部技术? 谁,将彻底洞悉HTML5的技术源泉和精髓,进而在HTML5游刃有余?   中国电子标准协会 http://www.ways.org.cn 恭喜你,当别人还在雾里看花,你却有机会彻底掌握Android软、硬、云整合技术。 这是一次彻底的Android架构、思想和实战技术的洗礼。 彻底掌握Andorid HAL、Android Runtime、Android Framework、Android Native Service、Android Binder、Android App、Android Testing、HTML5技术的源泉和精髓等核心技术,不仅仅是技术和代码本身,更重要的是背后的设计思想和商业哲学。   聪明如你,请尽快研习。   一、课程特色    贯通Android软硬整合和HTML5端云整合技术整个体系; 全程案例驱动,重在剖析案例代码背后的设计思维和商业密码; 彻底掌握Android HAL的背后的密码; 彻底掌握Android HAL的实现机制和技术 彻底掌握Android Framwork的背后的密码 彻底掌握Android Framwork的设计思维和理念 揭秘Android系统的运行的基石Binder 以Camera实例来彻底剖析Native Service和Binder 彻底实战编写Andorid应用程序的一切技术 掌握HTML5技术的源泉和精髓 二、培训对象 对Android软硬整合感兴趣的人员; 希望迅速了解和掌握Android应用和底层技术的人员; Android底层开发者; Android框架设计和开发者; Android产品架构师; Android系统架构师; Android应用程序开发者; 欲从事HTML5系统工作的人员(浏览器的开发、PhoneGap的的Plugin开发等) 希望从事移动终端开发的爱好者、工程师、程序员、以及相关行业的工程技术人员 培训目标 致力于打造在软硬云整合时代具有独立思考能力和实践能力的高素质IT人才; Android高级工程师 Android移植工程师 Android框架开发工程师 Android项目经理 Android架构师 HTML5系统架构和开发人员 四、学员基础       1) 具有Java基础;       2) 具有C和C++基础更佳;       3)对设计模式有所有了解对提升听课效果会大有裨益;   六、培训方式 本课程共计3天,内容涵盖Android底层、Android HAL、Android Runtime、Android Framework、Android Native Service、Android Binder、Android App开发、Android的Web开发等软硬云整合的的几乎所有核心技术并揭秘HTML5技术的源泉和精髓,致力于打造在软硬云整合时代具有独立思考能力和实践能力的高素质IT人才;授课是以案例驱动为基础重在讲解代码背后的设计思维和商业密码; 七、培训内容     第一天 第1个主题:Android架构揭秘 1,1 Google是如何通过Android支持、掌控全球的硬件厂商和应用程序开发者的? 1,2 Android控制力的源泉是什么?技术上如何实现? 1,3 Android的Linux Kernal、HAL、Libararies、Runtime、Application Framework设计的理念和实现技术; 1.4 Android平台与硬件、云的微妙关系;   第2个主题:Android开机流程揭秘 2,1 第一个用户进程剖析; 2,2 ServiceManager与Binder的关系; 2,3 Zygote揭秘及其运作方式; 2,4 Android中的第一个Java进程揭秘,第一个Java进程和ServiceManager的关系及代码实现;   第3个主题:Android中启动一个新的应用程序揭秘 3,1 当我们触摸Android屏幕中Launcher上的一个应用程序的图标的时候到底发生怎样的调用过程? 3,2 应用程序的执行入口到底在哪里? 3.3 一个新的Android应用程序的进程到底是怎么产生的?   第4个主题:HAL揭秘 4.1 HAL被加入Android中的真正历史原因分析 4.2 HAL的意外价值揭秘 4.3 HAL的Stub 4.4 hw_module_t与hw_device_t 4.5 C语言如何实现继承来满足HAL Stub的设计目的?包括内存结构分析和代码风格讨论等 4.6 如何避免HAL Stub实现时的Dirty Code?   第5个主题:HAL Stub实战 5.1 用面向对象的思想分析、设计、实现Stub 5.2 hw_module_t的子类和hw_device_t的子类的关系以及这种关系的优势 5.3在结构体中如何实现C函数的调用?hw_module_t的子类在代码中又是如何和hw_device_t的子类交互的? 5.4 类型转换问题   第6个主题:HAL和Linux Kernel 6.1 HAL Stub访问和控制硬件 6.2 Android下的Linux Kernel剖析 6.3 Android 硬件的Driver 6.4 访问Linux内核空间的Driver   第7个主题:Service与HAL Stub整合 7.1 以面向服务的观点和方式与HAL交互 7.2 Library的中so库文件的类型及C/S结构剖析 7.3 hw_get_module 7.4 获取HAL Stub对象的代码流程剖析 7.5 为何HAL Stub的open方法必须提供supporting API(对设备的操作接口)给runtime;   第8个主题:Service、ServiceManager和Binder交互关系揭秘 8.1 Binder的第一号服务是谁?为何要这样设计和实现? 8.2 如何编写Service 8.3 新的Service产生与ServiceManager和Binder交互流程 8.4 如何获取一个Service? 8.5 Binder的生产者与消费者模式剖析     时间 內  容 备注 第二天 第9个主题:Binder与Shared Memory 9.1 Binder源代码剖析 9.2 Shared Memory剖析 9.3 Binder是如何使用共享内存来完成进程间通信的? 9.4 从代码的角度来分析Binder使用Shared Memory的生产者与消费者模式   第10个主题:Dalvik VM 10.1 Dalvik VM的特点,Dalvik VM和JVM的比较 10.2 Dalvik VM的内存分布及OOM(Out of Memory)的根本原因和解决方案是什么? 10.3 Preload Classes和 Preload Resources,ClassLoader到底在哪里? 10.4 Dalvik与Java和C/C++   第11个主题:Android中的JNI编程 11.1 Java调用C/C++ 11.2 JNIEnv、JVM、JObject揭秘 11.3 C/C++创建Java对象、调用Java属性和方法 11.4 JNI中的多线程编程 11.5 Facade Pattern在JNI中绝妙应用剖析 11.6 PnP(Plug and Play)   第12个主题:Android中的NDK编程 11.1 NDK与JNI关系揭秘 11.2 NDK开发的流程 11.3 采用NDK方式开发出的程序安装和运行的内幕 11.4 NDK中的Java与C/C++相互调用 11.5 NDK中的多线程编程 11.6 关于Android软件开发的标准化和可替换性揭秘   第13个主题:SystemServer与Framework中的Service 13.1 Zygote与SystemServer 13.2 SystemServer开启Java世界的过程揭秘 13.3 Android Service和Native Service是如何关联起来的? 13.4 Android Service与ServiceManager 13.5 如何把自己的服务加入到ServiceManager中?   第14个主题:把Java写的 Service加入到Applciation Framework中 14.1 IInterface与CTS 14.2 Binder 14.3 AIDL 14.4 Java Service与Manager 14.5 SystemServer、ServiceManager   第15个主题:Android框架移植移植时的事件驱动机制 15.1 Android Service是如何应对硬件阻塞的? 15.2 开辟新的子线程并不断的poll 15.3 Listener注册 15.4 Callback 15.5 Application Framework中的Handler、Message、Looper、MessageQueue、 15.6 事件驱动机制实例   第16个主题:Manager、Service和完整的数据流 16.1,Manager和Service分离的原则 16.2,ANR问题 16.3,阻塞式的操作和非阻塞式操作 16.4,以实例说明Android中的从最底层到最上层的数据流   第17个主题:Android软、硬、云三位一体整合 17.1 从技术角度揭秘云,包括云的关键技术和实现方法 17.2 在Native Service中整合Android与云 17.3 在Application Framework中整合Android与云 17.4 Android软、硬、云三位一体整合,包括模式、策略、实现技术             时间 內  容 备注 第三天 第18个主题:Android Application Framwork和App的关系 18.1 Framework和App的具体关系是什么? 18.2 Framework和App的交互过程? 18.3 Framework如何掌控App的? 18.4 Framework与Android的四大组件;   第19个主题:Android Application Framwork和App的关系 19.1 Framework和App的具体关系是什么? 19.2 Framework和App的交互过程? 19.3 Framework如何掌控App的? 19.4 Framework与Android的四大组件;   第20个主题: Handler、Looper、Message、MessageQueue 20.1. Android的事件驱动模型 20.2. Looper、MessageQueue、Hanlder、Message等源码深度剖析 20.3. Looper、MessageQueue、Hanlder、Message及多线程实战案例 第21主题:AsyncTASK异步线程技术 21.1. 使用AsyncTask的原因及对AsyncTask的思考 21.2. AsyncTask代码示例 21.3. AsyncTask源码剖析   第22个主题:Android测试 22.1.Android代码测试的好处,测试的方式 22.2.JUnit框架解析 22.3.测试用例的生命周期 22.4.自动化测试 22.5.源码剖析   第23个主题:广播接受者BroadcastReceiver,短信***案例(接受到短信后上传到服务器或发送到指定的号码或者发送到指定的邮件中) 23.1.剖析广播接收者,与JMS的比较,广播接受者的IoC原理 23.2.短信监听Android客户端 23.3.服务器端搭建 23.4.通过网络把接收到的短信上传到服务器 23.5.把接收到的短信发送到指定的手机号码或者邮件中 23.6.BroadcastReceiver的的生命周期和注意事项以及5秒钟生命响应时间的解决方案   第24个主题:服务Service,电话***(每次开机的时候自动开机,电话来时录音并上传到服务器) 24.1.详细剖析Service 24.2.构建电话监听的Service 24.3.使用BroadcastReceiver监听开机事件,并在开机时启动电话监听的Service 24.4.上传音频文件到服务器 24.5.关于Android安全体系的思考   第25个主题:ContentProvider背景、用途,如何构建ContentProvider,UriMatcher,ContentUris,对CotentProvider进行单元测试、源代码分析 25.1.ContentProvider背景、用途 25.2.构建ContentProvider的详细步骤 25.3.对URI的彻底剖析 25.4.分析UriMatcher,ContentUris 25.5.对ContentProvider的业务层代码进行单元测试 25.6.ContentProvider的源代码剖析 第26主题:基于通讯录的开发 26.1. 通讯录的数据库和数据表分析 26.2. 通讯录ContentProvider的源码剖析 26.3. 获取所有的联系人信息 26.4.添加联系人 26.5.如何处理添加通讯录记录时的事物问题   第27个主题:断点续传(一)类似迅雷的多线程下载器(适用于任何类型的文件下载) 27.1,多线程下载断点续传原理和流程图 27.2,下载文件时Http协议协议详解 27.3,多线程下载断点续传程序:设计服务端和Android端 27.4,Android端的内容涉及IoC、多线程、SQLite数据库、Handler、Http协议、缓存处理、意外关机时候的处理、编写框架、MVC、Service、Android中的I/O流、代码调试、Activity的生命周期等 27.5,单元测试 27.6,软件调试   第28个主题:断点续传(二)多线程断点文件上传器(适用于任何类型的文件上传) 28.1,断点续传原理和流程图 28.2,上传文件的Http协议详解 28.3,自定义自己的文件传输协议 28.4,服务端程序的编写:文件的下载与实时数据的记录、监听模式、乱码问题的处理、并发问题、黑客安全问题 28.5,客户端程序的编写:Android内存溢出问题,Android中的Socket编程、大文件的传输、大文件传输时候的安全问题 28.6,单元测试 28.7,软件调试 第29个主题:Android客户端表单数据的上传 29.1,上传基本的数据类型 29.2,上传图片等附件 把代码重构为能够上传任意数量的字段和任意数量的附件的工具类   第30个主题:Android中Java与WebView中Javascript相互沟通 30.1,制作Android界面的新大陆 30.2,Java调用Javascript 30.3,Javascript调用Java   第31个主题:浏览器开发和自定义 31.1 浏览器定制和开发的核心原理剖析 31.2 浏览器定制和开发的技术手段剖析 31.3 浏览器定制和开发实战   第32个主题:HTML5时代:Device、Browser、Cloud 32.1  HTML5时代谁最重要? 32.2  HTML5与Device 32.3  HTML5与Cloud 32.4  什么主导了HTML5时代?   第33个主题:HTML5开发平台----PhoneGap框架的技术基石是什么? 33,1 使用WebView 33,2 在WebView中使用JavaScript 33.3 创建本地Java API 33.4 使用JavaScriptInterface 33.5 JavaScript调用Java 33.6 Java调用JavaScript 33.7 PhoneGap是如何使用JavaScriptInterface的 第34个主题:PhoneGap的Plugin开发 34.1如何扩展PhoneGap的功能? 34.2 IPlugin接口 34.3 Proxy-Stub模式在Plugin开发中的应用及价值 34.4 Plugin开发中如何控制硬件厂商和Web开发者 34.5 Plugin核心代码剖析及开发实战          
  • 热度 18
    2013-6-8 16:10
    664 次阅读|
    0 个评论
           Android 应用程序框架实践培训   一:课程背景:    APK 是AF(Application Framework)和应用开发工程师共同智慧的结晶,APK的运行是AF和应用开发工程师开发的Code相互作用。 本课程依据和Android之父以及Google、三星、HTC中的Android团队合作的经验,力求从设计者的角度带领大家彻底洞悉AF,先从AF的架构和移植讲起,然后详细的以AMS、PMS、WMS的Code细致验证和深度剖析,最后以ANR的彻底剖析结束。 二:这个课程能带给您什么价值? 有Android App开发经验应用软件开发工程师: 第一:解决应用程序频繁出现的疑难杂症,例如ANR、OOM等 第二:应用程序的安装、运行、结束背后的秘密、并以细致的代码剖析来深度探讨; 第三:是从应用开发工程师走向Android架构师最快捷、最实用的的道路; 有经验的Android系统开发人员: 第一:Application Framework内部所有的架构设计秘密揭秘,让你把自己的硬件服务移植进AF如行云流水般畅快; 第二:掌控Android应用程序开发者; 第三:领略最顶级的商业架构思维是如何转化为具体的框架代码的;   中国电子标准协会 http://www.ways.org.cn 三:适合对象:    有至少半年经验的Android应用程序开发,经验越丰富越好;    有Android系统移植经验;    上过王家林Android软硬整合课程或者应用程序开发课程的朋友;   四、培训内容     第一天 第1个主题: Android的哲学思考 1. 造型简单、内涵丰富、无限重复 2. Android的IOC 3. APK与API   第2个主题:Android Application Framework揭秘 1. CS结构:应用框架中的Manager通用的结构 2. Manager与Service一一对应 3. 跨进程通信与AIDL   第3个主题:Android中启动一个新的应用程序揭秘 1. 当我们触摸Android屏幕中Launcher上的一个应用程序的图标的时候到底发生怎样的调用过程? 2. 应用程序的执行入口到底在哪里? 3. 一个新的Android应用程序的进程到底是怎么产生的?   第4个主题:Dalvik VM 1. Dalvik VM的特点,Dalvik VM和JVM的比较 2. Dalvik VM的内存分布及OOM(Out of Memory)的根本原因和解决方案是什么? 3. Preload Classes和 Preload Resources,ClassLoader到底在哪里? 4. Dalvik与Java和C/C++   第5个主题:把Java写的 Service加入到Applciation Framework中 1. IInterface与CTS 2. Binder 3. AIDL 4. Java Service与Manager 5. SystemServer、ServiceManager   第6个主题:Android框架移植移植时的事件驱动机制 1. Android Service是如何应对硬件阻塞的? 2. 开辟新的子线程并不断的poll 3. Listener注册 4. Callback 5. Application Framework中的Handler、Message、Looper、MessageQueue、 6. 事件驱动机制实例   第7个主题:Manager、Service和完整的数据流 1,Manager和Service分离的原则 2,ANR问题 3,阻塞式的操作和非阻塞式操作 4,以实例说明Android中的从最底层到最上层的数据流   第8个主题:ActivityManagerService之AMS总体剖析 1.ActivityManagerService的main函数剖析 2,AMS的 setSystemProcess剖析 3.AMS的 installSystemProviders函数剖析 4.AMS的 systemReady剖析   第9个主题:ActivityManagerService之startActivity剖析 1.ActivityManager 2.AMS的startActivityAndWait函数剖析 3.startActivityLocked剖析   第10个主题:ActivityManagerService之Broadcast和BroadcastReceiver剖析 1.registerReceiver流程剖析 2.sendBroadcast流程剖析 3.BROADCAST_INTENT_MSG消息处理函数 4.应用进程处理广播剖析 第11个主题:ActivityManagerService之startService剖析   1.startService代码剖析 2.startService流程图       时间 內  容 备注 第二天 第1个主题:ActivityManagerService之进程管理 1.Linux和Android中的进程管理 2.AMS进程管理函数剖析   第2个主题:ActivityManagerService之App的 Crash处理 1.应用进程的Crash处理 2.AMS的handleApplicationCrash剖析 3.AppDeathRecipient binderDied剖析   第3个主题:PackageManagerService之main函数剖析 1.构造函数剖析之前期准备工作 2.构造函数剖析之扫描Package 3.构造函数剖析之扫尾工作 第4个主题:PackageManagerService之APK Installation剖析 1.adb install剖析 2.pm剖析 3.installPackageWithVerification函数剖析 4.APK 安装流程 5.Verification介绍   第5个主题:PackageManagerService之queryIntentActivities剖析 1.Intent及IntentFilter介绍 2.Activity信息的管理 3.Intent 匹配查询剖析 4.queryIntentActivities总结   第6个主题:PackageManagerService之installd及UserManager剖析 1. installd剖析 2.UserManager剖析     第7个主题:WindowManagerService之应用程序界面的初始化 1. Android中的窗口 2.应用程序界面初始化的过程   第8个主题:WindowManagerService之窗口管理 1. WindowManagerService.java     WindowState.java     WindowToken.java     AppWindowToken.java     Session.java     InputManager.java     InputMonitor.java 等的分析 2.Activity启动过程中创建窗口的时序   第9个主题:WindowManagerService之WindowManagerImpl剖析 1. addView 2.ViewRoot     第10个主题:WindowManagerService之WindowManagerImpl剖析 1. ViewRoot和WMS的交互 2.WindowState和Surface   第11个主题:彻底洞悉ANR 1. ANR通常出现的场景和常用的解决方案 2.从框架和系统的观点来看:ANR到底是怎么产生的? 3. ANR的终极解决方案是什么?        
  • 热度 11
    2013-6-8 15:10
    591 次阅读|
    0 个评论
         Android 软硬整合框架实践培训   二:培训内容 本课程以Android的四大核心:HAL、Binder、Native Service、View System为主轴,一次性彻底掌握Android的精髓。 之所以是开发Android产品的必修课,缘起于: HAL是Android FrameworkApplication与底层硬件整合的关键技术和必修技术; Native Service 对上层来说代表了硬件,是Android底层真正的精髓; Binder 是Android系统运行的基石,不掌握Binder就永远无法掌握Android; View系统的差异化对消费者而言是Android产品核心竞争力之一,苹果和三星是这方面成功的经典案例; 通过Android四大核心的洗礼,将助工程师和架构师通往Android研发和解决问题的自由之路! 课程特色 建立Android框架与HAL驱动程序整合的研发能力和解决问题的能力;   中国电子标准协会 http://www.ways.org.cn 培训对象 手机、平板、智能电视、车载系统、智能家居设备(例如微波炉、防盗门、电冰箱)等所有想使用Android的硬件厂商; 想理解Android运行机制的软件开发者; 学员基础       能看懂C/C++与Java 培训内容     第一天 第1堂课:Hardware Abstract Layer 架构与驱动模组开发1.1 Service与Manager的意义与用途 1.2 libhardware 与 HAL API 1.3 Stub Module 的观念 1.4 HAL Stub Analysis and Design (OOAD) 1.5 HAL Stub Class 1.6 HAL Stub Interface 第2堂课:Android Service 架构 SystemServer 整合开发2.1 Zygote SystemServer 介绍 2.2 ServiceManager介绍 2.3 IPC、 Remote method call与Binder管理说明 2.4 AIDL 介绍与IInterface设计观念解析 2.5 Activity ApplicationContext 2.6 ServiceManager 第3堂课:Android Framework 架构原理分析 (OOD) 3.1 JNI 开发 3.2 Remote Object观念与IBinder介绍 3.3 如何以Proxy Object整合Android Service 3.4 Handler 与 Message 的解析与实作细节 3.5 Doing Long Operations 3.6 Design Patterns of Android Framework       时间 內  容 备注 第二天 第4堂课:Android Process 模式与系统程序 4.1 Component 與 Main Thread 4.2 Instance of Dalvik VM 4.3 Introduction of Dalvik VM 4.4 Android Process Model 4.5 Class Preloading 4.6 Dalvik VM Instantiation Initialization 第5堂课:Manager API Context 5.1 Introduction Context 5.2 getSystemService() 5.3 IPC AIDL 5.4 IPC with Android Service using Binder Proxy 第6堂课:Native Service 实现完整解析 6.1 使用 IInterface (Java vs C++) 6.2 使用 BnInterface 与 BpInterface 6.4 Implementation of Native Service 6.5 Implement Native Binder Proxy       时间 內  容 备注 第三天 第7堂课:Binder 原理与核心架构解析 7.1 Proxy Design Pattern 7.2 .asInterface() 深入解析 7.3 Linux Binder驱动解析 7.4 BpInterface, Proxy object 与 IPC transaction 7.5 Architect of SensorManager 第8堂课:View System 设计模式与实现原理解析 8.1 Introduction to Activity, Window and View 8.2 Architecture of Android View System 8.3 Surface and Canvas 8.4 The flow of drawing: from View to SurfaceFlinger 8.5 The MVC design of View Hierarchy 8.6 The Composite pattern of View Hierarchy          
  • 热度 20
    2012-12-16 10:56
    3635 次阅读|
    9 个评论
    单片机工程师面对一种新单片机时,最希望的是能有一个简单的样例,这个样例连上仿真器就能运行,里面最好包含一些基本功能,这样工程师就可以在这个样例的基础上很快改出自己需要的代码。   这里我以应广pdk22c12写了一段程序框架,已经包含对这个单片机的各种基本设置,拿回去就可以自己进行仿真调试,相信能让新接触应广单片机的朋友很快上手。   //----------------------------------------- //应广单片机软件基本框架例程 //本例仅供参考,欢迎指正程序中的问题 //本例是根据应广单片机的特点创建的基本程序框架 //包含定时中断、外部中断、AD转换、段位数码管显示,简单按键处理等功能 //用户在本例基础上很容易就能改出自己需要的程序 //2012年12月15日 // //作者:戴上举 //邮箱:daishangju@163.com //博客:forum.eet-cn.com/BLOG_daishangju_334.HTM //电话:13509678051 //Q  Q:1514292225 //----------------------------------------- .chip pdk22c12 //{{PADAUK_CODE_OPTION  .Code_Option LVD  2.4V~2.9V // Maximum performance = 8 MIPS  .Code_Option Security Enable  // Security 7/8 words Enable //}}PADAUK_CODE_OPTION //#define MOB_FLASH_MODE KEY equ pa.5 //定义数码管的IO口,这里是显示三个8 LED_A equ pa.1 LED_B equ pa.0 LED_C equ pa.7 LED_D equ pa.6 LED_E equ pb.7 LED_F equ pb.6 LED_G equ pb.5 LED_DP equ pb.1 LED_COM1 equ pa.2 LED_COM2 equ pa.3 LED_COM3 equ pa.4 LED_A_ON equ set1 LED_A LED_A_OFF equ set0 LED_A LED_B_ON equ set1 LED_B LED_B_OFF equ set0 LED_B LED_C_ON equ set1 LED_C LED_C_OFF equ set0 LED_C LED_D_ON equ set1 LED_D LED_D_OFF equ set0 LED_D LED_E_ON equ set1 LED_E LED_E_OFF equ set0 LED_E LED_F_ON equ set1 LED_F LED_F_OFF equ set0 LED_F LED_G_ON equ set1 LED_G LED_G_OFF equ set0 LED_G LED_DP_ON equ set1 LED_DP LED_DP_OFF equ set0 LED_DP SELECT_LED1 macro  set1 LED_COM2  set1 LED_COM3  set0 LED_COM1  endm SELECT_LED2 macro  set1 LED_COM1  set1 LED_COM3  set0 LED_COM2  endm SELECT_LED3 macro  set1 LED_COM1  set1 LED_COM2  set0 LED_COM3  endm ALL_LED_OFF macro  set1 LED_COM1  set1 LED_COM2  set1 LED_COM3  LED_A_OFF  LED_B_OFF  LED_C_OFF  LED_D_OFF  LED_E_OFF  LED_F_OFF  LED_G_OFF  LED_DP_OFF  endm LED_DELAY macro  delay 250  delay 250  endm word init_timer //用于数码管显示时进行查表转换 word disp_ptr word disp_data word disp_data_temp byte Xms byte ms_cnt byte pb2_voltage //用于数码管显示 byte disp1_buf byte disp2_buf byte disp3_buf byte disp_temp byte led1_buf byte led2_buf byte led3_buf //用于定时中断计时 byte timer_cnt //用于单键按键判断 byte key_cnt bit key_press_flag //定义标志位,用于数码管显示和闪烁控制 bit led_en_flag bit led_flash_flag bit update_disp_flag //应广单片机程序入口,第一条必须为跳转到第一个内核主程序入口地址的指令,第二条为第二个内核,有几个内核就有几条 .romadr 0x000  goto main0  goto main1 //应广单片机中断程序入口地址,所有中断共用同一个入口,需要用户自己判断中断类型 .romadr 0x010  pushaf  if(intrq.T16) //定时中断  {   stt16 init_timer //重设定时器值   if(timer_cnt 9) //得到1000ms间隔   {    timer_cnt ++   }   else   {    timer_cnt = 0    if(led_flash_flag) //数码管闪烁处理    {     led_flash_flag = 0    }    else    {     led_flash_flag = 1    }   }   intrq.T16 = 0  }  elseif(intrq.PB0) //PB0外部中断  {   if(pb.0)   {    //读到PB0状态为高,为上升沿    nop //添加用户自己的代码   }   else   {    //读到PB0状态为低,为下降沿    nop //添加用户自己的代码   }  }  intrq.AD = 0 //强制清除AD中断标志位,防止意外进入AD中断后程序不停响应  intrq.PA0 = 0 //强制清除PA0外部中断标志位,防止意外进入PA0中断后程序不停响应  popaf  reti //---------------------------------------- //input: ms //用该函数可以再4M的频率下得到近似1毫秒的延时,在第一个内核中调用中断会导致延时加长 //---------------------------------------- delayXms:  while(Xms)  {   wdreset //这里需要有清看门狗操作,否则有可能在长延时下导致看门狗溢出复位   ms_cnt = 20   while(ms_cnt)   {    delay 195    ms_cnt--   }   Xms--  }  ret //---------------------------------------- // //对PB2进行AD转换,得到上面的电压 //---------------------------------------- get_pb2_voltage:  //对新的一路AD通道进行AD转换时,第一次转换的结果可能不可靠,这里连续转换两次,取第二次结果  //如果连续对同一通道进行AD转换,可以只转换一次  adcc = 0b10_0010_00 //enable ADC, select pb2   ad_start = 1  wait1 ad_start //等待AD转换结束  a = adcr //放弃第一次转换结果  ad_start = 1  wait1 ad_start  pb2_voltage = adcr //存储第二次转换结果  ret //数码管BCD显示用的转换表,最后的两个0x00可以不要 //数码管的a,b,...,g,dp分别对应bit7,bit6,...,bit0 bcd_tbl: //0~9  dc 0xFC,0x60,0xDA,0xF2,0x66,0xB6,0xBE,0xE0,0xFE,0xF6,0x00,0x00 //---------------------------------------- //以十进制形式显示数据disp_data //只修改显示缓冲区 //---------------------------------------- update_led_disp_buf:  //a,b,...,g,dp -- bit7,bit6,...,bit0  if(!update_disp_flag)  {   disp_data_temp = disp_data //先将需要显示的数据放到临时中间变量中,防止转换时数据更新导致显示出错   //得到数据管第一位LED1的BCD码   disp_temp = 0   while(disp_data_temp = 100) //直接用循环减实现除法   {    disp_data_temp = disp_data_temp - 100    disp_temp ++   }   disp_ptr = bcd_tbl //查表操作   disp_ptr = disp_ptr + disp_temp   ldtabl disp_ptr   mov disp1_buf,a   //得到数据管第二位LED2的BCD码   disp_temp = 0   while(disp_data_temp = 10)   {    disp_data_temp = disp_data_temp - 10    disp_temp ++   }   disp_ptr = bcd_tbl   disp_ptr = disp_ptr + disp_temp   ldtabl disp_ptr   mov disp2_buf,a   //得到数据管第三位LED3的BCD码   disp_temp = disp_data_temp   disp_ptr = bcd_tbl   disp_ptr = disp_ptr + disp_temp   ldtabl disp_ptr   mov disp3_buf,a   update_disp_flag = 1  }  ret //第一个内核程序入口 //----------------FPPA0------------------- main0:  .ADJUST_OTP_IHRCR 8MIPS  // IHRC/2 = 8MIPS, WatchDog Disable, RAM 0,1 temporary be used  sp = 0x30 //设置第一个内核的堆栈地址  //禁止中断和定时器  disgint  inten = 0  mov a,0b000_11_111 //disable timer  mov t16m,a  //小延时后在修改其它系统状态设置  delay 200  clkmd.1 = 1 //打开看门狗,这个设置尽量靠前,以增强可靠性  wdreset //清看门狗  //设置IO口  pac = 0b1101_1111 //PA5设置 IN  paph = 0b0000_0000  pbc = 0b1111_1010 //PB2设为模拟输入不开上拉电阻,PB0设为输入  pbph = 0b0000_0000 //poll high  ALL_LED_OFF  init_timer = 7768 //从7768进行校准为100ms  mov a,0b100_11_111  mov t16m,a  stt16 init_timer  //上电后清需要使用的变量  key_cnt = 0  disp1_buf = 0  disp2_buf = 0  disp3_buf = 0  led1_buf = 0  led2_buf = 0  led3_buf = 0  update_disp_flag = 0  timer_cnt = 0  disp_data = 000  led_en_flag = 1 //数码管进行显示  //将PB2设为模拟输入口进行AD转换  adcdi = 0b0000_0100 //pb2 is analog input  adcc = 0b10_0010_00 //enable ADC, select pb2  adcm = 0b000_0100_0 //system clock/16  //adcm = 0b000_0111_0 //system clock/128    //延时一段时间等系统稳定  Xms = 100  call delayXms  //得到按键初始状态,这样在按键损坏时不会误判按键按下或松开  if(!KEY)  {   key_press_flag = 1  }  else  {   key_press_flag = 0  }  stt16 init_timer  intrq = 0  inten.T16 = 1 //打开定时中断  inten.PB0 = 1 //打开PB0外部中断  engint //允许中断  set1 fppen.1 //打开第二个内核   main0_loop:      wdreset //clear watch dog  //得到PB2的AD转换结果  call get_pb2_voltage  //AD转换完立即更新数码管显示缓冲区  call update_led_disp_buf  if(!KEY) //电压恢复正常只要按键就立刻结束倒计时  {   if(key_cnt 3)   {    key_cnt ++   }   else   {    if(!key_press_flag)    {     key_press_flag = 1 //这里是按键按下     //按键切换数码管是否进行显示     if(led_en_flag)     {      led_en_flag = 0 //数码管不显示     }     else     {      led_en_flag = 1 //数码管显示     }    }   }  }  else  {   if(key_cnt)   {    key_cnt --   }   else   {    if(key_press_flag)    {     key_press_flag = 0 //这里是按键松开    }   }  }  //延时50毫秒,目的是让第一个内核循环的时间大于第二个内核循环时间的两倍  //以保证显示缓冲区再次更新前第二个核已经做出响应,保证显示正确  Xms = 50  call delayXms  goto main0_loop //第二个内核程序入口 //----------------FPPA1------------------- main1:  sp = 0x38 //设置第二个内核的堆栈地址  delay 200 main1_loop:  if(update_disp_flag) //有数据更新时才进行更新  {   led1_buf = disp1_buf   led2_buf = disp2_buf   led3_buf = disp3_buf   update_disp_flag = 0  }  //第二个内核循环扫描显示数码管,这样可以得到没有闪烁的显示效果  if(led_en_flag) //数码管需要显示  {   //下面程序尽量让数码管每个段位的处理时间相同,这样可以保证各个段位亮度一致   //LED1   ALL_LED_OFF   LED_DELAY   SELECT_LED1   if(led1_buf.7)   {    LED_A_ON   }   LED_DELAY   LED_A_OFF   if(led1_buf.6)   {    LED_B_ON   }   LED_DELAY   LED_B_OFF   if(led1_buf.5)   {    LED_C_ON   }   LED_DELAY   LED_C_OFF   if(led1_buf.4)   {    LED_D_ON   }   LED_DELAY   LED_D_OFF   if(led1_buf.3)   {    LED_E_ON   }   LED_DELAY   LED_E_OFF   if(led1_buf.2)   {    LED_F_ON   }   LED_DELAY   LED_F_OFF   if(led1_buf.1)   {    LED_G_ON   }   LED_DELAY   LED_G_OFF   if(led1_buf.0)   {    LED_DP_ON   }   LED_DELAY   LED_DP_OFF   //LED2   ALL_LED_OFF   LED_DELAY   SELECT_LED2   if(led2_buf.7)   {    LED_A_ON   }   LED_DELAY   LED_A_OFF   if(led2_buf.6)   {    LED_B_ON   }   LED_DELAY   LED_B_OFF   if(led2_buf.5)   {    LED_C_ON   }   LED_DELAY   LED_C_OFF   if(led2_buf.4)   {    LED_D_ON   }   LED_DELAY   LED_D_OFF   if(led2_buf.3)   {    LED_E_ON   }   LED_DELAY   LED_E_OFF   if(led2_buf.2)   {    LED_F_ON   }   LED_DELAY   LED_F_OFF   if(led2_buf.1)   {    LED_G_ON   }   LED_DELAY   LED_G_OFF   if(led2_buf.0)   {    LED_DP_ON   }   LED_DELAY   LED_DP_OFF   //LED3   ALL_LED_OFF   LED_DELAY   SELECT_LED3   if(led3_buf.7)   {    LED_A_ON   }   LED_DELAY   LED_A_OFF   if(led3_buf.6)   {    LED_B_ON   }   LED_DELAY   LED_B_OFF   if(led3_buf.5)   {    LED_C_ON   }   LED_DELAY   LED_C_OFF   if(led3_buf.4)   {    LED_D_ON   }   LED_DELAY   LED_D_OFF   if(led3_buf.3)   {    LED_E_ON   }   LED_DELAY   LED_E_OFF   if(led3_buf.2)   {    LED_F_ON   }   LED_DELAY   LED_F_OFF   if(led3_buf.1)   {    LED_G_ON   }   LED_DELAY   LED_G_OFF   if(led3_buf.0)   {    LED_DP_ON   }   LED_DELAY   LED_DP_OFF  }  else //数码管不需要显示  {   ALL_LED_OFF  }  goto main1_loop    已编译,未调试
相关资源