嵌入式硬件开发岗位职责共20篇.docx

上传人:奥沙丽水 文档编号:76961 上传时间:2025-07-10 格式:DOCX 页数:41 大小:47.90KB
下载 相关 举报
嵌入式硬件开发岗位职责共20篇.docx_第1页
第1页 / 共41页
嵌入式硬件开发岗位职责共20篇.docx_第2页
第2页 / 共41页
嵌入式硬件开发岗位职责共20篇.docx_第3页
第3页 / 共41页
嵌入式硬件开发岗位职责共20篇.docx_第4页
第4页 / 共41页
嵌入式硬件开发岗位职责共20篇.docx_第5页
第5页 / 共41页
点击查看更多>>
资源描述

1、嵌入式硬件开发岗位职责(共20篇) 第1篇:软件开发工程师(嵌入式开发)岗位职责1.设计芯片驱动程序,编写软件概要和详细设计说明书。2.编写驱动代码,并进行单元测试和系统测试。3.配合硬件工程师调试硬件电路。4.单板软件需求分析、设计、编码与测试。第2篇:嵌入式研发工程师岗位职责1.领导本部门实施产品开发、研制工作,制订开发计划。2.执行方案,并进行产品鉴定,生产转化,技术规范制定工作。3.积极关注行业发展动态,积累研发素材。4.总结产品研发经验,持续改进产品性能。5.主持产品技术转化和制造技术交底工作。6.为产品的投标提供技术支持。7.为代理商与合作伙伴的产品提供技术支持。8.根据用户或公司

2、其他部门的要求进行设计修改和设计改进。第3篇:嵌入式开发工程师任职要求:1、大学本科及以上学历,2年以上工作经验,计算机电子通讯类专业毕业;2、能够熟练使用POWER PCB或PROTEL或ORCAD等电路设计软件进行PCB设计;3、熟悉电子元器件,能独立设计数字及模拟电路,拥有单片机开发工作经验,懂得RF433无线及红外遥控等相关知识;4、熟练使用C语言,有嵌入式开发工作开发及智能家居防盗报警产品经验者优先。岗位职责:1、新产品项目设计开发工作;2、为相关部门及项目提供技术支持;3、产品售后返修分析,品质不断提升性能改进;4、组织对新研发产品的制样、验证、试产、量产等工作的确认与审核。第4篇

3、嵌入式系统硬件项目设计心得嵌入式系统硬件项目设计心得 硬件, 设计, 解决方案, 处理器, 嵌入式第一点:在从事设计之前,你必须充分了解各方的设计需求,确定合适的解决方案启动一个硬件开发项目,原始的推动力会来自于很多方面,比如市场的需要,基于整个系统架构的需要,应用软件部门的功能实现需要,提高系统某方面能力的需要等等,所以作为一个硬件系统的设计者,要主动的去了解各个方面的需求,并且综合起来,提出最合适的硬件解决方案。比如A项目的原始推动力来自于公司内部的一个高层软件小组,他们在实际当中发现原有的处理器板IP转发能力不能满足要求,从而对于系统的配置和使用都会造成很大的不便,所以他们提出了对新硬

4、件的需求。根据这个目标,硬件方案中就针对性的选用了两个高性能网络处理器,然后还需要深入的和软件设计者交流,以确定内存大小,内部结构,对外接口和调试接口的数量及类型等等细节,比如软件人员喜欢将控制信令通路和数据通路完全分开来,这样在确定内部数据走向的时候要慎重考虑。项目开始之初是需要召开很多的讨论会议的,该尽量邀请所有相关部门来参与,好处有三个,第一可以充分了解大家的需要,以免在系统设计上遗漏重要的功能,第二是可以让各个部门了解这个项目的情况,提早做好时间和人员上协作的准备,第三是从感情方面讲,在设计之初各个部门就参与了进来,这个项目就变成了大家共同的一个心血结晶,会得到大家的呵护和良好合作,对

5、完成工作是很有帮助的。第二点、发挥于“拿来主义”之上,拿捏好原理图设计中要注意的问题原理图设计中要有“拿来主义”,现在的芯片厂家一般都可以提供参考设计的原理图,所以要尽量的借助这些资源,在充分理解参考设计的基础上,做一些自己的发挥。当主要的芯片选定以后,最关键的外围设计包括了电源,时钟和芯片间的互连。电源是保证硬件系统正常工作的基础,设计中要详细的分析:系统能够提供的电源输入;单板需要产生的电源输出;各个电源需要提供的电流大小;电源电路效率;各个电源能够允许的波动范围;整个电源系统需要的上电顺序等等。比如A项目中的网络处理器需要1.25V作为核心电压,要求精度在5%- 3%之间,电流需要12A

