当前位置: 首页 > 其他范文 > 岗位职责

嵌入式硬件开发岗位职责(共20篇)

作者:承诺N鱼 | 发布时间:2020-05-18 09:26:18 收藏本文 下载本文
第1篇:软件开发工程师(嵌入式开发)岗位职责1.设计芯片驱动程序,编写软件概要和详细设计说明书。2.编写驱动代码,并进行单元测试和系统测试。3.配合硬件工程师调试硬件电路。4.单板软件需求分析、设计、编码与测试。

第2篇:嵌入式研发工程师岗位职责1.领导本部门实施产品开发、研制工作,制订开发计划。2.执行方案,并进行产品鉴定,生产转化,技术规范制定工作。3.积极关注行业发展动态,积累研发素材。4.总结产品研发经验,持续改进产品性能。5.主持产品技术转化和制造技术交底工作。6.为产品的投标提供技术支持。7.为代理商与合作伙伴的产品提供技术支持。8.根据用户或公司其他部门的要求进行设计修改和设计改进。

第3篇:嵌入式开发工程师

任职要求:

1、大学本科及以上学历,2年以上工作经验,计算机电子通讯类专业毕业;

2、能够熟练使用POWER PCB或PROTEL或ORCAD等电路设计软件进行PCB设计;

3、熟悉电子元器件,能独立设计数字及模拟电路,拥有单片机开发工作经验,懂得RF433无线及红外遥控等相关知识;

4、熟练使用C语言,有嵌入式开发工作开发及智能家居防盗报警产品经验者优先。

岗位职责:

1、新产品项目设计开发工作;

2、为相关部门及项目提供技术支持;

3、产品售后返修分析,品质不断提升性能改进;

4、组织对新研发产品的制样、验证、试产、量产等工作的确认与审核。

第4篇:嵌入式系统硬件项目设计心得

嵌入式系统硬件项目设计心得【转】 硬件, 设计, 解决方案, 处理器, 嵌入式

第一点:在从事设计之前,你必须充分了解各方的设计需求,确定合适的解决方案

启动一个硬件开发项目,原始的推动力会来自于很多方面,比如市场的需要,基于整个系统架构的需要,应用软件部门的功能实现需要,提高系统某方面能力的需要等等,所以作为一个硬件系统的设计者,要主动的去了解各个方面的需求,并且综合起来,提出最合适的硬件解决方案。比如A项目的原始推动力来自于公司内部的一个高层软件小组,他们在实际当中发现原有的处理器板IP转发能力不能满足要求,从而对于系统的配置和使用都会造成很大的不便,所以他们提出了对新硬件的需求。根据这个目标,硬件方案中就针对性的选用了两个高性能网络处理器,然后还需要深入的和软件设计者交流,以确定内存大小,内部结构,对外接口和调试接口的数量及类型等等细节,比如软件人员喜欢将控制信令通路和数据通路完

全分开来,这样在确定内部数据走向的时候要慎重考虑。项目开始之初是需要召开很多的讨论会议的,该尽量邀请所有相关部门来参与,好处有三个,第一可以充分了解大家的需要,以免在系统设计上遗漏重要的功能,第二是可以让各个部门了解这个项目的情况,提早做好时间和人员上协作的准备,第三是从感情方面讲,在设计之初各个部门就参与了进来,这个项目就变成了大家共同的一个心血结晶,会得到大家的呵护和良好合作,对完成工作是很有帮助的。

第二点、发挥于“拿来主义”之上,拿捏好原理图设计中要注意的问题

原理图设计中要有“拿来主义”,现在的芯片厂家一般都可以提供参考设计的原理图,所以要尽量的借助这些资源,在充分理解参考设计的基础上,做一些自己的发挥。当主要的芯片选定以后,最关键的外围设计包括了电源,时钟和芯片间的互连。

电源是保证硬件系统正常工作的基础,设计中要详细的分析:系统能够提供的电源输入;单板需要产生的电源输出;各个电源需要提供的电流大小;电源电路效率;各个电源能够允许的波动范围;整个电源系统需要的上电顺序等等。比如A项目中的网络处理器需要1.25V作为核心电压,要求精度在+5%--3%之间,电流需要12A左右,根据这些要求,设计中采用5V的电源输入,利用Linear的开关电源控制器和IR的MOSFET搭建了合适的电源供应电路,精度要求决定了输出电容的ESR选择,并且为防止电流过大造成的电压跌落,加入了远端反馈的功能。

时钟电路的实现要考虑到目标电路的抖动等要求,A项目中用到了GE的PHY器件,刚开始的时候使用一个内部带锁相环的零延时时钟分配芯片提供100MHz时钟,结果GE链路上出现了丢包,后来换成简单的时钟Buffer器件就解决了丢包问题,分析起来就是内部的锁相环引入了抖动。

芯片之间的互连要保证数据的无误传输,在这方面,高速的差分信号线具有速率高,好布线,信号完整性好等特点,A项目中的多芯片间互连均采用了高速差分信号线,在调试和测试中没有出现问题。

第三点、明确PCB设计中的问题,设计完善准确的PCB,助你“决胜千里”

PCB设计中要做到目的明确,对于重要的信号线要非常严格的要求布线的长度和处理地环路,而对于低速和不重要的信号线就可以放在稍低的布线优先级上。重要的部分包括:电源的分割;内存的时钟线,控制线和数据线的长度要求;高速差分线的布线等等。

A项目中使用内存芯片实现了1G大小的DDR memory,针对这个部分的布线是非常关键的,要考虑到控制线和地址线的拓扑分布,数据线和时钟线的长度差别控制等方面,在实现的过程中,根据芯片的数据手册和实际的工作频率可以得出具体的布线规则要求,比如同一组内的数据线长度相差不能超过多少个mil,每个通路之间的长度相差不能超过多少个mil等等。当这些要求确定后就可以明确要求PCB设计人员来实现了,如果设计中所有的重要布线要求都明确了,可以转换成整体的布线约束,利用CAD中的自动布线工具软件来实现PCB设计,这也是在高速PCB设计中的一个发展趋势。

第四点、千万不要忽视检查和调试,免得一失足.....当准备调试一块板的时候,一定要先认真的做好目视检查,检查在焊接的过程中是否有可见的短路和管脚搭锡等故障,检查是否有元器件型号放置错误,第一脚放置错误,漏装配等问题,然后用万用表测量各个电源到地的电阻,以检查是否有短路,这个好习惯可以避免贸然上电后损坏单板。调试的过程中要有平和的心态,遇见问题是非常正常的,要做的就是多做比较和分析,逐步的排除可能的原因,要坚信“凡事都是有办法解决的”和“问题出现一定有它的原因”,这样最后一定能调试成功。

总结的话(发自肺腑的)

现在从技术的角度来说,每个设计最终都可以做出来,但是一个项目的成功与否,不仅仅取决于技术上的实现,还与完成的时间,产品的质量,团队的配合密切相关,所以良好的团队协作,透明坦诚的项目沟通,精细周密的研发安排,充裕的物料和人员安排,这样才能保证一个项目的成功。

一个好的硬件工程师实际上就是一个项目经理,他/她需要从外界交流获取对自己设计的需求,然后汇总,分析成具体的硬件实现。还要跟众多的芯片和方案供应商联系,从中挑选出合适的方案,当原理图完成后,他/她要组织同事来进行配合评审和检查,还要和CAD工程师一起工作来完成PCB的设计。与此同时,还要准备好BOM清单,开始采购和准备物料,联系加工厂家完成板的贴装。在调试的过程中他/她要组织好软件工程师来一起攻关调试,配合测试工程师一起解决测试中发现的问题,等到产品推出到现场,如果出现问题,还需要做到及时的支持。所以做一个硬件设计人员要锻炼出良好的沟通能力,面对压力的调节能力,同一时间处理多个事务的协调和决断能力和良好平和的心态等等。

细心和认真永远是我和我的老师,老师的老师告诫别人,同时告诫自己的最后一句话!

因为硬件设计上的一个小疏忽往往就会造成非常大的经济损失,比如以前碰到一块板在PCB设计完备出制造文件的时候误操作造成了电源层和地层连在了一起,PCB板制造完毕后又没有检查直接上生产线贴装,到测试的时候才发现短路问题,但是元器件已经都焊接到板上了,结果造成了几十万的损失。至今心有余悸!

最后还是那句 细心和认真永远是正确的!所以细心和认真的检查,负责任的测试,不懈的学习和积累,才能使得一个硬件设计人员持续不断的进步,而后术业有所小成。

看着有些罗嗦,说实话写文章对我来说的确有难度,哈哈

第5篇:硬件工程师面试之嵌入式篇

硬件工程师面试之嵌入式篇

1、请用方框图描述一个你熟悉的实用数字信号处理系统,并做简要的分析;如果没有,也可以自己设计一个简单的数字信号处理系统,并描述其功能及用途。(仕兰微面试题目)

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、请写出【-8,7】的二进制补码,和二进制偏置码。用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、说出OSI七层网络协议中的四层(任意四层)。(仕兰微面试题目)

15、A)(仕兰微面试题目)

#i nclude

void testf(int*p)

{

*p+=1;

}

main()

{

int *n,m[2];

n=m;

m[0]=1;

m[1]=8;

testf(n);

printf("Data value is %d ",*n);

}

------------------------------

B)

#i nclude

void testf(int**p)

{

*p+=1;}