6、左右,根据这些要求,设计中采用5V的电源输入,利用Linear的开关电源控制器和IR的MOSFET搭建了合适的电源供应电路,精度要求决定了输出电容的ESR选择,并且为防止电流过大造成的电压跌落,加入了远端反馈的功能。时钟电路的实现要考虑到目标电路的抖动等要求,A项目中用到了GE的PHY器件,刚开始的时候使用一个内部带锁相环的零延时时钟分配芯片提供100MHz时钟,结果GE链路上出现了丢包,后来换成简单的时钟Buffer器件就解决了丢包问题,分析起来就是内部的锁相环引入了抖动。芯片之间的互连要保证数据的无误传输,在这方面,高速的差分信号线具有速率高,好布线,信号完整性好等特点,A项目中的多芯片间

7、互连均采用了高速差分信号线,在调试和测试中没有出现问题。第三点、明确PCB设计中的问题,设计完善准确的PCB,助你“决胜千里”PCB设计中要做到目的明确,对于重要的信号线要非常严格的要求布线的长度和处理地环路,而对于低速和不重要的信号线就可以放在稍低的布线优先级上。重要的部分包括:电源的分割;内存的时钟线,控制线和数据线的长度要求;高速差分线的布线等等。A项目中使用内存芯片实现了1G大小的DDR memory,针对这个部分的布线是非常关键的,要考虑到控制线和地址线的拓扑分布,数据线和时钟线的长度差别控制等方面,在实现的过程中,根据芯片的数据手册和实际的工作频率可以得出具体的布线规则要求,比如同

8、一组内的数据线长度相差不能超过多少个mil,每个通路之间的长度相差不能超过多少个mil等等。当这些要求确定后就可以明确要求PCB设计人员来实现了,如果设计中所有的重要布线要求都明确了,可以转换成整体的布线约束,利用CAD中的自动布线工具软件来实现PCB设计,这也是在高速PCB设计中的一个发展趋势。第四点、千万不要忽视检查和调试,免得一失足.当准备调试一块板的时候,一定要先认真的做好目视检查,检查在焊接的过程中是否有可见的短路和管脚搭锡等故障,检查是否有元器件型号放置错误,第一脚放置错误,漏装配等问题,然后用万用表测量各个电源到地的电阻,以检查是否有短路,这个好_惯可以避免贸然上电后损坏单板。调

9、试的过程中要有平和的心态,遇见问题是非常正常的,要做的就是多做比较和分析,逐步的排除可能的原因,要坚信“凡事都是有办法解决的”和“问题出现一定有它的原因”,这样最后一定能调试成功。总结的话(发自肺腑的)现在从技术的角度来说,每个设计最终都可以做出来,但是一个项目的成功与否,不仅仅取决于技术上的实现,还与完成的时间,产品的质量,团队的配合密切相关,所以良好的团队协作,透明坦诚的项目沟通,精细周密的研发安排,充裕的物料和人员安排,这样才能保证一个项目的成功。一个好的硬件工程师实际上就是一个项目经理,他/她需要从外界交流获取对自己设计的需求,然后汇总,分析成具体的硬件实现。还要跟众多的芯片和方案供应

10、商联系,从中挑选出合适的方案,当原理图完成后,他/她要组织同事来进行配合评审和检查,还要和CAD工程师一起工作来完成PCB的设计。与此同时,还要准备好BOM清单,开始采购和准备物料,联系加工厂家完成板的贴装。在调试的过程中他/她要组织好软件工程师来一起攻关调试,配合测试工程师一起解决测试中发现的问题,等到产品推出到现场,如果出现问题,还需要做到及时的支持。所以做一个硬件设计人员要锻炼出良好的沟通能力,面对压力的调节能力,同一时间处理多个事务的协调和决断能力和良好平和的心态等等。细心和认真永远是我和我的老师,老师的老师告诫别人,同时告诫自己的最后一句话!因为硬件设计上的一个小疏忽往往就会造成非常