main(){int *n,m[2];

n=m;m[0]=1;m[1]=8;

testf(&n);printf(Data value is %d",*n);

}

下面的结果是程序A还是程序B的?

Data value is 8

那么另一段程序的结果是什么?

16、那种排序方法最快? (华为面试题)

17、写出两个排序算法,问哪个好?(威盛)

18、编一个简单的求n!的程序 。(Infineon笔试试题)

19、用一种编程语言写n!的算法。(威盛VIA 2003.11.06 上海笔试试题)

20、用C语言写一个递归算法求N!;(华为面试题)

21、给一个C的函数,关于字符串和数组,找出错误;(华为面试题)

22、防火墙是怎么实现的? (华为面试题)

23、你对哪方面编程熟悉?(华为面试题)

24、冒泡排序的原理。(新太硬件面题)

25、操作系统的功能。(新太硬件面题)

26、学过的计算机语言及开发的系统。(新太硬件面题)

27、一个农夫发现围成正方形的围栏比长方形的节省4个木桩但是面积一样.羊的数目和正 方形围栏的桩子的个数一样但是小于36,问有多少羊?(威盛)

28、C语言实现统计某个cell在某.v文件调用的次数(这个题目真bt)(威盛VIA2003.11.06 上海笔试试题)

29、用C语言写一段控制中马达振子的驱动程序。(威胜)

30、用perl或TCL/Tk实现一段字符串识别和比较的程序。(未知)

31、给出一个堆栈的结构,求中断后显示结果,主要是考堆栈压入返回地址存放在低端地 址还是高端。(未知)

32、一些DOS命令,如显示文件,拷贝,删除。(未知)

33、设计一个类,使得该类任何形式的派生类无论怎么定义和实现,都无法产生任何对象 实例。(IBM)

34、What is pre-emption?(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、x^4+a*x^3+x^2+c*x+d 最少需要做几次乘法?(Dephi)

第6篇:嵌入式软件开发工程师

嵌入式软件开发工程师:将软硬件完美结合嵌入式软件开发工程师——职业概述

嵌入式软件开发工程师是利用嵌入式技术设计、开发、维护、管理符合功能、性能要求的软件产品的工作人员。他们为改变人们的生活创造了种种便利条件,他们开发的各种软件正在不同的嵌入式系统中为人们的生活和工作“不辞辛苦”地运行着。

嵌入式软件开发工程师——职业大揭秘

揭秘一工作内容

1.从事数据产品嵌入式(底层)软件开发和设计工作;

2.进行数据产品相关软件子系统的方案设计;

3.进行数据产品相关的技术交流、标准及专利相关工作;

4.进行嵌入式软件系统的需求分析和模块设计;

5.对客户的软件技术进行支持。

揭秘二职业要求

在专业方向和学历水平上,嵌入式软件开发工程师应具有本科及以上学历,计算机、电子、通信及相关专业毕业。而具体的实践经验和工作能力方面,精通C/C++语言,有扎实的编程基础和一定的编程经验;熟悉软件项目的一般开发流程;熟悉ARM或其他微处理器架构;除此之外,良好的沟通和团队协作能力也是必不可少的。

揭秘三职业前景

嵌入式系统无疑是当前最热门最有发展前途的IT应用领域之一。嵌入式系统产品正不断渗透进各个行业,作为包含在这些硬件产品中的特殊软件形态,其产业增幅不断加大,而且在整个软件产业中所占的比重日趋提高。

据预测,在未来的几年内,嵌入式系统的发展将会为几乎所有的电子设备注入新的活力,加上Internet的迅速发展和廉价微处理器的出现,嵌入式系统将在我们的日常生活里形成一个更大的应用领域。

家电的智能化也为嵌入式开辟了广阔的空间,像我们平常常见的手机、PDA、电子字典、可视电话、VCD/DVD/MP3Player、数字相机(DC)、数字摄像机(DV)、U-Disk、机顶盒(SetTopBox)、高清电视(HDTV)、游戏机、智能玩具、交换机、路由器、数控设备或仪表、汽车电子、家电控制系统、医疗仪器、航天航空设备等都可以应用在嵌入式系统中。

揭秘四薪酬水平

手机和3G成为业内焦点后,在就业市场上嵌入式软件工程师开始紧俏,其工资水平也相应攀高,比其他IT业界同行大约高出50%。初入门的开发人员平均月薪一般都在5000元左右,有3年以上经验者年薪大都在10万元以上,有10年工作经验的高级嵌入式工程师年薪可达30万元左右。在一些大城市,比如北京,一个成熟的嵌入式软件工程师平均月薪在8000~10000元之间。嵌入式软件开发工程师职业发展“路在何方”

嵌入式学院负责人、北京华清远见嵌入式培训中心总经理季久峰认为,从事嵌入式工作有两大优势:一是工作强度相对较低。做嵌入式系统的公司,都有自己的产品计划,按自己的节奏行事,所开发的产品通常是通用的,不会因客户的不同而修改,一个产品型号开发完了,往往还有较长一段空闲时间进行充电和休整;二是职业发展相对顺利,从事嵌入式软件的人,所涉及的专业技术范围终究有限,经验的培养,指日可待。

以上都是针对求职工作而言的,若对于个人整体发展来说,如果想创业,做自己的产品,那么嵌入式就是一个不错的主意,嵌入式软件不会像应用软件那样容易被盗版,而如果开发出专利产品,年薪将不止10万元。

积累丰富开发经验的嵌入式软件开发工程师可以向嵌入式系统开发工程师发展,进而晋升为产品研发经理或IT项目经理。对测试理论和方法有一定了解的嵌入式软件开发工程师还可以转做嵌入式系统测试工程师,最终也可发展为IT项目经理。

嵌入式软件开发工程师的发展路径电子技术研发工程师:电子新技术的开拓者

第7篇:嵌入式软件开发工程师

嵌入式软件开发工程师

岗位职责岗位职责:

1、开发维护光网络产品嵌入式软件;

2、按照研发流程要求,完成软件的详细设计,代码实现,单元测试,集成测试;

3、对开发的软件质量和进度负责。

福利待遇:

1、五险一金(养老保险、医疗保险、失业险、工伤险、生育险,住房公积金);

2、年终奖及过节费;

3、提供各种培训机会;

4、公司设有员工宿舍、食堂免费三餐及图书馆;

5、定期为员工安排健康体检;

6、组织各种大型集体活动增加团队凝聚力(如:旅游、运动会、年度联欢、体育比赛等)。

岗位要求任职要求:

1、通信、计算机、电子、软件工程等相关专业本科以上学历;

2、熟练掌握RTOS(WINCE、Linux等)之上的嵌入式软件开发;

3、熟悉数据通信原理,熟悉VLAN,STP等相关二层协议;

4、从事过以太网、光通讯产品开发经验者优先,5、有通信、计算机网络协议开发经验者优先(包括路由器、交换机、IP语音网关等设备的开发经验);

6、够熟悉使用51系列、ARM系列微处理器,熟悉TCPIP、SNMP协议技术者优先;

7、有自组网mesh设备开发经验优先考虑;

8、具有强烈的责任心及团队合作精神,具有较强的沟通及协调能力。

第8篇:嵌入式开发学习心得

个人学习嵌入式心得体会

就我个人而言,从最开始对嵌入式一窍不通到现在越学越感兴趣,当然相应在嵌入式方面的提高也是很明显的。学习潜入式越来越成为我学习生活的一部分,现在把我的学习过程与大家一起分享,希望那些和我一样对嵌入式想学而又迷茫,不知从哪入手的同学朋友有所帮助。

一、语言基础

嵌入式开发很大一部分靠C语言,尤其在底层驱动等用的很多,当然在应用开发还用到诸如C++等其他语言,但我想对于一个初学者有C基础就足够了,等到学到一定程度再去扩展。所以,C 基础是学嵌入式的前提。

二、单片机等知识的储备

我觉得单片机、嵌入式等这一类都有很大的相似性,知识功能不一样,但工作的原理、控制原理都和大的相似。就我个人而言,能比较快的进入嵌入式的学习与提高,很大一部分依赖于对单片机的原理有较深入的学习和理解,单片机比较简单,学习起来相对比较容易,所以我建议哪些想学潜入式的同学,可以和我一样从单片机入手,那样不仅可以理解这些微处理器、微控制器的操作与控制原理,当然还可以顺便学学汇编语言,这对后面的嵌入式学习都有很大的帮助。

三、接受培训

暑假,我在学院的组织下参加过ICC的嵌入式培训,虽然接触的都是皮毛,但是对我进入嵌入式的学习起了一个很好的引导作用。所以,如果有条件的可以去报名正规的专门的培训班,这样如果遇到问题也可以比较容易的得到老师或专业人士的指导,提高学习效率。

四、买开发板自己动手做

个人觉得这是最重要的一种做法。这东西没自己亲手做,程序没亲手写,没有进行调试等,都是很难学到东西,因为很多东西感觉看的都懂,其实真正做起来就什么都不会了。因此买块板来自己做,这样才能真正将所学的应用到实际中去。而且这样做映像很深,死记硬背原理及规则不但不可行还会拖垮你的学习兴趣,自然学不下。

总之,我觉得,基础知识很重要,但是动手做更重要!我能说的就这些了,能力有限,不好的地方请指教!

第9篇:嵌入式Linux开发流程

嵌入式Linux开发流程

嵌入式 linux开发,根据应用需求的不同有不同的配置开发方法,但是一般都经过以下过程:

建立开发环境。操作系统一般 REDHAT-LINUX,版本 7 到9 都可以,选择定制安装或全部安装,通过网络下载相应的 GCC 交叉编译器进行安装(比如 arm-linux-gcc、arm-uclibc-gcc),或者安装产品厂家提供的交叉编译器。

配置开发主机。配置 MINICOM,一般参数为115200,数据位 8位,停止位 1,无奇偶校验,软硬件控制流设为无。在 WINDOWS 下的超级终端的配置也是这样。MINICOM软件的作用是作为调试嵌入式开发板信息输出的监视器和键盘输入的工具;配置网络,主要是配置 NFS 网络文件系统,需要关闭防火墙,简化嵌入式网络调试环境设置过程。

建立引导装载程序BOOTLOADER,从网络上下载一些公开源代码的BOOTLOADER,如 U-BOOT、BLOB、VIVI、LILO、ARM-BOOT、RED-BOOT等,根据自己具体芯片进行移植修改。有些芯片没有内置引导装载程序,比如三星的 ARM

7、ARM9 系列芯片,这样就需要编写烧写开发板上 flash 的烧写程序,网络上有免费下载的 WINDOWS 下通过JTAG并口简易仿真器烧写 ARM 外围 flash 芯片的程序。也有 LINUX 下公开源代码的J-FLASH 程序。如果不能烧写自己的开发板,就需要根据自己的具体电路进行源代码修改。这是让系统可以正常运行的第一步。如果你购买了厂商提供的仿真器,当然比较容易烧写flash了,但是其中的核心技术是无法了解的。这对于需要迅速开发应用的人来说可以极大地提高开发速度。

下载别人已经移植好的 LINUX 操作系统,如 UCLINUX、ARM-LINUX、PPC-LINUX等,如果有专门针对你所使用的CPU移植好的 LINUX 操作系统那是再好不过,下载后再添加自己的特定硬件的驱动程序,进行调试修改,对于带 MMU的 CPU可以使用模块方式调试驱动,对于 UCLINUX 这样的系统好像只能编译进内核进行调试。

建立根文件系统,从下载使用 BUSYBOX 软件进行功能裁减,产生一个最基本的根文件系统,再根据自己的应用需要添加其他的程序。默认的启动脚本一般都不会符合应用的需要,所以就要修改根文件系统中的启动脚本,它的存放位置位于 /etc目录下,包括:/etc/init.d/rc.S、/etc/profile、/etc/.profile 等,自动挂装文件系统的配置文件/etc/fstab,具体情况会随系统不同而不同。根文件系统在嵌入式系统中一般设为只读,需要使用 mkcramfs、genromfs 等工具产生烧写映象文件。

建立应用程序的 flash 磁盘分区,一般使用JFFS2 或 YAFFS 文件系统,这需要在内核中提供这些文件系统的驱动,有的系统使用一个线性 flash(NOR 型)512K-32M,有的系统使用非线性 flash(NAND型)8-512M,有的两个同时使用,需要根据应用规划 flash的分区方案。

开发应用程序,可以下载到根文件系统中,也可以放入 YAFFS、JFFS2 文件系统中,有的应用程序不使用根文件系统,而是直接将应用程序和内核设计在一起,这有点类似于UCOS-II 的方式。

烧写内核、根文件系统、应用程序。

发布产品。

第10篇:嵌入式开发工程师简历

【个人信息】姓名:

身高:

性别:

学历:

籍贯:

专业:电子信息工程

联系电话:

E-mail:

【求职意向】 嵌入式开发工程师或相关工作,对LINUX驱动开发极感兴趣

【工作经验】 2009.3----2010.3中山长宝GPS卫星导航有限公司

 2009.1----2009.3中山世博游艺有限公司

【教育背景】 2010.3——2010.7广州粤嵌通信科技股份有限公司(简称粤嵌教育)ARM+Linux培训

 2005.9——2009.6广州大学松田学院电子信息工程工学学士

【项目经验】

 GPS车载终端,GPS个人定位器(从事一年相关工作)基于ARM9的嵌入式智能家居系统(QT图像界面,应用程序,驱动等)基于ARM9的嵌入式视频点播系统(包括本地播放,网络播放)ARM9(S3C2440)的嵌入式系统移植(Uboot,Kernel,Rootfs,Driver)LINUX简单聊天工具

【相关技能】

 英语水平: 四 级 掌握C、C++编程,有良好的编程风格 了解Linux内核机制,熟悉Linux驱动开发 熟练使用单片机(如STC系列,SST系列,INTEL系列)熟悉ARM9的硬件结构 熟悉Linux操作系统、交叉编译环境,掌握常用脚本编写 熟悉BootLoader制作,内核的剪裁,驱动及根文件系统的移植 熟悉QT编程 , TCP/IP协议,掌握Linux应用编程 了解SQL基础知识 熟悉GSM.GPS的使用

【语言水平】 粤语/国语流利;英语已通过CET-4,可阅读专业相关资料

项目简介

 GPS车载终端,GPS个人定位器

软件环境: KEIL 51

硬件环境: BENQ M23,M33 通信模块,51单片机,和GPS模块

项目描述: 通过MCU把GPS采集的数据处理后,通过串过发送AT指令使GSM

拨通GPRS网络,再把采集的GPS数据,按照定义好的协议上存到监

控平台

 ARM9(S3C2440)LED流水灯、LCD文字及图片显示设计

软件环境: ADS1.2

硬件环境:ARM9(2440)开发板

项目描述: 将设计的程序移植到ARM9上,并成功驱动LED、LCD,完成LED

流水灯、LCD文字及图片显示项目

 ARM9(S3C2440)嵌入式系统移植

软件环境: Linux2.6.24,U-boot,Qtopia

硬件环境: ARM9(2440)开发板

项目描述: 在2440上成功完成了U-boot移植,Linux内核的剪裁与移植,根文

件系统的制作,并完成了LED、LCD等驱动的移植。

 基于ARM9的VOD点播系统

软件环境: Linux2.6.12,U-boot,Qtopia

硬件环境: GEC2440开发板

项目描述: 培训实战项目,完成了S3C2440嵌入式系统的整体移植,它基于

QT图形界面,移植了MPlayer播放器,实现了VOD(本地和网络)

多媒体点播, ARM9(S3C2440)嵌入式智能家居系统

软件环境: Linux2.6.12,U-boot,Qtopia

硬件环境: ARM9(2440)开发板

项目描述: 本系统主要实现温度检测,红外检测,蜂鸣器报警,步进机转动(模拟控

制家电),GSM短信通知等驱动,QT图形界面显示和应用编程.把温

度传感器和红外线采集的数据,传给应用程序,应用程序把数据显示

在QT界面,当应用程序检测到温度过高或有人闯进时,应用程序就调

用蜂鸣器报警驱动,并发短信通知主人,主人也可以下发短信控制步

进机转动

本人做的LINUX驱动简介

 ds18b20温度传感器Linux驱动

该驱动为字符型驱动程序,能从ds18b20芯片读取温度信息.ds18b20芯片采用了独特的1-wire bus技术,只用一根数据线即可实现与cpu芯片的连接(利用了cpu gpio本身的弱上拉电阻)。本驱动程序的重点是实现字符驱动的读函数接口。由于硬件连线简单,对ds18b20的软件操作较为繁琐,每一个操作都要要经过以下三个步骤:(1)芯片初始化(2)芯片选择(因为一线总线上可挂载多个ds18b20, 所以必须通过一定的机制指明操作的对象)(3)发送功能命令(例如,温度查询命令)和读取数据。在初始化的步骤中,cpu拉低数据线,然后释放数

据线,经过一定时间读取数据线上的值,如为低电平,则表明数据上挂载了ds18b20,否则初始化失败。在芯片选择的步骤中,由于只挂载了一片ds18b20, 所以只需发送skip rom命令即可。在发送功能命令的步骤中,首先发送温度查询命令(convert t), 然后在数据线上读取两个字节的温度数据,温度数据按由低位低字节向高位高字节的顺序发送,余下的为温度无关数据,可忽略。温度数据的0-10位为数值位(最小单位为0.0625), 11-15位为扩展符号位。该驱动使用linux的udelay函数来实现时序操作所要求的延时操作。

 使用内存模拟块设备并挂载ext2文件系统(简单块设备驱动)

本驱动程序使用kmalloc分配出一块内存区域来模拟块设备,并在该块设备上挂载ext2文件系统。本驱动程序同时实现了字符设备和块设备驱动接口。块设备的内容通过字符驱动的写函数由用户空间写入。块设备接口实现的重点是其初始化函数和request函数的实现。在初始化函数中完成以下操作:注册块设备主设备号(register_blkdev),注册request函数的实现并获取与之关联的request_queue,设置request_queue的一些参数(例如,blk_queue_hardsect_size和blk_queue_max_sectors),分配(alloc_disk)和设置块设备结构体gendisk,注册gendisk。在request函数的实现中完成以下操作:获取request_queue中的第一个request结构体(elv_next_request), 遍历该request结构体中每一个bio(rq_for_each_bio)中的每一个segment(bio_for_each_segment),在循环体中将每个segment的数据发送到块设备控制器(或从块设备控制器中读入segment中)。遍历完成后,从request_queue中移除该request结构体(end_that_request_first),重复以上操作,直到request_queue为空,最后调用end_that_request_last做一些收尾工作。可以看到,块设备的驱动格式较为固定,不像字符驱动那样灵活。文件系统通过以下方法制作:首先建立一个2M大小的“空白”文件(dd),然后格式化该文件(mkfs.ext2),最后通过mount命令进行挂载,并创建文件系统内容。制作好的文件系统通过字符驱动的写接口写入驱动内存(cat), 最后挂载块设备。

 蜂鸣器驱动

本驱动程序属于字符型驱动,由于该蜂鸣器物理硬件连接的是定时器的TOUT1管脚,只要实现定时器1的PWM功能即可,实现PWM功能,我们需要设置定时器的频率,也就是蜂鸣器的频率,并设置占空比.蜂鸣器启动的代码在IOCTL系统调用里实现,并把蜂鸣器的响应时间,以参数形式传给IOCTL这自己定义的函数.驱动蜂鸣器。

 红外感应驱动

本驱动程序属于字符型驱动,红外感应的原理,简单的描述就是当有人靠近时,该模块相应的管脚会产生高电平,没人靠近时,该管脚为低电平.此工作原理,相当于一个外部中断,所以只要住一个带有外部中断的字符驱动即可

 GSM驱动(即串口驱动)

本驱动程序属于字符型驱动,首先用ioremap申请串口相关控制寄存器,再编写串口接受和发送的中断程序,当寄存器UTRSTAT的第0位为真,表示接受到收据,当寄存器UTRSTART第2位为1时,表示可以发送寄存器为空,可以发送数据

【求职感言】 我对嵌入式计算机行业抱有热情,有强烈的求知欲和对新技术和新方法的热

忱,希望能得到一个良好的平台和起点,得到锻炼和提升的机会

【业余爱好】

● 看书,篮球,足球,魔兽争霸

【自我评价】●具备吃苦、耐劳的能力,敢于面对错误和承担责任。

第11篇:嵌入式底层开发总结

嵌入式底层开发总结

51单片机应该是大部分搞嵌入式最先接触的,也是学生时期接触的第一款单片机,本人是电子信息工程毕业的,接触的第一个单片机也是51,然后是STM32.51和STM32 STM32比51 难一点,不过本质上都是单片机,STM32片上外设多很多,定时器啥的复杂多的多。STM32片上外设多,功能强大,可以说学了STM32之后基本上所有的单片机应该都能马上上手的,虽然我也只是只接触到51 和STM32.。大四全国电子设计大赛之后就再也没有接触到单片机了。后来工作就一直是ARM+linux,android。

------------------任何计算机系统都是软件和硬件的结合体,如果只有硬件而没有软件,则硬件是没有灵魂的躯壳;如果只有软件没有硬件,则软件就是一堆无用的字符。在底层硬件的基础上,操作系统覆盖一层驱动,屏蔽底层硬件的操作,通过特定的软件接口去操作底层硬件,用户在用户空间可以很容易的把软件设计目标放在策略与需求上,可以很方便的屏蔽掉底层实现,从而很好的完成客户功能需求。计算机系统是软件和硬件的结合体。而软件又分为应用层软件和驱动层软件。驱动层软件是应用层软件和底层硬件的纽带。通过驱动层软件实现对底层硬件屏蔽。

在裸机时代,比如单片机系统,程序员往往是直接操作硬件寄存器,直接设置硬件。而在Linux操作系统中,硬件驱动程序中实现对硬件直接操作,而用户空间,通过通用的系统调用接口,实现对硬件操作,应用程序没有直接操作底层设备,通过posix标准,应用程序的系统调用往往是被规定和限值,用户只能通过规定的接口实现对底层硬件的操作,导致了应用程序在类UINIX操作系统具有非常好的可移植性。

图2.1 直接操作硬件程序

上图2.1 是裸机时代,应用程序和硬件操作糅合在一起,应用程序和硬件操作高度耦合的框图,上述代码一般很难有良好的代码互用和移植性。往往从一个平台移植到另一个平台,甚至是同一平台不同硬件配置都要求很大的代码改动,另外从应用层来说,应用与驱动高度耦合,应用程序也几乎难以移植,甚至说是没有应用程序概念,原因在于应用与驱动的纠缠不清。

图2.2 无操作系统应用程序和设备驱动程序关系

上图2.2所示,良好的裸机代码框架,设备驱动层和应用层之间有良好的分层思想,用户可以较好的实现策略和需求,例如:客户要求实现流水灯程序,程序员在底层机制实现(硬件操作)的基础下,可以充分在用户应用程序中把主要精力方法流水灯的实现,即策略。但是在良好的裸机程序设计,代码移植性可能从一个平台移植到另外一平台只需要修改少量的底层驱动,例如:LED_ON()的实现。但是在用户空间,没有系统调用概念,函数接口千差万别。应用程序移植性差。

图2.3 Linux系统调用框图

操作系统中,需求决定应用程序,通过系统调用,调用底层驱动,此外,在驱动程序中,把一部分公用的驱动接口抽象出来,如此,程序员只需修改很少量的驱动资源,形成特定的驱动框架。导致用户只需添加专用的硬件属性作为平台资源,在内核中获取资源,大大解放了设备驱动开发,提高了设备驱动的通用型。在用户空间,由于遵循posix标准,类UNIX操作系统中,所有操作接口基本一样,从而方便了应用程序的移植,应用程序几乎不要做修改。如图2.3所示。

Linux操作系统对于所有的硬件都是当做一个文件来操作:一切设备皆文件。Linux设备文件一般分为字符设备,块设备,网络设备。在Linux系统中,除了网络设备之外,所有的设备都被映射到Linux的文件系统中。如图2.4所示。

图2.4 Linux操作系统与应用程序关系

----------------讲讲51,linux,安卓之间的差别。先申明一下,我是实际工作中没有使用过单片机,我使用单片机仅仅是用来参加全国电子设计大赛。工作主要在android driver这一块。我们这一行很多人说单片机是有瓶颈的,我也不是很清楚。但是实话实说,这鸟东西太简单了,没啥技术含量的,你要之后android的庞大。

欢迎点赞。后面会说说android,linux,51,32单片机之间的联系与学习方法,虽然我也是菜鸟,如果你现在看不懂也没关系,有个映像就行。以后就有方向去学习了。想当初我真的是一个人孤孤学习linux ================= 补充一个:单片机要点亮一个led等,同样在安卓上你点亮一个灯也要驱动的,不然怎么亮呢,只是我们只看到了app。背后驱动,怎么实现的,安卓架构,跟单片机有啥区别,相同的地方。其实手机arm芯片跟单片机都是嵌入式微处理器,单片机叫做微控制器。高通,mtk啥的也是嵌入式微处理器~都是一样的~但是难度你想想看就知道了。

51单片机大家都知道了,裸机,直接操作硬件,直观,简单,没有框架,没有系统。STM32,可以学习一下RTOS了,实时的小系统,ucos II等等许多实时系统,STM32+ucos II这种组合学习方式还是挺好的。STM32比较难的在我印象中一个是时钟树,因为我们从51,没有时钟树的概念12M晶振,时钟不要你配置,而比较新的ARM框架,外设都是有时钟的。可能刚刚接触概念不是很清楚,但是也是很简单的。另外一个是定时器,什么输入捕获模式,定时器模式,编码器模式。。。强大的多,比起51。总的来说还是简单的。因为是没有框架的原因,代码量真的很少。你要知道,MTK android 5.1 所有的东西加起来 10G多,包括bootloader,linux kernel,android framework,定制的部分。等等。我们接触的就那些目录,当你去看C++,java代码时,你就知道面向过程的代码真的很容易看。可能有些朋友不知道android的框架,以及android 与linux之间的关系,以及linux驱动与裸机的关系,联系与区别。你现在只要知道linux驱动比较大,android框架更大。单片机简单。单片机一般是C语言,而android一般涉及三种语言:底层linux内核C,中间的JNI层是C++,framework和app是java。

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 学过51单片机的朋友知道,我们要点亮一个LED灯,是这样子的P0 = xxx,我们就点亮了一个,好。一烧写,好,灯亮了。linux,上我们要亮一个灯,有点难了,有了操作系统,没那么容易了。一般人搞不定了。好,到android,更加难了。但是你想一想手机芯片也是ARM。亮灯这种肯定都是CPU的管脚操作。上了系统了,难了,点个灯都费劲的。本质上是一样的。很多人都知道单片机有瓶颈的。原因是会点硬件,会点C,轻轻松松就可以亮灯的。入门容易。

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 我举一个小的例子说明一下51,linux,android三者的之间的差别。你就知道是啥区别。下面是51单片机: 大概是这样: int main(void)//一个main函数搞定 { P0 = 0xxx;while(1);return 0;} linux: 驱动程序: #include #include #include //file_operatios

//cla_create/device_create #include #include //kmalloc #include //ioremap #include #include"led.h"

struct 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__);

/*初始化GPC0_3,GPC0_4引脚功能为输出功能*/ *gpc0con &= ~((0xf

staticize_tled_read(struct file *file, char __user *buf, size_t count, loff_t *offset){ printk(KERN_INFO"%s()-%dn", __func__, __LINE__);return 0;}

//write(fd, &val, 4)static ize_tled_write(struct file *file, const char __user *buf, size_t count, loff_t *offset){ int ret;unsignedintval;printk(KERN_INFO"%s()-%dn", __func__, __LINE__);

/*获取用户空间数据*/ ret = copy_from_user(&val,buf,count);if(ret){ printk(KERN_ERR"copy data from user failed!n");return-ENODATA;}

printk(KERN_INFO"copy data from user: val=%dn",val);if(val){ //点亮LED *gpc0dat |=((0x1

staticstructfile_operationsled_fops={.owner = THIS_MODULE,.open = led_open,.read = led_read,.write = led_write,.release = led_close, };

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_INFO"no memory malloc for s5pv210_dev!n");return-ENOMEM;} /*注册*/ led_major = register_chrdev(0,"led",&led_fops);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,"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_INFO"ioremap failed!n");ret =-ENOMEM;goto err4;} gpc0dat = gpc0con + 1;

return 0;err4: device_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(s5pv210_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 /* **./led_test on 点亮LED **./led_test off 熄灭LED */ int main(intargc, char **argv){ intfd;intval =0;fd = open("/dev/led", O_RDWR);if(fd

if(strcmp(argv[1], "on")==0){ val = 1;} else { val = 0;}

if(write(fd, &val, 4)!=4){ perror("write failed!n");exit(1);} close(fd);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平台是基于linux内核的。在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 #include

staticintfd =-1;jintopen_led(JNIEnv *env, jobjectthiz){ LOGD("$$%sn", __FUNCTION__);fd = open("/dev/led1", O_RDWR);if(fd

jintled_on(JNIEnv *env, jobjectthiz){ LOGD("$$%sn", __FUNCTION__);intval = 1;jint ret = 0;ret = write(fd, &val, 4);if(ret!= 4){ LOGE("write : %sn", strerror(errno));return-1;} return 0;}

jintled_off(JNIEnv *env, jobjectthiz){ LOGD("$$%sn", __FUNCTION__);intval = 0;jint ret = 0;ret = write(fd, &val, 4);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}, {"onDev", "()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 **)&env, JNI_VERSION_1_4);if(ret

jclamyclz = env->FindCla("com/ledtest/LedActivity");if(myclz == NULL){ LOGE("FindCla errorn");return-1;} ret = env->RegisterNatives(myclz, myMethods, sizeof(myMethods)/sizeof(myMethods[0]));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.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)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;default: 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.getMenuInflater().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();}

框架是这样的:最上层是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篇:嵌入式开发学习心得

嵌入式开发学习心得

嵌入式开发学习心得

就我个人而言,从最开始对嵌入式一窍不通到现在越学越感兴趣,当然相应在嵌入式方面的提高也是很明显的。学习嵌入式越来越成为我学习中的一部分,现在把我的学习过程的心得体会与大家一起分享,希望那些和我一样对嵌入式想学而又迷茫,不知从哪入手的同学朋友有所帮助。

1 基础知识

嵌入式开发很大一部分靠C语言,尤其在底层驱动等用的很多,当然在应用开发还用到诸如C++等其他语言,但我想对于一个初学者有C基础就足够了,等到学到一定程度再去扩展。所以C 基础是学嵌入式的前提。

关于C语言需要知道基本的语法,什么是结构体,什么是共用体,有什么区别,不用强记一些实际中用的很少的东西。C++要知道什么是类,怎么定义,继承,接口,要深刻理解,当然基本语法也是必不可少的。

操作系统原理也需要基本理解和掌握的,我记得我上课的时候不以为然没有认真学习,后来发现很多的东西都是在这个课上讲到的。什么时间片啊,任务调度啊,都是在那里知道的。

Linux基本命令的使用(vi编辑器必须会用,因为在终端修改文件的时候只能用这个),我们现在很多的人都习惯用鼠标了,很少用到命令,我学习嵌入Linux就强迫自己去改掉这个习惯了,Linux用命令操作一是效率高,二是功能非常强大,远非图形界面能比的了的,其实我们用图形界面的操作都要转化为命令传给硬件的。Linux文件系统的管理要清楚,哪个目录存放是什么东西,有什么用,文件权限管理等。

2 单片机知识的学习

我觉得单片机、嵌入式等这一类都有很大的相似性,知识功能不一样,但工作的原理、控制原理都和大的相似。就我个人而言,能比较快的进入嵌入式的学习与提高,很大一部分依赖于对单片机的原理有较深入的学习和理解,单片机比较简单,学习起来相对比较容易,所以我建议想学嵌入式的同学,可以和我一样从单片机入手,那样不仅可以理解这些微处理器、微控制器的操作与控制原理,当然还可以顺便学学汇编语言,这对后面的嵌入式学习都有很大的帮助。

看书不要希望一次就会,一次就明白是什么意思,也不要死记硬背,看不明白也没关系,以后遇到了知道去哪里去找就可以了,以后遇到的多了,也就记住了,遇到的少的,忘记也就忘记了。还有,不要直接阅读Linux内核源代码,看一些自己把头撞破也想不明白的事,一开始很打击我的积极性,要循序渐进,刚开始我就从学习做led开始的,接着学习做个串口,慢慢的就开始学着做硬件编解码了。

3 学习开发板

我在刚开始学习嵌入式时就买了一块学习板,现在的开发板不是很贵,给很我们初学者减轻了经济负担。看再多的视频,看再多的书,也不如自己动手试一下,看着很简单的东西,做起来就可能遇到很多的问题,遇到问题找到原因,解决问题,只有这样才能学到东西,记得我第一次写led的驱动,想自己试一下,网上也有人写过相关的代码,可是自己一试,就出了好多的问题,那个led弄了我一天才把led灯点亮。所以不要眼高手低。

4 不要好高骛远,要脚踏实地

我拿到开发板时,很兴奋也很激动,想法自然也很多,想用开发板实现自己的这个想法,实现那个想法,然后又不知道从何下手,然后就去论坛中发一个贴,“那个什么什么怎么实现啊,哪位大侠能详细说一下啊,跪求!”,然后等着别人去回复。我觉得有想法是好的,我们要实现自己的想法也是有前提的,首先,我们对这部分知识了解吗?如果不了解就去Google一下(最好别用百度,不太好用),了解了一些,也就大概知道要怎么做了。如果再遇到问题,再去发贴问,这样也显得我们有一点点水平啦。比如自己连串口是什么都不太清楚呢,就问串口通信怎么做啊,就是人家把代码给我们,我们也不明白是怎么回事啊。

5 多看代码,多写代码

见多识广,熟能生巧。多看代码,要从代码中读出代码的意思来。自己平时也要多写代码,多练习(这一点我做的不好,写的少)。

个人觉得这是最重要的一种做法。这东西没自己亲手做,程序没亲手写,没有进行调试等,都是很难学到东西,因为很多东西感觉看的都懂,其实真正做起来就什么都不会了。因此买块板来自己做,这样才能真正将所学的应用到实际中去。而且这样做印象才能深刻,死记硬背原理及规则不但不可行还会拖垮你的学习兴趣,自然学不下。

总之,我觉得,基础知识很重要,但是动手做更重要!

第13篇:武汉智麟嵌入式硬件、高级软件

嵌入式硬件工程师

职位描述:

1、大专以上学历,电子、计算机、自动化、通信等相关专业;

2、熟练掌握protel,cadence等软件进行原理图设计与PCB设计;

3.熟练使用C/C++等开发语言,熟悉IAR、keil等开发环境;

4.熟悉模拟、数字电路等基本知识,有MCU、ARM相关处理器软硬件设计经验者优先,有zigbee产品开发设计经验者优先,有GSM,3G,GPS等产品开发设计经验者优先;

5.了解通用工业级标准接口,传感器原理,物联网技术;

6.学习和实际动手能力强;

7.工作耐心细致、认真负责,富有团队合作精神、创新精神和良好的沟通能力。

第14篇:硬件工程师岗位职责

硬件工程师岗位职责

1、制定研发技术实施方案;

2、参与项目组织管理(项目目标管理、范围管理、时间管理);

3、实施硬件设计方案;

4、提出研发项目阶段性评审依据;

5、制定生产用规范化的技术文档,并提供技术支持;

6、制定并参与产品的调试、测试流程,严格产品质量控制;

7、负责技术上的相互协作,互相配合;

8、协助生产过程,并参与产品的售后服务工作(技术培训与技术支持);

9、在技术上对产品的性能和质量负责,协助产品检验及产品质量过程管理;

10、负责对产品进行完善,以及对产品进行升级换代;

11、制定、整理并规范化技术文档(主要包括:设计手册、电原理图、元器件清单、源程序清单、软件流程、用户手册、特殊工艺要求、试制总结报告、工作总结等);

12、负责与设计相关的技术储备,积极推动技术创新工作的开展;

13、部门经理分配的临时工作;

14、其它临时性工作。

第15篇:学习嵌入式系统开发心得

你好,我是一名嵌入式开发爱好者.近来总是看到很多初学者(多数是在校大学生)由于没有条件,想学习却不知道如何下手。

本人绝对能体会到学习的艰辛,而且视任何对知识技术有强烈追求的人(不管目前水平高低)为同路人,所以整理短文一篇写出一些学习感受,替所有渴望知识的人企盼高手指点学习之路,分享经验。

爱因斯坦说过,”我是站在巨人的肩膀上“

实践当然是最锻炼人的方式,但是我想在校生很少有这样的机会,别说本科生,硕士生也未必有条件。所以我想学习嵌入式要从个人的知识背景和现实条件出发。订立合适的阶段目标,在允许的条件下多动手多思考。

一般情况下对于硬件设备是比较短缺的。但是可以从软件方面和嵌入式系统开发模式上下功夫,提醒大家一点,嵌入式系统开发设计的内容知识很多,所以大家不要乱,在了解嵌入式系统开发的体系结构后,一步一步的下手,最容易上手的是linux下的C,比如ucos(有开放源代码),虽然可能无法在硬件上仿真,但也不必着急。wince,palmos上手都很容易。无论对于初学者还是自以为是高手的人来说,编程水平(这可不受硬件条件限制)绝对是没有止境的,有了较高的编程水平(嵌入式主要是C,当然OO的几种语言c++,java是发展趋势),等到有机会的时候及时的补充硬件知识,会很快的成为高手。

还有,一定记住,学习嵌入式,”要想办法,不要找理由“。当年在dos下用tc编程时的条件,现在回想起来建筑就是奇迹。

我推荐一条学习之路吧,仅供参考,1、C开发经验

条件:linux(这都有吧)

方法:随便,主要是掌握ansiC编程(不包括gtk,qt等图形可视化开发)

2、网络、操作系统、体系结构

条件:linux,各种书,算法、例程。

方法:通过C编程实现简单的网络等知识的算法和过程。

3、嵌入式系统概念

条件:各个嵌入式网站,讨论组,书籍

方法:少提问(尤其是等着天上掉馅饼,这主要是防止增长惰性,也解决不了实际问题),多思考。

4、嵌入式开发实践

条件:各种嵌入式系统开发工具的demo版(或者D版,如果有的话),包括编译器,仿真器。可以找高手们要,也可以下载。

方法:这里有两个分支,一个是基于mcu/dsp的嵌入式系统开发,一个是象palmos,wince,ucos等rtos下的应用软件开发。对硬件感兴趣,想成为真正高手的由第一个分支入手,以后进入第二个分支;如果十分厌烦硬件,只想停留在软件开发上的,可以只由第二个分支入手,以后就和pc上的开发没有什么本质上的区别了,找份不错的工作应该没问题,可以不用进行下面的步骤了,感兴趣可以参考第6条。

5、硬件开发

条件:各种嵌入式芯片、存储器等电路器件,protel99等电路设计软件,电路板制作。

方法:这时候该有开发条件了,最起码是51系列,这个比较方便。电路的设计内容较多,不过看起来吓人,实际上比软件要简单的多。只要下功夫,实践会告诉你一切。

6、硬件工程/软件工程/项目管理

条件: 各个芯片详细资料和使用经验,软件工程知识,项目管理知识,培训,大型项目参与经验

方法:已经是高手了,但是学无止境,沾沾自喜于已有的知识是致命的。那个下一步。。,你该是管理者了。

抛砖引玉,以上出自我的经验,欢迎各路高手们补一下 再告诉你一些我的收藏夹的网站

国内有关嵌入式开发的论坛

电子产品世界的论坛

http://bbs.edw.com.cn/index.asp

恒颐高科论坛

http://也有相通的地方,同样在android上可以用到自定义的样式这和c也有比较相通的地方,我们可以通过一些公用的方法写个BaseActivity这个基类,通过继承方式比较不错的实现了Activity的界面,因为这样你可以Header(头部)和Footer(尾部)进行处理一些触发事件或者特效等,布局模式以相对模式为主,线线布局模式可以在比较简单的include进行完成,最重要的一点就是:我们可以自己通过重写方法或者通过实现View或者Layout等类进行扩充项目需要的布局(或者控件),在学习界面中,我发现Android为我们提供了很好的类似反射机制,通过Layout文件夹下的配置文件,可以快速的形成界面,在配置文件可以设置属性或者样式都是很快捷方便。对比较特殊的界面也可以通过处理嵌入到指定的界面,同样你可以通过java代码直接创建View进行添加,不过这种方式比较复杂。对一些点击、选中、按键等处理的事件,界面之间的跳转Intent管理,通过Bundle对数据在界面之间进行传输。其次在手机交互式通信服务中,学习了Android手机之间进行短信发送、广播、对广播的监听、服务等,在Service类中没有context,可以通过Handler来每秒反复运行,自动送出系统广播信息,同时在这里我们也知道可以设计一个常用的变量类,设计一个当前的CurrentActivity这个变量进行控制,进行处理。

总而言之,Android设计还是比较自由开阔的,只要有想法,自己动手便能实现。

第17篇:嵌入式软件开发工程师简历

个人简历

姓 名:glzy8.com 性 别:男

出生日期:1984-06-05 籍 贯:北京市

目前城市:北京市 工作年限:应届毕业生

目前年薪:xx万人民币 联系电话:***

e-mail:http://www.xiexiebang.com

应聘方向

求职行业:计算机软件,计算机硬件,计算机服务(系统、数据服务,维修),互联网/电子商务,通信/电信/网络设备

应聘职位:软件测试,技术文员/助理,测试员,系统测试

求职地点:北京市 薪资要求:面议

工作经历

2008/03—现在 ***公司

所属行业:计算机服务(系统、数据服务,维修)

软件开发 软件工程师

主要职责:

1.远程同步嵌入式todolist记事系统;

2.参与todolist记事系统的系统分析和设计;

3.开发了本地数据管理系统,实现数据本地的增删改查的功能;

4.开发了下载和上传引擎,实现mobile与server间的数据同步;

5.设计开发系统控制模块,该模块集成数据模型,数据管理模块和数据通讯模块;

6.设计开发了图形用户界面;

7.在模拟器和真机测试todolist记事系统。

2007/09—2007/11 tom在线

所属行业:互联网/电子商务

网站事业部 网站编辑

主要职责:负责网页内容的更新与维护,独立制作新闻专题。

教育培训

2004/09—至今 北京信息工程学院 电子商务 本科

2008/03—2008/06 渥瑞达symbian os 嵌入式开发

职业技能

外 语: 英语:一般

自我评价

1.熟悉计算机网络,信息安全等相关知识,了解计算机软硬件安装调试;

2.熟悉各种计算机操作系统、熟悉office软件。

3.熟悉sql server数据库操作。

4.精通面向对象的程序设计和开发,熟练掌握c++语言。

5.熟练掌握visual c++、codewarrior、evc等开发工具。

6.熟悉dream wear、photoshop等网页制作软件。

第18篇:嵌入式软件开发工程师简历

嵌入式软件开发工程师简历模板

个人简历

姓 名:58个人简历模板 性 别:男

出生日期:1984-06-05 籍 贯:北京市

目前城市:北京市 工作年限:应届毕业生

目前年薪:XX万人民币 联系电话:***

E-mail:http://www.xiexiebang.com

应聘方向

求职行业:

计算机软件,计算机硬件,计算机服务(系统、数据服务,维修),互联网/电子商务,通信/电信/网络设备

应聘职位:

软件测试,技术文员/助理,测试员,系统测试

求职地点:北京市 薪资要求:面议

工作经历

2008/03—现在 ***公司

所属行业:计算机服务(系统、数据服务,维修)

软件开发 软件工程师

主要职责:

1.远程同步嵌入式TodoList记事系统;

2.参与TodoList记事系统的系统分析和设计;

3.开发了本地数据治理系统,实现数据本地的增删改查的功能;

4.开发了下载和上传引擎,实现Mobile与server间的数据同步;

5.设计开发系统控制模块,该模块集成数据模型,数据治理模块和数据通讯模块;

6.设计开发了图形用户界面;

7.在模拟器和真机测试TodoList记事系统。

2007/09—2007/11 tom在线

所属行业:互联网/电子商务

网站事业部 网站编辑

主要职责:负责网页内容的更新与维护,独立制作新闻专题。

教育培训

2004/09—至今 北京信息工程学院 电子商务 本科

2008/03—2008/06 渥瑞达Symbian OS 嵌入式开发

职业技能

外 语: 英语:一般

自我评价

1.熟悉计算机网络,信息安全等相关知识,了解计算机软硬件安装调试;

2.熟悉各种计算机操作系统、熟悉office软件。

3.熟悉SQL server数据库操作。

4.精通面向对象的程序设计和开发,熟练把握c 语言。

5.熟练把握Visual C、CodeWarrior、EVC等开发工具。

6.熟悉Dream wear、Photoshop等网页制作软件。

第19篇:嵌入式软件开发工程师简历

嵌入式软件开发工程师简历模板

发布时间: 2009-10-10 来源: 作者:[ ]文章摘要:

嵌入式软件开发工程师简历模板

个人简历

姓 名:简历模板 性 别:男

出生日期:1984-06-05 籍 贯:北京市

目前城市:北京市 工作年限:应届毕业生

目前年薪:XX万人民币 联系电话:***

E-mail:http://www.xiexiebang.com

应聘方向

求职行业:

计算机软件,计算机硬件,计算机服务(系统、数据服务,维修),互联网/电子商务,通信

/电信/网络设备

应聘职位:

软件测试,技术文员/助理,测试员,系统测试

求职地点:北京市 薪资要求:面议

工作经历

2008/03—现在 ***公司

所属行业:计算机服务(系统、数据服务,维修)

软件开发 软件工程师

主要职责:

1.远程同步嵌入式TodoList记事系统;

2.参与TodoList记事系统的系统分析和设计;

3.开发了本地数据治理系统,实现数据本地的增删改查的功能;

4.开发了下载和上传引擎,实现Mobile与server间的数据同步;

5.设计开发系统控制模块,该模块集成数据模型,数据治理模块和数据通讯模块;

6.设计开发了图形用户界面;

7.在模拟器和真机测试TodoList记事系统。

2007/09—2007/11 tom在线

所属行业:互联网/电子商务

网站事业部 网站编辑

主要职责:负责网页内容的更新与维护,独立制作新闻专题。

教育培训

2004/09—至今 北京信息工程学院 电子商务 本科

2008/03—2008/06 渥瑞达Symbian OS 嵌入式开发

职业技能

外 语: 英语:一般

自我评价

1.熟悉计算机网络,信息安全等相关知识,了解计算机软硬件安装调试;

2.熟悉各种计算机操作系统、熟悉office软件。

3.熟悉SQL server数据库操作。

4.精通面向对象的程序设计和开发,熟练把握c 语言。

5.熟练把握Visual C、CodeWarrior、EVC等开发工具。

6.熟悉Dream wear、Photoshop等网页制作软件。

第20篇:嵌入式Linux底层驱动软件工程师岗位职责1.负责按照总体设计完成模块详细设计说明书。2.完成模块代码编写、内部测试工作。3.协助硬件设计人员及应用软件设计人员进行系统开发与调试。4.根据技术支持需求进行软件代码维护。5.编写相关技术文档,并对有关人员进行培训。

嵌入式硬件开发工程师岗位职责

嵌入式开发岗位职责

c嵌入式开发岗位职责

硬件开发助理岗位职责(共3篇)

硬件开发岗位职责及岗位要求(共7篇)

本文标题: 嵌入式硬件开发岗位职责(共20篇)
链接地址:https://www.dawendou.com/fanwen/gangweizhize/20723.html

版权声明:
1.大文斗范文网的资料来自互联网以及用户的投稿,用于非商业性学习目的免费阅览。
2.《嵌入式硬件开发岗位职责(共20篇)》一文的著作权归原作者所有,仅供学习参考,转载或引用时请保留版权信息。
3.如果本网所转载内容不慎侵犯了您的权益,请联系我们,我们将会及时删除。

重点推荐栏目

关于大文斗范文网 | 在线投稿 | 网站声明 | 联系我们 | 网站帮助 | 投诉与建议 | 人才招聘 | 网站大事记
Copyright © 2004-2025 dawendou.com Inc. All Rights Reserved.大文斗范文网 版权所有