11、大的经济损失,比如以前碰到一块板在PCB设计完备出制造文件的时候误操作造成了电源层和地层连在了一起,PCB板制造完毕后又没有检查直接上生产线贴装,到测试的时候才发现短路问题,但是元器件已经都焊接到板上了,结果造成了几十万的损失。至今心有余悸!最后还是那句 细心和认真永远是正确的!所以细心和认真的检查,负责任的测试,不懈的学_和积累,才能使得一个硬件设计人员持续不断的进步,而后术业有所小成。看着有些罗嗦,说实话写文章对我来说的确有难度,哈哈第5篇:硬件工程师面试之嵌入式篇硬件工程师面试之嵌入式篇1、请用方框图描述一个你熟悉的实用数字信号处理系统,并做简要的分析;如果没有,也可以自己设计一个简单的

12、数字信号处理系统,并描述其功能及用途。(仕兰微面试题目)2、数字滤波器的分类和结构特点。(仕兰微面试题目)3、IIR,FIR滤波器的异同。(新太硬件面题)4、拉氏变换与Z变换公式等类似东西,随便翻翻书把如.h(n)=-a*h(n-1)+b*(n)a.求h(n)的z变换;b.问该系统是否为稳定系统;c.写出FIR数字滤波器的差分方程;(未知)5、DSP和通用处理器在结构上有什么不同,请简要画出你熟悉的一种DSP结构图。(信威dsp软件面试题)6、说说定点DSP和浮点DSP的定义(或者说出他们的区别)(信威dsp软件面试题)7、说说你对循环寻址和位反序寻址的理解.(信威dsp软件面试题)8、请写出

13、的二进制补码,和二进制偏置码。用Q15表示出0.5和0.5.(信威dsp软件面试题)9、DSP的结构(哈佛结构);(未知)10、嵌入式处理器类型(如),操作系统种类(Vxworks,ucos,winCE,linux),操作系统方面偏CS方向了,在CS篇里面讲了;(未知)11、有一个LDO将用于对供电,需要你对他进行评估,你将如何设计你的测试项目?12、某程序在一个嵌入式系统(200M CPU,50M SDRAM)中已经最优化了,换到零一个系统(300M CPU,50M SDRAM)中是否还需要优化? (Intel)13、请简要描述HUFFMAN编码的基本原理及其基本的实现方法。(仕兰微面试题目

14、14、说出OSI七层网络协议中的四层(任意四层)。(仕兰微面试题目)15、A)(仕兰微面试题目)i ncludevoid testf(int*p)*p+=1;main()int *n,m2;n=m;m0=1;m1=8;testf(n);printf(Data value is %d ,*n);-B)i ncludevoid testf(int*p)*p+=1;main()int *n,m2;n=m;m0=1;m1=8;testf(printf(Data value is %d,*n);下面的结果是程序A还是程序B的?Data value is 8那么另一段程序的结果是什么?16、那种排序方法

15、最快 (Intel)35、What is the state of a proce if a resource is notavailable? (Intel)36、三个 float a,b,c;问值(a+b)+c=(b+a)+c, (a+b)+c=(a+c)+b。(Intel)37、把一个链表反向填空。(lucent)38、x4+a*x3+x2+c*x+d 最少需要做几次乘法?(Dephi)第6篇:嵌入式软件开发工程师嵌入式软件开发工程师:将软硬件完美结合嵌入式软件开发工程师职业概述嵌入式软件开发工程师是利用嵌入式技术设计、开发、维护、管理符合功能、性能要求的软件产品的工作人员。他们为改变人

16、们的生活创造了种种便利条件,他们开发的各种软件正在不同的嵌入式系统中为人们的生活和工作“不辞辛苦”地运行着。嵌入式软件开发工程师职业大揭秘揭秘一工作内容1.从事数据产品嵌入式(底层)软件开发和设计工作;2.进行数据产品相关软件子系统的方案设计;3.进行数据产品相关的技术交流、标准及专利相关工作;4.进行嵌入式软件系统的需求分析和模块设计;5.对客户的软件技术进行支持。揭秘二职业要求在专业方向和学历水平上,嵌入式软件开发工程师应具有本科及以上学历,计算机、电子、通信及相关专业毕业。而具体的实践经验和工作能力方面,精通C/C+语言,有扎实的编程基础和一定的编程经验;熟悉软件项目的一般开发流程;熟悉

17、ARM或其他微处理器架构;除此之外,良好的沟通和团队协作能力也是必不可少的。揭秘三职业前景嵌入式系统无疑是当前最热门最有发展前途的IT应用领域之一。嵌入式系统产品正不断渗透进各个行业,作为包含在这些硬件产品中的特殊软件形态,其产业增幅不断加大,而且在整个软件产业中所占的比重日趋提高。据预测,在未来的几年内,嵌入式系统的发展将会为几乎所有的电子设备注入新的活力,加上Internet的迅速发展和廉价微处理器的出现,嵌入式系统将在我们的日常生活里形成一个更大的应用领域。家电的智能化也为嵌入式开辟了广阔的空间,像我们平常常见的手机、PDA、电子字典、可视电话、VCD/DVD/MP3Player、数字相

18、机(DC)、数字摄像机(DV)、U-Disk、机顶盒(SetTopBox)、高清电视(HDTV)、游戏机、智能玩具、交换机、路由器、数控设备或仪表、汽车电子、家电控制系统、医疗仪器、航天航空设备等都可以应用在嵌入式系统中。揭秘四薪酬水平手机和3G成为业内焦点后,在就业市场上嵌入式软件工程师开始紧俏,其工资水平也相应攀高,比其他IT业界同行大约高出50%。初入门的开发人员平均月薪一般都在5000元左右,有3年以上经验者年薪大都在10万元以上,有10年工作经验的高级嵌入式工程师年薪可达30万元左右。在一些大城市,比如_,一个成熟的嵌入式软件工程师平均月薪在800010000元之间。嵌入式软件开发工

19、程师职业发展“路在何方”嵌入式学院负责人、_华清远见嵌入式培训中心总经理季久峰认为,从事嵌入式工作有两大优势:一是工作强度相对较低。做嵌入式系统的公司,都有自己的产品计划,按自己的节奏行事,所开发的产品通常是通用的,不会因客户的不同而修改,一个产品型号开发完了,往往还有较长一段空闲时间进行充电和休整;二是职业发展相对顺利,从事嵌入式软件的人,所涉及的专业技术范围终究有限,经验的培养,指日可待。以上都是针对求职工作而言的,若对于个人整体发展来说,如果想创业,做自己的产品,那么嵌入式就是一个不错的主意,嵌入式软件不会像应用软件那样容易被盗版,而如果开发出专利产品,年薪将不止10万元。积累丰富开发经

20、验的嵌入式软件开发工程师可以向嵌入式系统开发工程师发展,进而晋升为产品研发经理或IT项目经理。对测试理论和方法有一定了解的嵌入式软件开发工程师还可以转做嵌入式系统测试工程师,最终也可发展为IT项目经理。嵌入式软件开发工程师的发展路径电子技术研发工程师:电子新技术的开拓者第7篇:嵌入式软件开发工程师嵌入式软件开发工程师岗位职责岗位职责:1、开发维护光网络产品嵌入式软件;2、按照研发流程要求,完成软件的详细设计,代码实现,单元测试,集成测试;3、对开发的软件质量和进度负责。福利待遇:1、五险一金(养老保险、医疗保险、失业险、工伤险、生育险,住房公积金);2、年终奖及过节费;3、提供各种培训机会;4

21、公司设有员工宿舍、食堂免费三餐及图书馆;5、定期为员工安排健康体检;6、组织各种大型集体活动增加团队凝聚力(如:旅游、运动会、年度联欢、体育比赛等)。岗位要求任职要求:1、通信、计算机、电子、软件工程等相关专业本科以上学历;2、熟练掌握RTOS(WINCE、Linux等)之上的嵌入式软件开发;3、熟悉数据通信原理,熟悉VLAN,STP等相关二层协议;4、从事过以太网、光通讯产品开发经验者优先,5、有通信、计算机网络协议开发经验者优先(包括路由器、交换机、IP语音网关等设备的开发经验);6、够熟悉使用51系列、ARM系列微处理器,熟悉TCPIP、SNMP协议技术者优先;7、有自组网mesh设备

22、开发经验优先考虑;8、具有强烈的责任心及团队合作精神,具有较强的沟通及协调能力。第8篇:嵌入式开发学_心得个人学_嵌入式心得体会就我个人而言,从最开始对嵌入式一窍不通到现在越学越感兴趣,当然相应在嵌入式方面的提高也是很明显的。学_潜入式越来越成为我学_生活的一部分,现在把我的学_过程与大家一起分享,希望那些和我一样对嵌入式想学而又迷茫,不知从哪入手的同学朋友有所帮助。一、语言基础嵌入式开发很大一部分靠C语言,尤其在底层驱动等用的很多,当然在应用开发还用到诸如C+等其他语言,但我想对于一个初学者有C基础就足够了,等到学到一定程度再去扩展。所以,C 基础是学嵌入式的前提。二、单片机等知识的储备我觉

23、得单片机、嵌入式等这一类都有很大的相似性,知识功能不一样,但工作的原理、控制原理都和大的相似。就我个人而言,能比较快的进入嵌入式的学_与提高,很大一部分依赖于对单片机的原理有较深入的学_和理解,单片机比较简单,学_起来相对比较容易,所以我建议哪些想学潜入式的同学,可以和我一样从单片机入手,那样不仅可以理解这些微处理器、微控制器的操作与控制原理,当然还可以顺便学学汇编语言,这对后面的嵌入式学_都有很大的帮助。三、接受培训暑假,我在学院的组织下参加过ICC的嵌入式培训,虽然接触的都是皮毛,但是对我进入嵌入式的学_起了一个很好的引导作用。所以,如果有条件的可以去报名正规的专门的培训班,这样如果遇到问

24、题也可以比较容易的得到老师或专业人士的指导,提高学_效率。四、买开发板自己动手做个人觉得这是最重要的一种做法。这东西没自己亲手做,程序没亲手写,没有进行调试等,都是很难学到东西,因为很多东西感觉看的都懂,其实真正做起来就什么都不会了。因此买块板来自己做,这样才能真正将所学的应用到实际中去。而且这样做映像很深,死记硬背原理及规则不但不可行还会拖垮你的学_兴趣,自然学不下。总之,我觉得,基础知识很重要,但是动手做更重要!我能说的就这些了,能力有限,不好的地方请指教!第9篇:嵌入式Linux开发流程嵌入式Linux开发流程嵌入式 linux开发,根据应用需求的不同有不同的配置开发方法,但是一般都经过

25、以下过程:建立开发环境。操作系统一般 REDHATLINUX,版本 7 到9 都可以,选择定制安装或全部安装,通过网络下载相应的 GCC 交叉编译器进行安装(比如 arm-linux-gcc、arm-uclibc-gcc),或者安装产品厂家提供的交叉编译器。配置开发主机。配置 MINICOM,一般参数为115200,数据位 8位,停止位 1,无奇偶校验,软硬件控制流设为无。在 WINDOWS 下的超级终端的配置也是这样。MINICOM软件的作用是作为调试嵌入式开发板信息输出的监视器和键盘输入的工具;配置网络,主要是配置 NFS 网络文件系统,需要关闭防火墙,简化嵌入式网络调试环境设置过程。建立

26、引导装载程序BOOTLOADER,从网络上下载一些公开源代码的BOOTLOADER,如 U-BOOT、BLOB、VIVI、LILO、ARM-BOOT、RED-BOOT等,根据自己具体芯片进行移植修改。有些芯片没有内置引导装载程序,比如三星的 ARM7、ARM9 系列芯片,这样就需要编写烧写开发板上 flash 的烧写程序,网络上有免费下载的 WINDOWS 下通过JTAG并口简易仿真器烧写 ARM 外围 flash 芯片的程序。也有 LINUX 下公开源代码的J-FLASH 程序。如果不能烧写自己的开发板,就需要根据自己的具体电路进行源代码修改。这是让系统可以正常运行的第一步。如果你购买了厂商

27、提供的仿真器,当然比较容易烧写flash了,但是其中的核心技术是无法了解的。这对于需要迅速开发应用的人来说可以极大地提高开发速度。下载别人已经移植好的 LINUX 操作系统,如 UCLINUX、ARM-LINUX、PPC-LINUX等,如果有专门针对你所使用的CPU移植好的 LINUX 操作系统那是再好不过,下载后再添加自己的特定硬件的驱动程序,进行调试修改,对于带 MMU的 CPU可以使用模块方式调试驱动,对于 UCLINUX 这样的系统好像只能编译进内核进行调试。建立根文件系统,从下载使用 BUSYBOX 软件进行功能裁减,产生一个最基本的根文件系统,再根据自己的应用需要添加其他的程序。默

28、认的启动脚本一般都不会符合应用的需要,所以就要修改根文件系统中的启动脚本,它的存放位置位于 /etc目录下,包括:/etc/init.d/rc.S、/etc/profile、/etc/.profile 等,自动挂装文件系统的配置文件/etc/fstab,具体情况会随系统不同而不同。根文件系统在嵌入式系统中一般设为只读,需要使用 mkcramfs、genromfs 等工具产生烧写映象文件。建立应用程序的 flash 磁盘分区,一般使用JFFS2 或 YAFFS 文件系统,这需要在内核中提供这些文件系统的驱动,有的系统使用一个线性 flash(NOR 型)512K32M,有的系统使用非线性 fla

29、sh(NAND型)8512M,有的两个同时使用,需要根据应用规划 flash的分区方案。开发应用程序,可以下载到根文件系统中,也可以放入 YAFFS、JFFS2 文件系统中,有的应用程序不使用根文件系统,而是直接将应用程序和内核设计在一起,这有点类似于UCOS-II 的方式。烧写内核、根文件系统、应用程序。发布产品。第10篇:嵌入式开发工程师简历姓名:身高:性别:学历:籍贯:专业:电子信息工程联系电话:E-mail:l 嵌入式开发工程师或相关工作,对LINUX驱动开发极感兴趣l linux: 驱动程序: #include #include #include /file_operatios/cl

30、a_create/device_create #include #include /kmalloc #include /ioremap #include #includeled.hstruct s5pv210_device *s5pv210_dev;volatile unsigned long *gpc0con = NULL; volatile unsigned long *gpc0dat = NULL;staticintled_open(structinode *inode, struct file *file) printk(KERN_INFO%s()-%dn, _func_, _LINE

31、);/*初始化GPC0_3,GPC0_4引脚功能为输出功能*/ *gpc0con return 0; /write(fd, unsignedintval; printk(KERN_INFO%s()-%dn, _func_, _LINE_);/*获取用户空间数据*/ ret = copy_from_user( if(ret) printk(KERN_ERRcopy data from user failed!n); return -ENODATA; printk(KERN_INFOcopy data from user: val=%dn,val); if(val) /点亮LED *gpc0da

32、t |= (0x1staticstructfile_operationsled_fops=;staticint _initled_init(void) int ret; printk(KERN_INFO%s()-%dn, _func_, _LINE_); s5pv210_dev = kmalloc(sizeof(struct s5pv210_device),GFP_KERNEL); if(s5pv210_dev=NULL) printk(KERN_INFOno memory malloc for s5pv210_dev!n); return -ENOMEM; /*注册*/ led_major

33、 register_chrdev(0,led, if(led_major/*创建设备文件*/ s5pv210_dev-led_cla = cla_create(THIS_MODULE,led_cla); if (IS_ERR(s5pv210_dev-led_cla) printk(KERN_ERR cla_create() failed for led_clan); ret = -EINVAL; goto err2; s5pv210_dev-led_device = device_create(s5pv210_dev-led_cla,NULL,MKDEV(led_major,0),NULL,

34、led); if (IS_ERR(s5pv210_dev-led_device) printk(KERN_ERR device_create failed for led_devicen); ret = -ENODEV; goto err3; /*将物理地址映射为虚拟地址*/ gpc0con = ioremap(S5PV210_PA_GPC0CON,8); if(gpc0con=NULL) printk(KERN_INFOioremap failed!n); ret = -ENOMEM; goto err4; gpc0dat = gpc0con + 1;return 0; err4: devi

35、ce_destroy(s5pv210_dev-led_cla,MKDEV(led_major,0); err3: cla_destroy(s5pv210_dev-led_cla); err2: unregister_chrdev(led_major,led); err1: kfree(s5pv210_dev); return ret; static void _exit led_exit(void) printk(KERN_INFO%s()-%dn, _func_, _LINE_); unregister_chrdev(led_major,led); device_destroy(s5pv21

36、0_dev-led_cla,MKDEV(led_major,0); cla_destroy(s5pv210_dev-led_cla); iounmap(gpc0con); kfree(s5pv210_dev); module_init(led_init); module_exit(led_exit); MODULE_LICENSE(GPL);应用程序:#include #include #include #include #include #include #include #include /* * else val = 0; if(write(fd, exit(1); close(fd);

37、 return 0; android:不知道大家清不清楚android与linux之间的关系。android是基于linux内核的,linux操作系统的5大组件:驱动,内存管理,文件系统,进程管理,网络套接字。android是基于linux kernel上的,大家平时只看到了app。app是java语言的,其实每运行一个java应用程序,实际上是fork一个linux应用程序。android四大组件,activity,service,Broadcast Receiver,Content Provider。这是android的主要框架,java应用开发是基于这开发的。android平台是基于li

38、nux内核的。在linux运行之后才建立起java世界。直接上代码:上面的linux的驱动在android是一样的,适用于android。驱动ok之后是应用层了,也就是应用程序。我下面就是最直接的应用,不包含任何android框架性的东西,大家可以直接看到,应用app-jni-linux驱动这三层调用关系。下面是jni代码是c+; #define LOG_TAG led-jni-log #include#include jni.h#include #include #include #include #include #include #includestaticintfd = -1; jin

39、topen_led(JNIEnv *env, jobjectthiz) LOGD($%sn, _FUNCTION_); fd = open(/dev/led1, O_RDWR); if(fdjintled_on(JNIEnv *env, jobjectthiz) LOGD($%sn, _FUNCTION_); intval = 1; jint ret = 0; ret = write(fd, if(ret != 4) LOGE(write : %sn, strerror(errno); return -1; return 0; jintled_off(JNIEnv *env, jobjectt

40、hiz) LOGD($%sn, _FUNCTION_); intval = 0; jint ret = 0; ret = write(fd, if(ret != 4) LOGE(write : %sn, strerror(errno); return -1; return 0; jintclose_led(JNIEnv *env, jobjectthiz) LOGD($%sn, _FUNCTION_); if(fd 0) close(fd); return 0; staticJNINativeMethodmyMethods = openDev, ()I, (void *)open_led, o

41、nDev, ()I, (void *)led_on, offDev, ()I, (void *)led_off, closeDev, ()I, (void *)close_led, ; jintJNI_OnLoad(JavaVM * vm, void * reserved) JNIEnv *env = NULL; jint ret = -1; ret = vm-GetEnv(void *) if(ret jclamyclz = env-FindCla(com/ledtest/LedActivity); if(myclz = NULL) LOGE(FindCla errorn); return

42、1; ret = env-RegisterNatives(myclz, myMethods, sizeof(myMethods)/sizeof(myMethods0); if(ret return JNI_VERSION_1_4; 然后是java app: packagecom.ledtest;importandroid.os.Bundle; importandroid.app.Activity; importandroid.util.Log; importandroid.view.Menu; importandroid.view.View; importandroid.view.View.

43、OnClickListener; importandroid.widget.Button;public cla LedActivity extends Activity final String TAG = LedActivity; public Button btn_on = null; public Button btn_off = null;public void init() btn_on = (Button) this.findViewById(R.id.btn1); btn_on.setOnClickListener(clickListener);btn_off = (Button

44、) this.findViewById(R.id.btn2); btn_off.setOnClickListener(clickListener); OnClickListenerclickListener = new OnClickListener() public void onClick(View v) switch (v.getId() case R.id.btn1: Log.d(TAG, led on in app); onDev(); break; case R.id.btn2: Log.d(TAG, led off in app); offDev(); break; defaul

45、t: break; ;Override protected void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState); setContentView(R.layout.activity_led); init(); openDev(); Override publicbooleanonCreateOptionsMenu(Menu menu) / Inflate the menu; this adds items to the action bar if it is present.getMenuInfl

46、ater().inflate(R.menu.activity_led, menu); return true; Override protected void onDestroy() / TODO Auto-generated method stub super.onDestroy();closeDev(); static System.loadLibrary(led_jni); public native intopenDev();public native intonDev();public native intoffDev();public native intcloseDev(); 框

47、架是这样的:最上层是java ,点开app,点击一下一个button,点亮了LED,调用onDev();onDev调用c+的led_on,然后led_on是调用驱动的led_write,明白不?这样说吧:linux驱动是最下层的,驱动嘛。然后是c+层,c+包装一下是给java调用的,然后到java层。下面是android比价经典的一张框架图。linux在最下面。lib 是动态库。然后是JNI,然后是Framework(android框架),然后是大家喜闻乐见的app。linux在最下面。lib 是动态库。然后是JNI,然后是Framework(android框架),然后是大家喜闻乐见的app。第12篇:嵌入式开发学_心得嵌入式开发学_心得嵌入式开发学_心得就我个人而言,从最开始对嵌

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > IT计算机 > 嵌入式开发

宁ICP备18001539号-1