说嵌入式系统的it人才缺口大量缺口吗,为什么它的工资水平

为什么嵌入式的工资水平也不是很高?
我的图书馆
为什么嵌入式的工资水平也不是很高?
研究生毕业做嵌入式的工资也不过,比IC设计的要低一两千。还有,中国的嵌入式从业人员到底算不算多,现在是个大学都有这个专业了,还有各种各样的嵌入式培训机构,不禁让人怀疑这个行业到底怎么样?知乎网友默默的EEer说嵌入式这行太苦逼了,大家不愿意进入这个领域或者转行(比如见过转去和老婆卖包子,开长途大巴,贩女包……),所以就缺口了。参考隔壁的互联网,收入轻松超我们两三倍。还有转行去做演员的~(图片来源于知乎本话题插图)嵌入式真的这么悲催么?看看大牛们都是怎么说的。知乎网友时国怀在嵌入式行业做了七年,让他来说说感受:嵌入式系统的人才有大量缺口吗?有。为什么它的工资水平也不是很高?缺人跟工资高没有必然联系。公司缺高级工程师,迫不得已招了十个实习生来干高级工程师的活,能说这十个实习生的工资高吗?现在嵌入式专业的泛滥和培训的乱象和十几年前计算机专业的扩张是一样的。那时候也是满大街计算机专业的培训,各个高校大肆扩招计算机专业的学生。我听说有的二本学校当时计算机专业有500人。而那时候也是所谓的“计算机人才大量缺口”,如今嵌入式也只不过是换了个说法而已。嵌入式人才确实缺,而且缺的很厉害。可是呢,对于一个本科或者研究生毕业的应届生来说,要想直接上手做嵌入式开发基本上不可能,几乎所有公司都要对应届生进行培训。你以为上了几年大学就了解什么是软件开发了?能写几千行代码的模块不?能掌握上万行代码的逻辑不?真要从软件开发工程师的角度来考察计算机相关专业的应届生,一半以上都是不合格的。所以为什么缺口这么大,工资又不高,因为招不到合适的人。所以原来需要一个合格的工程师做的事情,只好交给几个不合格的毕业生去做,那平摊到几个毕业生头上的工资自然就少了。大学生早就不是什么天之骄子了,放低心态吧,每年大学生毕业的有几百万上千万,在中关村的马路上扔个砖头砸中十个人里能有七八个都是大学生。大学生读几年书算什么,连农民工都不一定比的上,人家农民工是几年工作经验。中国高校里确实有一些(比如top 10)能培养出合格的嵌入式工程师,所以也能见到嵌入式应届生毕业拿10K甚至更高的,但因为合格的太少了,所以大多数人拿的都不多。题主还问到跟IC类的比,这个要具体看情况,也有IC比嵌入式还低的。但IC整体上似乎比嵌入式收入更高,原因是IC还没有泛滥,没泛滥的原因是学习成本和培训成本太高,现在一个单片机太便宜了,有些嵌入式甚至都不需要板子,直接在模拟器上调试,但要搞IC设计的话设备还是比较贵的,片子可都不便宜啊。中国的嵌入式从业人员应该说是很多的,收入是呈现出金字塔的结构,5K(月薪)左右的入门级开发者居多,这些人几乎每年都要淘汰一批,剩下的一部分进入10K这个层次,之后因为太累、自我提升困难左右再淘汰一部分,才有15K-20K这些人。越往高层看,人才越是缺乏,所以说中国嵌入式人才缺口大,不如说嵌入式合格人才缺口大才对。如果题主问的是怎么能在毕业的时候在嵌入式行业拿到更高的工资,我想说:自己的能力决定一切,你的学校、学历、甚至学习成绩都是辅助条件,自己的动手能力才是关键,如果有工作经验就更好。最后说一点自己的切身体会,我在大三大四那会,搞过BBS,当过站长,参加过ACM,自己还写过几千行的项目,自认为很NB,工作以后接触的第一个项目,好家伙,二十多万行,再看整个系统,几百万行,直接傻眼了。所以大学里学的再多,做的再好,大部分情况下都不能算是工作经验,跟实际工作的情况差的太远了。知乎网友陈俊直分享观点说:只会写嵌入式程序的人满大街都是。树莓派、arduino等这些不用费脑子费体力做硬件的开发板出来后。连软件工程师都可以转过来做嵌入式程序了。但写的了程序还真正能做硬件电路的人太少了,最多是参考开发板送的资料或者芯片Datasheet设计个最小系统,能做外围电路特别是模拟电路的太少了。几十年前,父母那一辈的工程师还能自己焊接调试个电视机、收音机、电台的出来,现在的人基本是用到什么都找集成芯片。以至于我们要找嵌入式硬件工程师,都要求他做过开关电源、变频器之类的。另外一些,能写程序的人还能做数字信号处理算法的人(图像处理、声音处理、自控算法处理等)的人太少了。和计算机软件比起来,因为嵌入式在硬件上投入比计算机软件要大,项目开发周期较计算机软件的长、资金回拢周期也较长。所以,做嵌入式/电子设备的企业要少的多。企业缺人是缺少来了就能直接上手的人,也缺少学习能力强的人。嵌入式的芯片多种多样,不像计算机硬件平台基本就是X86,如果用到其他平台如ARM和powerPC,对软件工程师的工作影响不是太多,因为他们是面向对象编程,不需要考虑硬件。做嵌入式多多少少是要考虑硬件平台的。我招个人,我们用工业总线CAN,他说他以前只玩过串口和TCPIP,那又要花一两个月来适应CAN协议……我们用ti的ARM9,他说他以前只做过STM32,还要学习一下ARM9的寄存器。然后因为思维有些固化,一直排斥ARM9,说这东西不如ST,没有库函数程序写起来不好用balabalala……所以一直缺人,但却一直在面试找不到个技术上跟我们要求尽量接近的。至于工资,其实是两面分化的,如果跟上述一二段说的那些人,基本上工资是要低于他们做计算机软件的同学们(同学历、同工作年限、同毕业院校的人们之间对比)。因为这种是等着企业来挑他们的嵌入式民工,自己没有太多的话语权。你有什么看法欢迎发表评论~▎素材来源于知乎,感谢▎素材来源于知乎,感谢作者:时国怀,陈俊直,默默的EEer,仅为学习交流,版权归作者所有&
TA的最新馆藏
喜欢该文的人也喜欢1,029被浏览282,989分享邀请回答3添加评论分享收藏感谢收起为了还清网贷,在发工资彻底解决之前会有5千左右的缺口,能想的办法都想了,我改怎么办_百度知道
为了还清网贷,在发工资彻底解决之前会有5千左右的缺口,能想的办法都想了,我改怎么办
我有更好的答案
我也是这段时间网贷还的我想哭。
哎,我就差这些了,缺少时间啊
采纳率:28%
五千什么缺口?还差五千没还上?
会在我发工资前到期的
有最低还款吧?还是到期增息,不行的话就找些合法途径借一些。
网贷没有的
合法途径没办法的,我征信花了
因为网贷,征信被查询次数有点多,信用卡那些都过不了的
我可以帮你
这平台都登不上去
你秋秋多少。
秋秋号码。可以找你。
其他1条回答
为您推荐:
其他类似问题
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。【北京高级嵌入式软件工程师待遇|北京高级嵌入式软件工程师工资】-看准网
北京高级嵌入式软件工程师工资水平(元/月-税前)
¥10662职位平均工资
数据说明:
图表中根据看准网企业员工发布的职位薪酬数据统计所得,工资数据受地域、工作年限,用户分享数量等多种因素影响,仅供参考。
本数据取自&31&份样本,最新更新时间:
北京高级嵌入式软件工程师工资待遇
共31条工资(31个职位)
平均工资/月
最高工资 ¥8,500
最低工资 ¥8,500
最高工资 ¥12,000
最低工资 ¥12,000
最高工资 ¥34,000
最低工资 ¥34,000
最高工资 ¥8,000
最低工资 ¥8,000
最高工资 ¥14,500
最低工资 ¥14,500
北京煜邦电力技术有限公司 高级嵌入式工程师(1条)
请你或以查看更多工资信息
深圳市动力源科技有限公司 高级嵌入式工程师(1条)
请你或以查看更多工资信息
中航天信 高级嵌入式工程师(1条)
请你或以查看更多工资信息
中电华瑞 高级嵌入式工程师(1条)
请你或以查看更多工资信息
天威诚信 高级嵌入式工程师(1条)
请你或以查看更多工资信息
图例: 工资范围
说明: 所有工资数据来自用户匿名分享。工资水平受地域、工作年限等多种因素影响,仅供参考。
晒晒我的工资&&&帮助更多的人,及时了解自己岗位的工资信息!
&在职&&&&&离职
为保证向用户提供的内容的时效性,我们只接受最近两年的职位工资
基本工资元
销售提成元
其他收入元
感谢您在看准分享您的工资信息,TA将帮助大家更好的了解该公司的薪酬待遇!
高级嵌入式软件工程师热门公司面试
10条信息1&&4.0
7条信息2&&3.9
7条信息3&&3.9
6条信息4&&3.5
6条信息5&&3.8
6条信息6&&4.2
5条信息7&&2.2
4条信息8&&3.1
4条信息9&&3.0
4条信息10&&4.0
爆料数十万公司信息爆料
互助职场人在线互动
工资公司实际工资查看
改简历专人改简历提高工资
老鸟私聊求助能挣钱
输入手机号,下载看准APP
扫码下载看准APP或各大应用商店搜索:看准在学习嵌入式Linux之前,肯定要有C语言基础。汇编基础有没有无所谓(就那么几条汇编指令,用到了一看就会)。&br&C语言要学到什么程度呢?越熟当然越好,不熟的话也要具备基本技能。比如写一个数组排序、输入数字求和什么的。&br&学C语言唯一的方法是多写程序多练习,编译出错没关系,自己去解决;执行出错没关系,自己去分析。以前我是用&br&VC来练习C语言的,经常去尝试着写一些C语言竞赛的题目。它们是纯C、纯数学、纯逻辑的题目,不涉及界面这些东西,&br&很适合煅炼你的编程能力。&br&&br&回到主题,首先我们要明白你的目的是什么,大概来说所谓嵌入式Linux可以分为两部分:底层系统、应用开发。&br&&br&如果你是想做应用开发,那么你去把C语言、数据结构、JAVA什么的学好吧。嵌入式应用开发和PC上的&br&应用开发并没有什么特别要注意的。也许你说在嵌入式上要做些优化,是的,要优化,但是未经优化的程序&br&和PC上的程序开发没什么差别。另外,当你有能力去优化时,你已经不用来问这个问题了。具体到某个例子,&br&比如说开发界面,在PC上我们用VC;在嵌入式Linux里也许我们用QT也许用Android,这个时候你应该去学学QT、&br&Android的编程。但是基础还是C或JAVA,在此基础上去熟悉它们的接口。你学过VC的话,也是要花时间去了解&br&那些类、控件的。&br&
如果你的目的是想学习底层系统,这是我的专长,倒是可以说一点。&br&
在回答这个问题之前,我先回答:不少人问我,到底是学驱动还是学应用? &br&
我只能说凭兴趣,并且驱动和应用并不是截然分开的 &br&1. 我们说的驱动,其实并不局限于硬件的操作,还有操作系统的原理、进程的休眠唤醒调度等概念。 &br&
想写出一个好的应用,想比较好的解决应用碰到的问题,这些知识你应该懂 &br&2. 做应用门槛低,特别是现在的ANDROID,纯JAVA。做应用的发展路径个人认为就是业务纯熟。&br&
比如在通信行业、IPTV行业、手机行业,你了解行业的需求。所以,当领导的人,多是做应用的。&br&3. 做驱动,其实我不想称为“做驱动”,而是想称为“做底层系统”,做好了这是通杀各行业。我工作几年,&br&
做过手机、IPTV、会议电视,但是这些产品对我毫无差别,因为我只做底层。他们的业务跟我没关系。&br&
当应用出现问题,他们解决不了时,我就会从内核角度给他们出主意,给他们提供工具。 &br&
做底层的发展方向,个人认为是技术专家。 &br&4. 其实,做底层还是做应用,之间并没有一个界线,有底层经验,再去做应用,你会感觉很踏实。&br&
有了业务经验,你再了解一下底层,很快就可以组成一个团队。 &br&&br&
回到怎么学的问题上。嵌入式Linux底层系统包含哪些东西?不要急,举一个例子你就知道了。&br&1. 电脑一开机,那些界面是谁显示的?是BIOS,它做什么?一些自检,然后从硬盘上读入windows,并启动它。&br&
类似的,这个BIOS对应于嵌入式Linux里的bootloader。这个bootloader要去Flash上读入Linux内核,并启动它。&br&2. 启动windows的目的是什么?当然是上网聊天什么的了。这些上网、聊天工具在哪?&br&
在C盘、D盘上。所以, windows要先识别出C盘、D盘。在Linux下我们称为根文件系统。&br&3. windows能识别出C盘、D盘,那么肯定能读写硬盘才行。这涉及的东西称为驱动程序。当然不仅仅是硬盘,还有网卡、USB等等。&br&
嵌入式Linux能从Flash上读出并执行应用程序,肯定也得有Flash的驱动程序啊,当然也不仅仅是Flash。&br&&br&
先说到这里吧,&b&嵌入式LINUX里含有bootloader, 内核, 驱动程序、根文件系统这4大块。&/b&&br&&br&一、bootloader:&br&它就是一个稍微复杂的裸板程序。但是要把这裸板程序看懂写好一点都不容易。Windows下好用的工具弱化了我们的编程能力。&br&很多人一玩嵌入式就用ADS、KEIL。你能回答这几个问题吗?&br&1. 一上电,CPU从哪里取指令执行?&br&
答:一般从Flash上指令。&br&2. 但是Flash一般是只能读不能直接写的,如果我用到全局变量,这些全局变量在哪里?&br&
答:全局变量应该在内存里&br&3. 那么谁把全局变量放到内存里去?&br&
答:长期用ADS、KEIL的朋友,你能回答吗?这需要&重定位&。在ADS或KEIL里,重定位的代码是制作这些工具的公司帮你写好了。&br&
你可曾去阅读过?&br&4. 内存那么大,我怎么知道把原来存在Flash上的内容读到内存的哪个地址去?&br&
答:这个地址用链接脚本决定,在ADS里有scatter文件,KEIL里也有类似的文件。但是,你去研究过吗?&br&5. 你说重定位是把程序从Flash复制到内存,那么这个程序可以读Flash啊?&br&
答:是的,要能操作Flash。当然不仅仅是这些,还有设置时钟让系统运行得更快等等。&br&&br&先自问自答到这里吧,bootloader这一个裸板程序,其实有3部分要点:&br&1. 对硬件的操作&br&2. 对ARM体系处理器的了解&br&3. 程序的基本概念:重定位、栈、代码段数据段BSS段什么的。&br&&br&对硬件的操作,需要看原理图、芯片手册。这需要一定的硬件知识,不求你能设计硬件,但是至少能看懂; 不求能看懂模拟电路,&br&但是要能看懂数字电路。这方面的能力我是在学校里学到的,微机原理、数字电路这2本书(书名忘了)就足够了。但是我怀疑你有无耐&br&心把这2本书看完。我不知道现在有没有更快捷的书。想速成的话,就先放掉这块吧,不懂就问GOOGLE、发贴。&br&另外,芯片手册是肯定要读的,别去找中文的,就看英文的。开始是非常痛苦,以后就会发现那些语法、词汇一旦熟悉后,&br&读任何芯片手册都很容易。&br&对ARM体系处理器的了解, 看杜春蕾的&ARM体系架构与编程&吧,里面讲有汇编指令,有异常模式、MMU等。也就这3块内容需要你了解。&br&程序的基本概念,王道当然是去看编译原理了。可惜,这类书绝对是天书级别的。劝你若非超级天才还是别去看了。就看我写的&br&嵌入式Linux应用开发完全手册和第1期视频吧,别担心,不用花钱。照着视频把硬件相关的实验做了,这些概念就清楚了。我还没有&br&发现第2套讲这些概念的书或视频,允许我盲目吹嘘一回。&br&&br&对于bootloader,我学习时是先看了ARM体系架构与编程,然后自己写程序把各个硬件的实验都做了一遍,比如GPIO、时钟、SDRAM、UART、NAND。把它们都弄清楚了,组台在一起就很容易看懂u-boot了。总结一下,看懂硬件原理图、看芯片手册,这需要你自己去找资料。剩下的,就按嵌入式Linux应用开发完全手册和第1期视频的章&br&节目录去学习吧。&br&&br&&b&二&/b&、内核:&br&想速成的人,先跨过内核的学习,直接学习怎么写驱动。&br&想成为高手,内核必须深刻了解。注意,我说的是了解,我没奢望去写出一个内核。&br&要对里面的调度机制、内存管理机制、文件管理机制等等有所了解。&br&推荐两本书:&br&1. 通读linux内核完全注释.请看薄的那本(浮燥的社会讲求速度, 呵), &br&2. 选读Linux内核情景分析; 想了解哪一块就读哪一节&br&&br&&b&三&/b&、驱动:&br&驱动包含两部分:硬件本身的操作、驱动程序的框架。&br&又是硬件,还是要看得懂原理图、读得懂芯片手册,多练吧。&br&&br&说到驱动框架,有一些书介绍一下。LDD3,即Linux设备驱动;老外写的那本,里面介绍了不少概念,值得一读。但是,它的作用&br&也就限于介绍概念了。我基本上是入门之前用它来熟悉一下概念,入门后就扔掉了。&br&驱动方面比较全的介绍,应该是&a href=&//link.zhihu.com/?target=http%3A//weibo.com/n/%25E5%25AE%258B%25E5%25AE%259D%25E5%258D%258E%25E7%259A%2584linux%25E8%25AE%25BE%25E5%25A4%%25A9%25B1%25E5%258A%25A8%25E5%25BC%%258F%%25AF%25A6%25E8%25A7%25A3%25E4%25BA%2586& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&@宋宝华的linux设备驱动开发详解了&i class=&icon-external&&&/i&&/a&,老实说我只看过目录,有不少人说好,这里推荐一下。&br&要想深入了解某一块,Linux内核情景分析; 绝对是超5星级推荐。你别指望把它读完,1800多页,上下两册呢。我是某一块不清楚&br&时,就去翻一下它。任何一部分,这书都可以讲上2、3百页,非常详细。并且是以某个目标来带你分析内核源码。它以linux 2.4为例,&br&但是原理相通,同样适用于其它版本的linux。&br&&br&还有没有其他介绍?呵呵,当然有了,韦东山Linux视频第2期。嵌入式Linux应用开发完全手册里对驱动讲得不多,不够深入。&br&于是我录制了这期视频。不仅仅教你怎么写怎么改驱动,还教你为什么这样写这样改驱动。&br&每一个驱动都是现场编写: &br&1. 用绘图板画图讲解──相当于学校里老师在黑板上画图讲解,很直观&br&
绝对不是对着PPT念。&br&2. 用source insight当场写程序,从第1行开始写,每一课都是这样。我讲了20多个驱动,就写了20多个程序。&br&3. 写完就编译、测试。&br&4. 很全面,字符设备驱动、块设备、网卡驱动3大类齐全,硬件介绍、驱动框架分析、测试3大类齐全。&br&
培训机构里教的内容,远不及这期视频丰富。我在多个培训机构讲过课,从没看到哪个老师敢每一课都当场讲解当场编写代码&br&当场测试,除我之外!也没看到哪个培训机构讲完这些内容──因为时间不够,讲完起码要一个月,但是这部分基本只有2周授课时间。&br&&br&把你手上的开发板所涉及的硬件,都去尝试写一个驱动吧。有问题就先痛苦地思考;思考的过程中你会把很多不相关的知识&br&串联起来,最终贯通。&br&&br&四、根文件系统:&br&大家有没有想过这2个问题:&br&1. 对于Linux做出来的产品,有些用作监控、有些做手机、有些做平板。那么内核启动后,挂载根文件系统后,应该启动哪一个应用程序呢?&br&
答:内核不知道也不管应该启动哪一个用户程序。它只启动init这一个应用程序,它对应/sbin/init。&br&
显然,这个应用程序就要读取配置文件,根据配置文件去启动用户程序(监控、手册界面、平板界面等等)&br&
这个问题提示我们,文件系统的内容是有一些约定的,比如要有/sbin/init,要有配置文件&br&2. 你写的hello,world程序,有没有想过里面用到的printf是谁实现的?&br&
答:这个函数不是你实现的,是库函数实现的。它运行时,得找到库。&br&
这个问题提示我们,文件系统里还要有库。&br&&br&
简单的自问自答到这里,要想深入了解,可以看一下busybox的init.c,就可以知道init进程做的事情了。&br&
当然,也可以看嵌入式Linux应用开发完全手册 里构建根文件系统那章。&br&&br&&b&说一下我的学习经历吧&/b&。&br&1. 我在学校时读的是物理电子专业,其实课程里没有教怎么设计电路,只是教了些电子电路方面的知识。PCB的设计&br&
是在实验室里自学的,只设计过2层板,现在忘记得差不多了。但是保留了看原理图、看芯片手册的能力。&br&2. 选修了软件学位,对软件设计挺感兴趣,但是也只是学了C语言、数据库而已。凭着兴趣做了不少竞赛题。没能力去&br&
参加竞赛,但是把C语言练得很扎实。&br&3. 在实验室、在第1家公司,就是设计些简单的PCI卡,写一下windows的驱动程序&br&4. 在第2家公司,用51单片机做车载电话,开始走上纯软件的道路。&br&5. 开始感到单片机的不足,辞职半年闭门学Linux,从red hat怎么操作开始。步骤就是先看ARM体系架构与编程;&br&
再自己写裸板程序操作硬件,接着到分析u-boot。同时看&linux内核完全注释;,对LINUX框架有所了解。&br&
在写裸板时,建议各位加强对中断的理解,内核就是用中断来完成各种功能的。&br&6. 分析完u-boot,就开始进行简单的驱动编程了,这时候,能力还很弱。&br&7. 开始去中兴上班,工作2年,编写各类驱动、解决各类问题(驱动问题、帮助定位应用问题),能力得到煅炼。&br&&br&&b&总结一下:&/b&&br&1. 硬件方面的书: 微机原理、数字电路,高校里的教材。毕业多年,忘名了。&br&2. Linux方面的书:&br&
ARM体系架构与编程;&br&
嵌入式Linux应用开发完全手册&br&
Linux设备驱动 老外写的那本&br&
linux设备驱动开发详解&br&
linux内核完全注释&br&
Linux内核情景分析&br&
----来自某大神语录,觉得不错
在学习嵌入式Linux之前,肯定要有C语言基础。汇编基础有没有无所谓(就那么几条汇编指令,用到了一看就会)。 C语言要学到什么程度呢?越熟当然越好,不熟的话也要具备基本技能。比如写一个数组排序、输入数字求和什么的。 学C语言唯一的方法是多写程序多练习…
在嵌入式行业做了七年,我自己来说说感受:&br&&br&先简单回答题主的两个问题:&br&&br&&blockquote&不是说嵌入式系统的人才大量缺口吗?&br&&/blockquote&&br&缺。&br&&br&&blockquote&为什么它的工资水平也不是很高?&br&&/blockquote&&br&缺人跟工资高没有必然联系。公司缺高级工程师,迫不得已招了十个实习生来干高级工程师的活,能说这十个实习生的工资高吗?&br&&br&&br&&br&现在嵌入式专业的泛滥和培训的乱象和十几年前计算机专业的扩张是一样的。那时候也是满大街计算机专业的培训,各个高校大肆扩招计算机专业的学生。我听说有的二本学校当时计算机专业有500人。而那时候也是所谓的“计算机人才大量缺口”,如今嵌入式也只不过是换了个说法而已。&br&&br&嵌入式人才确实缺,而且缺的很厉害。可是呢,对于一个本科或者研究生毕业的应届生来说,要想直接上手做嵌入式开发基本上不可能,几乎所有公司都要对应届生进行培训。&br&&br&你以为上了几年大学就了解什么是软件开发了?能写几千行代码的模块不?能掌握上万行代码的逻辑不?真要从软件开发工程师的角度来考察计算机相关专业的应届生,一半以上都是不合格的。所以为什么缺口这么大,工资又不高,因为招不到合适的人。所以原来需要一个合格的工程师做的事情,只好交给几个不合格的毕业生去做,那平摊到几个毕业生头上的工资自然就少了。&br&&br&大学生早就不是什么天之骄子了,放低心态吧,每年大学生毕业的有几百万上千万,在中关村的马路上扔个砖头砸中十个人里能有七八个都是大学生。大学生读几年书算什么,连农民工都不一定比的上,人家农民工是几年工作经验。&br&&br&中国高校里确实有一些(比如top 10)能培养出合格的嵌入式工程师,所以也能见到嵌入式应届生毕业拿10K甚至更高的,但因为合格的太少了,所以大多数人拿的都不多。&br&&br&题主还问到跟IC类的比,这个要具体看情况,也有IC比嵌入式还低的。但IC整体上&b&似乎&/b&比嵌入式收入更高,原因是IC还没有泛滥,没泛滥的原因是学习成本和培训成本太高,现在一个单片机太便宜了,有些嵌入式甚至都不需要板子,直接在模拟器上调试,但要搞IC设计的话设备还是比较贵的,片子可都不便宜啊。&br&&br&中国的嵌入式从业人员应该说是很多的,收入是呈现出金字塔的结构,5K(月薪)左右的入门级开发者居多,这些人几乎每年都要淘汰一批,剩下的一部分进入10K这个层次,之后因为太累、自我提升困难左右再淘汰一部分,才有15K-20K这些人。&br&&br&越往高层看,人才越是缺乏,所以说中国嵌入式人才缺口大,不如说嵌入式&b&合格&/b&人才缺口大才对。如果题主问的是怎么能在毕业的时候在嵌入式行业拿到更高的工资,我想说:自己的能力决定一切,你的学校、学历、甚至学习成绩都是辅助条件,自己的动手能力才是关键,如果有工作经验就更好。&br&&br&最后说一点自己的切身体会,我在大三大四那会,搞过BBS,当过站长,参加过ACM,自己还写过几千行的项目,自认为很NB,工作以后接触的第一个项目,好家伙,二十多万行,再看整个系统,几百万行,直接傻眼了。所以大学里学的再多,做的再好,大部分情况下都不能算是工作经验,跟实际工作的情况差的太远了。
在嵌入式行业做了七年,我自己来说说感受: 先简单回答题主的两个问题: 不是说嵌入式系统的人才大量缺口吗? 缺。 为什么它的工资水平也不是很高? 缺人跟工资高没有必然联系。公司缺高级工程师,迫不得已招了十个实习生来干高级工程师的活,能说这十个实…
&p&好多!从熟悉的开源项目开始。&/p&&br&&b&工具篇&/b&&p&工欲善其事,必先利其器。&/p&&ol&&li&&p&&a href=&//link.zhihu.com/?target=https%3A//github.com/mbedmicro/CMSIS-DAP& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&CMSIS DAP&i class=&icon-external&&&/i&&/a&&br&J-Link 用过吧?这是比 J-Link 更强大的存在,集成下载、调试和USB虚拟串口(另一个分支中还有实时电流测量功能),针对 SWD/JTAG 调试接口和 ARM 的 MCU,可配合 Keil 和 IAR 使用(默认支持),也可配合 &a href=&//link.zhihu.com/?target=https%3A//github.com/mbedmicro/pyOCD& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&GDB Server - pyOCD&i class=&icon-external&&&/i&&/a& 和 GCC ARM Embedded 使用。&/p&&/li&&li&&p&&a href=&//link.zhihu.com/?target=https%3A//github.com/DreamSourceLab/DSLogic& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&DSLogic&i class=&icon-external&&&/i&&/a&&br&好用、跨平台的逻辑分析。&/p&&/li&&li&&p&&a href=&//link.zhihu.com/?target=https%3A//github.com/Seeed-Studio/DSO_Nano& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&DSO Nano&i class=&icon-external&&&/i&&/a&&br&便携手持示波器,谁用谁知道。&/p&&/li&&/ol&&b&平台篇&/b&&p&站在巨人的肩膀上。&/p&&ol&&li&&p&&a href=&//link.zhihu.com/?target=https%3A//github.com/arduino& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Arduino&i class=&icon-external&&&/i&&/a&&br&简单,艺术家设计师也可以使用;众多的软硬件模块;强大,通过软硬件加法运算,组合出无限可能。&/p&&/li&&li&&p&&a href=&//link.zhihu.com/?target=https%3A//github.com/mbedmicro/mbed& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&mbed&i class=&icon-external&&&/i&&/a&&br&&a href=&//link.zhihu.com/?target=http%3A//developer.mbed.org/components/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&丰富的软硬件资源&i class=&icon-external&&&/i&&/a&,让原型实现很简单,从原型到产品很流畅。有走在时代前沿的在线开发环境,也有 Keil 和 IAR 等集成开发环境的支持。背后是 ARM、ST、NordicSemi、NXP 和 Freescale(两家居然二合一了),还有非常活跃的社区。&/p&&/li&&li&&p&&a href=&//link.zhihu.com/?target=https%3A//github.com/coocox& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&CooCox&i class=&icon-external&&&/i&&/a&&br&针对 ARM Cortex-M 的,不错的SDK、丰富的库和易用的工具。&/p&&/li&&/ol&&b&系统篇&/b&&p&告别裸奔!&/p&&ol&&li&&p&&a href=&//link.zhihu.com/?target=https%3A//github.com/RT-Thread/rt-thread& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&RT-Thead&i class=&icon-external&&&/i&&/a&&br&丰富的组件(以太网、文件系统、UI和USB等),良好的中文文档,国内难得的RTOS。&/p&&/li&&li&&p&&a href=&//link.zhihu.com/?target=https%3A//github.com/RIOT-OS/RIOT& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&RIOT&i class=&icon-external&&&/i&&/a&&br&Tickless! 为 IoT 而生,也有很丰富的组件。&/p&&/li&&li&&p&&a href=&//link.zhihu.com/?target=https%3A//github.com/tinyos& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Tiny OS&i class=&icon-external&&&/i&&/a&&br&小如其名,采用特别的 nesC 设计应用。&/p&&/li&&/ol&&p&还有很多 &a href=&//link.zhihu.com/?target=https%3A//github.com/ChibiOS& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&ChibiOS&i class=&icon-external&&&/i&&/a&,&a href=&//link.zhihu.com/?target=https%3A//github.com/contiki-os& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Contiki OS&i class=&icon-external&&&/i&&/a& 等等……&/p&&br&&b&语言篇&/b&&p&语言?!嵌入式里面就只用 C 和 C++……等等,还有汇编。&br&非也。欢迎进入嵌入式中的时尚界,玩转 Lua、Python、Javascript,一起裸奔更刺激——不跑系统。&/p&&ol&&li&&p&&a href=&//link.zhihu.com/?target=https%3A//github.com/elua/elua& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&eLua&i class=&icon-external&&&/i&&/a&&br&Lua本来就很小,Embedded Lua更小。&/p&&/li&&li&&p&&a href=&//link.zhihu.com/?target=https%3A//github.com/micropython/micropython& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Micro Python&i class=&icon-external&&&/i&&/a&&br&人生苦短,继续用 Python。&/p&&/li&&li&&p&&a href=&//link.zhihu.com/?target=https%3A//github.com/espruino& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Espruino&i class=&icon-external&&&/i&&/a&&br&Javascript 凭借 NodeJs 入侵服务器攻势正猛,同时抢滩登陆嵌入式。&/p&&/li&&/ol&
好多!从熟悉的开源项目开始。 工具篇工欲善其事,必先利其器。 J-Link 用过吧?这是比 J-Link 更强大的存在,集成下载、调试和USB虚拟串口(另一个分支中还有实时电流测量功能),针对 SWD/JTAG 调试接口和 ARM 的 MCU,可配合 Keil 和 IAR 使用…
9-9补:&br&&br&去淘宝买小车底盘,可以用全直流的可以用直流+舵机的,买驱动板,然后用单片机做智能小车,加上各种传感器可以实现不同的功能,比如红外的,可以做避障,可以做寻迹,原理就是根据不同的红外传感器传回的有没有返回信号,哪些灯有信号,甚至是强弱来判断事件,单片机做出动作处理。&br&红外遥控器非常便宜,只要知道协议,比如电视空调通用的nec协议,就可以买一个hs0038芯片做红外遥控车,但是抗干扰性不好,还必须要对准,升级版是用nrf905或者24L01这样的无线通信,抗干扰性强,通信距离远。&br&&br&智能小车现在应该是很热门了,加上GPS可以定路线巡航,加上摄像头就是移动摄像机,加上射击模块变成战斗游戏机器人,加上ZigBee类物联网模块就是智能家电,加上吸尘器的话,恭喜你,获得了扫地机器人*1&br&&br&国内有关于这个方面的比赛也很多,飞思卡尔,robomaster,都是国家级的,一开始上手可以用arduino,非常简单,可以用c++开发,超级超级容易不需要专业知识,这个单片机就是为了非专业人士设计的,为了提高兴趣,然后有了相关知识和经验之后,可以用msc51,msp430,stm32f407xx,k60这样的,这四个类型的单片机顺序是越来越难,但是功能越来越强大,慢慢的接触了dip控制之后,上dsp和FPGA都不为过。想做可以一直做,越做越灵敏,越省电,功能越吊,总之就是兴趣为先了。&br&&br&小车如果觉得玩的不爽可以玩飞机,四轴飞行器,最近挺火的,大疆的无人机那个样子可以百度,就是以前控制的四个轮子现在是四个马达而已,但是现在的成本和考虑的事情后者更多,当然后者也更好玩。&br&&br&&br&还有一个比较热门的是智能穿戴,比如做射频身份识别,把那种身份识别芯片做到手表上,到门禁刷手表,当然按指纹也是个不错的选择,当然刷手表的升级版就是用手表刷地铁公交神马的,再升级就是支付,比微信扫一扫还智能一些的东西,当然这每一次升级都需要很多的技术支持。&br&&br&&br&做一个万年历给父母用也不错,ds+Nokia5110屏幕不要背光,一节纽扣电池用一个月没啥问题。这其中学习如何降低系统整体功耗,比如430使用低速度晶振,关闭各种各样的耗电模块,限制电流,低功耗模式等等,低功耗也是一个热门方向。&br&&br&&br&说到5110,有一个好玩的是做一个贪吃蛇游戏,反正也是黑白的,算法也还算有趣,升级版是矩阵键盘改成水银开关,额,就会出现你不再是按键操作了,是往左往右偏你的板子,说白了就是重力感应的贪吃蛇,应该会很好玩。&br&&br&喜欢硬件的做一做音响,功放板,耳放,升级版就是HiFi,这个虽然频谱不宽,但是要把通频带做平缓,响应时延一致,噪音降到很低,效率还要高,真的不容易,但是做出来可以自己用,很有满足感,额,做得好当然也可以卖。。&br&&br&听音乐的时候一些MP3和电脑的软件不是有显示那个一堆柱子在上下起伏么,那个是当前音乐的各个频率分量的幅度值,那个一般是用软件fft算出来的,其实可以做硬件的,用一个LED矩阵,作为显示,每一排下面接一个用运放做的有源滤波器,把不同的频点附近的波滤出来,放大以后用LED显示,就会有那种频谱图一样的效果,跟着音乐跳动,很好玩。&br&&br&&br&&br&想到了好玩的再补充吧。。&br&&br&-----我是分割线----&br&&br&使用ti公司的cc32xx做一些简单的通信,楼上楼下,几个房间之间通信,使用ti专门用来开发无线mcu的软件,频段多,功能全,很容易开发。&br&&br&使用stm32xx做一些基于ucos的应用,比如mp4给自己玩。板子建议自己手动做一个,stm32f103vct6封装超级小,屏幕可以用什么5110这样的,节省io,stm32自带内部振荡器和adda很屌的不要小看。&br&&br&使用51单片机配合电机做一个会旋转并且发光的旋转发光棒[电机买好一点的,伺服电机就不错略贵,直流的也要买好一点的,不然软件不好调,设计DIP不要小看51]&br&我做出来是这个样子&figure&&img src=&https://pic1.zhimg.com/20f2a58c7312a9aef47f59f5e07acf9c_b.jpg& data-rawheight=&1440& data-rawwidth=&1080& class=&origin_image zh-lightbox-thumb& width=&1080& data-original=&https://pic1.zhimg.com/20f2a58c7312a9aef47f59f5e07acf9c_r.jpg&&&/figure&&br&&br&&br&去买瑞萨,ti,microchip等等的ZigBee模块做自己家的智能家电,协议就是标准的2.4GHZ那一套&br&&br&使用ti的声卡芯片制作一个USB声卡,实验室有学长做了用了,比笔记本的好太多,听歌很爽。&br&&br&自己做mini-J~LINK拿去卖钱。。。。。。。。。。。&br&&br&&br&现在有很多的可以插GSM卡的通信模块,买一个然后跟单片机相连,再连接一个红外发射器,手机给模块发短信,单片机解码之后执行不同的操作,理论上可以控制所有能够遥控的东西。&br&这个东西的升级版就是不用短信这么贵的通信方式,研究一下2g通信或者3g通信,开个流量,想干嘛干嘛,模块一般支持短信必然支持网络,还可以打电话,你甚至可以做一个自己的手机!!!&br&&br&&br&用ti的USB3.0芯片做HUB,自己用的好也能卖。。。。。&br&&br&使用树莓派这样的arm基于Linux开发嵌入式图像识别系统,做得好可以发表论文,会有人来买版权的,同样的,用Intel的Edison开发版那个x86构架开发一样的。平台不一样而已。&br&&br&&br&学习Java,xml,HTML这样的开发安卓,学习SQL,做一个小的自用通信,类似QQ1.0那种。还可以搭配在Linux,Windows上做开发,数据库和云服务一开始用新浪的免费的,后来如果业务大了可以考虑阿里云。
9-9补: 去淘宝买小车底盘,可以用全直流的可以用直流+舵机的,买驱动板,然后用单片机做智能小车,加上各种传感器可以实现不同的功能,比如红外的,可以做避障,可以做寻迹,原理就是根据不同的红外传感器传回的有没有返回信号,哪些灯有信号,甚至是强弱…
实名反对@&a href=&https://www.zhihu.com/people/li-niu-fen& class=&internal&&李赧郎&/a& 和某匿名用户拿STM32来讲解Arduino。STM32的IO口结构跟Arduino的AVR还是有区别的。根据STM32的数据手册来学习AVR会造成误导。&br&&br&首先要明确IO口的几种常见模式。对于数字IO而言,常见的模式有:推挽输出、开漏输出、浮空输入(高阻输入)、上拉输入、下拉输入。STM32支持上述的所有模式,但很多单片机并不是支持上述所有模式。比如Arduino采用的AVR单片机就不支持开漏输出和下拉输入。&br&&br&第二要明确“输入阻抗”和“输出阻抗”的概念。例如当IO口输出一个高电平时,IO口内部并非像机械开关那样把一根线直接插到了电源正极上,IO引脚和电源正极之间其实还有电阻的存在。当这个电阻很小的时候,我们称之为“强”,当这个电阻较大时,我们称之为“弱”。这个电阻的一端当然接的是IO引脚,另一端如果接到电源正极,则成为上拉电阻,如果接地,则称为下拉电阻。&br&&br&先说输出模式。对于Arduino,用pinMode将IO口设为OUTPUT的时候,其实IO的状态为“强推挽”,也就是说设为高电平时,IO口对电源正极的电阻比较小(强上拉),设为低电平时IO口对地的电阻也比较小(强下拉),这样IO口就具备了较强的驱动能力。其实也没有强到哪里去,大概几十毫安,能点亮LED而已。这里顺便提一下常见的51单片机,它的IO口总是接通了一个上拉电阻,这个上电阻比较大,所以称为弱上拉,所以51单片机的&b&拉电流驱动能力&/b&(IO引脚高电平时电流从IO引脚流向外部电路的能力)比较弱,大概只有100μA左右,这通常只能让LED发出很微弱的光,所以51单片机IO口点亮LED的方式通常为灌电流(电流从外部电路流入IO引脚)。&br&&br&再说输入模式。对于Arduino,用pinMode将IO口设为INPUT的时候,其实IO的状态为浮空输入,浮空输入也称高阻输入,也就是说输入阻抗非常高。理想状态下,可以认为输入阻抗是无穷大的,大到就像这个引脚断路了一样。就像一个浮在空中的金属丝一样,没有连上任何电路,你让它的电压是多少,它的电压就是多少。这样做是有意义的,因为只有输入阻抗足够大,才能接收到微弱的信号。如果输入阻抗不够大,比如输入端跟地之间有一个1kΩ的电阻,那微弱的输入信号很可能就被直接拉到0V,检测不出来了。但是浮空输入并非在任何情况下都是最好的选择,比如题主在接开关时。开关一头接IO口,一头接地。按下时把IO口拉到0V,读取,低电平,完全符合预期,赞!但是如果开关没有按下,读取,IO这时实际上没有接到任何地方,处于浮空状态,IO口上其实没有电压,或者说可能是任何的电压,这时读取IO口就会发现读到的值是不一定的。有时高有时低,用手摸一下那个引脚,都会使得读到的值抖动,傻眼了,咋办?&br&&br&这时就需要上拉电阻来救场了,准确地说是弱上拉。Arduino的AVR单片机内置了上拉电阻,只要通过程序打开就可以,开启上拉电阻后,IO口会通过一个比较大的电阻(比如100kΩ)接到电源正极,尽管是比较大的电阻,但这个电阻仍然远远小于IO口浮空的输入阻抗,所以这个电阻就可以在IO口没有外部输入时把IO口的电平可靠维持在一个比较高的水平,读出的也都是高电平了。&br&&br&这个时候就可以回答题主的问题了。&br&&br&问题1问的是为什么可以对一个输入引脚执行write操作。答案就是,当对一个已经设定为输入状态的IO口digitalWrite为HIGH时,就会启动这个引脚的上拉电阻。没有为什么,Arduino在实现digitalWrite这个函数时就是这么写的。很扯淡对吧?这其实是一个历史遗留问题,Arduino在早期的版本中并未封装对上拉电阻的操作,在那个时候,你的这种开关电路只能在外部连接一个上拉电阻。在Arduino 1.0之后,才在其库中支持了上拉电阻。其实更好的方法是修改pinMode函数的实现,将INPUT分为INPUT_FLOATING和INPUT_PULLUP。但这就意味着之前所有玩家们开发的代码都需要修改后才能运行,于是Arduino就想出了这么一个歪招,用digitalWrite实现了上拉。需要注意的是,AVR不具备内置的下拉电阻,所以对已经设为INPUT的引脚digitalWrite为LOW,是没有任何效果的。&br&&br&问题2是为什么可以对一个已经有电压的引脚再接入别的电压,从而改变其电压,而不会造成短路。答案就是4个字——“&b&输出阻抗”。&/b&刚才说了在输入引脚上的上拉电阻是个弱上拉,所以当你把弱上拉到高电平的引脚接地时,就相当于把电源正极和地之间连接了一个很大的电阻(例如100kΩ),假设弱上拉电阻是100kΩ,根据欧姆定律,只有50μA的电流从中通过,完全不会带来伤害。但是如果你把设为输出状态的引脚设为高电平后再接地,情况就很不一样了。由于输出高电平时是强上拉的,直接接地的电流可能在50mA以上,超过了输入状态接地电流的1000倍。这其实就是所谓的短路了,所以一定不要这样做,一个引脚长时间短路是可能造成这个引脚甚至整个单片机损坏的。&br&&br&其实我认为这个题目并不需要贴图解释,因为Arduino本身的设计初衷就是避免用户接触IO口内部结构这种底层细节。但是为了纠正其他知友的错误,我还是从真正的AVR数据手册里截了一张简化版的IO口等效电路图,其中的Rpu就是那个传说中的上拉电阻。&br&&figure&&img src=&https://pic4.zhimg.com/81f7bce5cb3fe80378bebb34c7bf742f_b.jpg& data-rawwidth=&608& data-rawheight=&334& class=&origin_image zh-lightbox-thumb& width=&608& data-original=&https://pic4.zhimg.com/81f7bce5cb3fe80378bebb34c7bf742f_r.jpg&&&/figure&&br&&br&说完了,可以点赞了。
实名反对@ 和某匿名用户拿STM32来讲解Arduino。STM32的IO口结构跟Arduino的AVR还是有区别的。根据STM32的数据手册来学习AVR会造成误导。 首先要明确IO口的几种常见模式。对于数字IO而言,常见的模式有:推挽输出、开漏输出、浮空输入(高阻输入)、上…
&p&不好意思,原来那个购买链接失效了,更新一下,不过现在淘宝上随便搜都可以一堆了,自力更生吧!&/p&&p&有朋友说淘宝上搜索不到,有朋友说不会编译,还有朋友说我故意不说价格,好吧,我补充一下。。。。&/p&&p&&b&价格:&/b&&/p&&figure&&img src=&https://pic3.zhimg.com/v2-0f482adac681aca33e9ce_b.png& data-rawwidth=&1013& data-rawheight=&544& class=&origin_image zh-lightbox-thumb& width=&1013& data-original=&https://pic3.zhimg.com/v2-0f482adac681aca33e9ce_r.png&&&/figure&&p&&b&淘宝链接:&/b&【华硕ASUS tinker board开发板瑞芯微rk3288/raspberry pi树莓派4】&a href=&//link.zhihu.com/?target=http%3A//v.cvz5.com/h.xHojSR& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&v.cvz5.com/h.xHojSR&/span&&span class=&invisible&&&/span&&i class=&icon-external&&&/i&&/a& 点击链接,再选择浏览器打开;或复制这条信息¥7C000iOo5fF¥后打开 手淘 &/p&&p&&b&芯片资料:&/b&&a href=&//link.zhihu.com/?target=http%3A//opensource.rock-chips.com/wiki_Main_Page& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Rockchip open source Document&i class=&icon-external&&&/i&&/a&&/p&&br&&p&&b&编译烧录方法:&/b&&a href=&//link.zhihu.com/?target=http%3A//rockchip.wikidot.com/linux-user-guide& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Linux Users Guide - Rockchip Wiki&i class=&icon-external&&&/i&&/a&(注意一点,这个板子的内部型号叫miniarm,编译的时候要注意dts和config选对)&/p&&p&--------------------我是时光机时间轴----------------------&/p&&p&哎,你们!哎!!!!就不能先点个赞再去关注专栏么? &/p&&p&说到国内的开源开发板,我不得不隆重推荐华硕最近出的ASUS Tinker board开源板。&/p&&p&先上几张靓图。&/p&&br&&figure&&img src=&https://pic4.zhimg.com/v2-a37e7e9d57ce281bbb88c343_b.png& data-rawwidth=&500& data-rawheight=&500& class=&origin_image zh-lightbox-thumb& width=&500& data-original=&https://pic4.zhimg.com/v2-a37e7e9d57ce281bbb88c343_r.png&&&/figure&&figure&&img src=&https://pic1.zhimg.com/v2-021b9cfc8e7250abf60a04_b.png& data-rawwidth=&500& data-rawheight=&500& class=&origin_image zh-lightbox-thumb& width=&500& data-original=&https://pic1.zhimg.com/v2-021b9cfc8e7250abf60a04_r.png&&&/figure&&br&&p&&b&推荐理由一:&/b&&/p&&p&接口位置,顺序与树莓派&b&完全兼容&/b&。功能只多不少。&/p&&p&2G lpddr3内存,支持4k视频输出,支持h265 硬件解码器。&/p&&p&&b&推荐理由二:&/b&&/p&&p&采用瑞芯微旗舰SOC芯片RK3288,性能吊炸天。可玩性远超树莓派。&/p&&p&下面上RK3288参数。&/p&&br&&figure&&img src=&https://pic4.zhimg.com/v2-4eb39cc96441ebaa71013_b.png& data-rawwidth=&789& data-rawheight=&324& class=&origin_image zh-lightbox-thumb& width=&789& data-original=&https://pic4.zhimg.com/v2-4eb39cc96441ebaa71013_r.png&&&/figure&&figure&&img src=&https://pic2.zhimg.com/v2-abb92ee49da42d10ee765_b.png& data-rawwidth=&1001& data-rawheight=&673& class=&origin_image zh-lightbox-thumb& width=&1001& data-original=&https://pic2.zhimg.com/v2-abb92ee49da42d10ee765_r.png&&&/figure&&figure&&img src=&https://pic3.zhimg.com/v2-5fe1fb05b9caa3acfba14e_b.png& data-rawwidth=&1003& data-rawheight=&534& class=&origin_image zh-lightbox-thumb& width=&1003& data-original=&https://pic3.zhimg.com/v2-5fe1fb05b9caa3acfba14e_r.png&&&/figure&&p&&b&推荐理由三:&/b&&/p&&p&支持完善,玩家数量庞大且开发能力强(因为该板在欧洲首发,然后接着美国推出,再到国内)。目前该开源板已经在欧美售出近150k,所以国外玩家数量庞大。不过,由于你懂得的原因,查找改板资料请自备梯子。&/p&&p&华硕官网资料:&/p&&p&(1)&a href=&//link.zhihu.com/?target=https%3A//www.asus.com/us/Single-Board-Computer/Tinker-Board/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Tinker Board | Single-board Computer | ASUS USA&i class=&icon-external&&&/i&&/a&&/p&&p&(2)&a href=&//link.zhihu.com/?target=https%3A//www.asus.com/us/Single-Board-Computer/Tinker-Board/HelpDesk_Download/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Tinker Board | Single-board Computer | ASUS USA&i class=&icon-external&&&/i&&/a&&/p&&p&(3)&a href=&//link.zhihu.com/?target=https%3A//tinkerboarding.co.uk/forum/index.php& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Tinkerboard Forum&i class=&icon-external&&&/i&&/a&&/p&&p&(4)&a href=&//link.zhihu.com/?target=https%3A//docs.armbian.com/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Armbian Documentation&i class=&icon-external&&&/i&&/a&&/p&&p&&b&推荐理由四:&/b&&/p&&p&&a href=&https://zhuanlan.zhihu.com/linus& class=&internal&&图解嵌入式系统开发系列 - 知乎专栏&/a&以该开源板为例讲解嵌入式系统开发,内容丰富,通俗易懂,有利于小白玩家更加容易上手。&/p&
不好意思,原来那个购买链接失效了,更新一下,不过现在淘宝上随便搜都可以一堆了,自力更生吧!有朋友说淘宝上搜索不到,有朋友说不会编译,还有朋友说我故意不说价格,好吧,我补充一下。。。。价格:淘宝链接:【华硕ASUS tinker board开发板瑞芯微rk328…
事实上操作系统本身不就是中央处理器的“驱动”吗?&br&&br&虚拟内存、中断处理、时钟、进程管理等等,其实都是在把处理器的对应功能(内存管理单元MMU、[高级]可编程中断控制器[A]PIC,时钟等等)封装出来变成便于应用程序开发人员使用的接口。&br&&br&每一代 Intel x86 平台的CPU之间对于操作系统核心来说的区别通常是很小的,而且一般来说对较早的软件是兼容(仍然可以运行)的,只是想要发挥其新增特性的能力,往往需要操作系统做些改动来配合。举个例子,比较大的变化,例如超级页(superpage)、内存页的执行禁止属性(NX bit),需要操作系统的虚拟内存子系统做许多改动来实现动态地根据需要去映射,但不支持它操作系统也照样可以运行,只是性能会比较差罢了。又比如,CPU可能增加了某些性能计数器,或者可能电源管理增加了一些新的节能状态等等,这些都必须有对应的驱动去支持,等等。&br&&br&主要的操作系统厂商如 Microsoft、Apple、RedHat、Oracle,以及许多开源操作系统的开发者往往都和 Intel 有某种程度的合作(当然,有些资料可能需要签署 NDA 才能获得;即使是同一家公司,也未必所有人都能看到)。但事实上的驱动大部分是写操作系统的开发者自己写的,有时 Intel 实在捉急^H^H着急看不下去了,或者某个操作系统比较重要,确实也会直接写一些驱动或提交补丁。&br&&br&对于写操作系统的人来说,可以通过 Intel 的三卷本软件开发者手册 &a href=&//link.zhihu.com/?target=https%3A//www-ssl.intel.com/content/www/us/en/processors/architectures-software-developer-manuals.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Intel(R) 64 and IA-32 Architectures Software Developer Manuals&i class=&icon-external&&&/i&&/a&(有些人士将其俗称为SDM)来了解处理器各方面的性能和使用方法。这套书巨细靡遗,介绍了作为系统程序员需要了解的关于 Intel 处理器的&b&所有&/b&需要的知识,从编程环境、细到每个指令在何种情况会触发哪些异常及寄存器影响的完整指令集介绍,到系统程序员开发手册,包含内存、任务管理、中断及多处理器管理、电源管理、虚拟化支持等等),并且提供了许多示范伪用的代码。&br&&br&题外话:大约在美国上次经济危机彻底爆发之前,也就是大约2008年前后的时候,曾经是可以在 Intel 网站上填写自己的地址免费索取印刷版本的,我当时觉得 PDF 在屏幕上看着有些费劲,于是也没细想这套书印出来会有多厚,就十分中二地申请了一套。邮递员送到时是一个大箱子,除了觉得 Intel 真是业界良心之外,其实也给后来搬家带来了一些困扰。现在这套书只能从 Intel 网站下载或从它们合作的一家按需印刷的出版社订购了(由于书的厚度,全套大约要 $150-$160 的样子)。无论从便于查阅、搜索和搬家,或是环保(这书随时可能更新,而且平装书也不适合收藏)的角度考虑,我个人都强烈建议感兴趣的同学直接看电子版。&br&&br&对于准备自己写 BIOS 的系统程序员,则还需要一些更底层的资料(这些资料对于写操作系统来说是完全不需要的),但有些资料必须和 Intel 签署 NDA 才可以获得。Intel 在 Source Forge 上有一个 UEFI 的工具集,其中有不少示范代码,但遗憾的是代码并非文档,许多时候只能通过它们了解 How 而不是 Why。&br&&br&有些答案中提到了 microcode(中文大致是“微码”),这个实际上是 CPU 的固件,并非驱动,其作用主要是实现 CPU 给程序员用的指令集。Intel 经常会发布用于绕过现有处理器某些问题的新版 microcode 数据,这个可以从它的网站上下载。一般来说,这些数据是通过 BIOS 更新提供给最终用户的,操作系统和BIOS开发人员并不需要知道其具体内容是什么(这部分属于 Intel 的商业机密)。&br&&br&工作量方面,以 FreeBSD 为例,如果设计时考虑了移植问题,真正与硬件紧密相关的部分应该是在几万行以内的水平(大约10%-15%左右的汇编),最重要的部分可能一两万行代码(其中大概2000行左右的汇编)就可以搞定了,而且这里面许多可以用其他平台的支持代码作为模板,因此对于熟练的开发者来说,一个星期之内应该就可以把操作系统内核移植到新的CPU上并且大致跑起来了。当然,这是在编译器、汇编器、加载操作系统的系统固件如BIOS/EFI等等都有已经有人写好了的前提下。&br&&br&补充回答一下问题中补充的问题:&br&&br&1. 操作系统加载后,仍然需要识别CPU(kernel driver, or kernel extension ),例如其核心数,hyper thread , power management&br&&br&以上这些,不同的 CPU 之间的差异并不太大。比如某些新增特性只是 CPUID 返回的一个新的 bit,之前这些 bit 在文档中没有定义,只要加上就好了。至于其对应的功能,比如读随机数之类的,往往是根据 CPUID 返回的数据决定是否做某些初始化或加载对应的驱动(这种使用 CPU 指令的驱动并不需要额外的 I/O 操作,因此结构也非常简单,通常只是把对应指令封一个恰好够操作系统用的接口出来,最多最多加上一些状态切换,一般几十行C甚至汇编就搞定了)。还有一个比较重要的来源是 ACPI 的数据,Intel 经常会发布新版的 ACPICA(开源)来支持这些功能,这部分的许多开发工作是 Intel 在上海的研发中心做的。&br&&br&2. 特别是集成显卡。这一部分驱动是怎么写的呢。显然更新换代后老驱动是没法用的,一个例子就是黑苹果无法在has well E 和 sky lake 上获得本地支持。&br&&br&集成显卡在 OS 看来还是一个独立的 PCIe 设备,Apple 的硬件本身并没有什么特别,但是其 EFI 是自己控制的,想要加点东西进去帮助识别,或故意完成某些本应操作系统去做的初始化是很容易的,操作系统中只要略去这些初始化就足以让黑苹果的屏幕花掉了,一个额外的好处是,这样可以让启动过程显得更连贯(我这么说其实有些本末倒置,其实这才是主要目的,让黑苹果不能用是副作用)。&br&&br&OS X 还有一些优化是通过和用户态进程共享特定的内存页来实现的。操作系统内核启动时,可以根据不同的CPU给出某些用户态函数的优化版本,严格意义上说这个并不是驱动,但在地位上有异曲同工之妙。
事实上操作系统本身不就是中央处理器的“驱动”吗? 虚拟内存、中断处理、时钟、进程管理等等,其实都是在把处理器的对应功能(内存管理单元MMU、[高级]可编程中断控制器[A]PIC,时钟等等)封装出来变成便于应用程序开发人员使用的接口。 每一代 Intel x86 …
&p&谢邀。我在以前的答案回答过,嵌入式这个领域最大的坑就是定义不清或者&b&定义太广泛&/b&。&/p&&br&&p&基于STM32的开发属于微控制器开发领域,主要开发工具是&b&keil&/b&或&b&IAR&/b&,这种开发更准确的说法是&b&单片机开发&/b&或者硬件开发;而招聘里所说的嵌入式开发,开发环境是&b&基于Linux操作系统&/b&,这种开发一般会分为几个层次:驱动开发、操作系统层开发、应用层开发。开发后者所需了解的知识和前者的不是在同一个层次上。&/p&&br&&p&如果玩过Arduino和树莓派,那么这个就很好理解了。STM32开发和Arduino是同一个层次,处于微控制器级别;嵌入式Linux开发和树莓派一个层次,属于微处理器级别。&/p&&p&更详细地说,单片机开发主要在于&b&控制&/b&、&b&检测&/b&和&b&传输&/b&数据,比如控制继电器开关以控制门锁,检测温湿度上传数据到网关。而处理器除了可以做单片机的事,还可以处理音视频等&b&计算量&/b&很大的任务,有&b&文件管理系统&/b&也有&b&更多的存储空间&/b&,以及该平台所提供的「&b&开封即用&/b&」的工具(即安装后就可以直接使用),比如在树莓派上运行一个人脸检测系统是没问题的,在树莓派上搭建Web网站也是很方便的。&/p&&br&&p&嵌入式Linux使用的主控芯片比STM32更高级。什么叫高级?除了运行速度内存空间等特性以外,从拿到芯片开始开发,到最后成为一个完整的产品原型或方案,其过程&b&需要用到很多开发工具&/b&,硬件电路板的设计、驱动层和系统层代码的移植,应用层代码的编写,这些是需要一个团队合作完成的,当然大牛也可以独立完成,但是需要非常非常多的精力,同时项目周期也会拖得非常非常的长。&/p&&p&嵌入式Linux开发,不是像单片机开发那样设计好硬件后,只需要打开IDE编写代码,然后烧录测试改代码烧录测试改代码。&/p&&br&&figure&&img src=&https://pic4.zhimg.com/7b055bd9b58ef9ed4898f_b.png& data-rawwidth=&473& data-rawheight=&453& class=&origin_image zh-lightbox-thumb& width=&473& data-original=&https://pic4.zhimg.com/7b055bd9b58ef9ed4898f_r.png&&&/figure&&p&放上一张ARM芯片内核汇总图片。其中STM32内核属于&b&Cortex-M&/b&系列,嵌入式Linux所用内核可能是&b&Cortex-A&/b&系列。有的Cortex-M不支持MMU内存管理单元,据我所知最多只能上到 uC/OS系列的嵌入式系统,而Cortex-A支持MMU,可以上类Unix系统。一旦上了类Unix系统,底层的东西就可以&b&封装&/b&起来,只提供接口给上层开发人员。&/p&&br&&p&这里科普一下。如果学过&b&面向对象编程&/b&,那&b&封装&/b&和&b&接口&/b&就很容易理解。封装是把实现细节尽可能的隐藏起来,对外提供一个或多个公共接口,开发人员只需要知道这个接口怎么调用即可,不需要知道是怎么实现的。这一点和基于单片机开发很大不同,单片机开发本质就是“&b&面向寄存器开发&/b&”。而嵌入式Linux开发,是&&b&面向N-1层开发&/b&&,比如应用层就是“面向操作系统层API开发”。&/p&&br&&p&当然,现在STM32有了&b&STM32Cube&/b&这个开发工具,就好像把STM32开发封装一层并提供接口一样。但对我来说,Cube只是一个“开发框架”或&中间件&,Cube使开发者配置引脚更省心省力,同时把寄存器封装了一层,以更友好的方式告诉开发者,开发者只需要根据接口文档提供的接口去调用即可(可惜Cube的文档、学习和开发资料太少)。我要是不用Cube,也可以开发STM32,没有Cube以前开发者都是直接看&b&芯片手册&/b&开发的。&/p&&p&而对于嵌入式Linux开发,则不能脱离N-1层,不了解底层API都不知道要做什么,例如使用TCP,至少也要知道Socket接口,例如编写Web管理页面,至少也需要一个Web框架(比如Python的Django)及Web服务器(比如Apache)。当然,由于嵌入式Linux都是基于类Unix开发,很多接口及其知识都是通用的,掌握了底层接口以后可以更多的关注业务逻辑。而在单片机开发中,换了一个芯片就需要重新看芯片手册,哪怕是实现相同的功能也有种重新开发的感觉,所以&b&芯片选型&/b&阶段也是重中之重。嵌入式Linux应用层开发则不用那么麻烦,只要操作系统是类Unix,底层提供相同的接口即可代码重用。&/p&&br&&p&以上,是我对嵌入式Linux开发和STM32开发(单片机开发)两者之间的见解,欢迎评论区讨论及交流。&/p&
谢邀。我在以前的答案回答过,嵌入式这个领域最大的坑就是定义不清或者定义太广泛。 基于STM32的开发属于微控制器开发领域,主要开发工具是keil或IAR,这种开发更准确的说法是单片机开发或者硬件开发;而招聘里所说的嵌入式开发,开发环境是基于Linux操作系统…
现在学51单片机,大概一个月能赚3000左右。还在拿51单片机忽悠人写个跑马灯、AD/DA之类的,或者以写过C51为自豪的,基本都是些什么人我就不列举了。大一连数电和微机原理都没上过,就硬要上单片机这种跨领域的东西,简直是囫囵吞枣,自取其辱。90%的人的单片机开发之旅,基本还没到写个温控传感器、键盘矩阵、LCD液晶屏就半途而废了。单片机对于大部分人技术上的积累没有半毛钱的好处。&br&&br&况且你花一个月调试写的单片机程序,焊接的板子,可能就是人家用Raspberry Pi插上外设一下午的工作量。不要高估了自己对硬件底层实现和理解的能力,大部分执着于单片机硬件闷头造轮子而不用现成产品大一的小朋友,都是(不友善内容)。&br&&br&现在你还是大一,小朋友,叔叔推荐给你三本书:CSAPP,Deep Learning,Introduction to Algorithms。有时间的话再把React,Vue,node.js看一看。&br&&br&坚持劝退51/STM/飞思卡尔/AVR/STC单片机一百年不动摇。
现在学51单片机,大概一个月能赚3000左右。还在拿51单片机忽悠人写个跑马灯、AD/DA之类的,或者以写过C51为自豪的,基本都是些什么人我就不列举了。大一连数电和微机原理都没上过,就硬要上单片机这种跨领域的东西,简直是囫囵吞枣,自取其辱。90%的人的单…
&p&&b&任何职业其实都和年龄没有必然联系,简单说说我的经历:&/b&&/p&&p&  我英语毕业,然后进银行做了&b&6年&/b&会计,后来辞职。做了2年销售,又自学设计,平面效果图+一点视频后期。2004年来到北京,开始做美工,一年后,边做美工边学习网站编程,&b&那年29岁&/b&。&/p&&p&  有两年时间,我手机和QQ几乎是不开,完全在一封闭的环境里不停地学习和干活。后来我的领导承包了新浪的一块业务,我也就跟着去了新浪。&/p&&p&  一开始是没有自信的,去了大公司才发现,其实他们水平没那么强,只有很底层很核心的开发人员才值得膜一下。&/p&&p&  再后来我就写了一套自己的架构,也做了两年公司的技术总监,凡客诚品、红孩子,酒仙网... 太多一线电商的技术总监都是我朋友,我的徒弟都在京东做到技术经理了。&/p&&p&  再后来,&b&36岁&/b&我就尝试性地自己创业了,你看我在IT的职业生涯其实就用了&b&7年&/b&。今年我&b&42岁&/b&,经营自己的项目,天天还在写代码啊,从来没放下过,已经写了&b&12年&/b&的代码了。&/p&&p&  最后可能会有人问,你业余出身,写代码能找到工作吗?&/p&&p&  嗯... 我的第一份IT的工资是1500元/月,现在我的收入已经增长了近200倍。&/p&&p&&b&所以,职业做得好不好,不在于年龄,而在于喜欢,&/b&只是为了收入和金钱,您还是别改行了。中年转行,&b&你更需要的是一个起点一份热爱,而不应该是一个职位。&/b&&/p&&p&  ------------------------------------------------------&/p&&p&  评论区有人觉得,现在招人都要求有相关工作经验,业余转行找工作很难,所以我觉得有必要给大家提供一点干货。&/p&&p&  首先,你要明白,你是业余出身,而且是中途转行,如果人生是一场游戏,那其实你是在选择一种&b&困难&/b&甚至是&b&地狱&/b&模式,如果你还用&b&普通&/b&模式与和别人竞争,那结局早就注定了。&/p&&p&  很多时候,我们不怕努力(虽然很多人的努力也只是挂在嘴上),但你要知道,&b&努力只是个必要条件,它不是个充分条件&/b&。更多时候,我们更需要一个机会,这个机会从哪里来呢?它不会自己来到你面前的,需要你自己来创造。&/p&&p&  我刚到北京的时候,有两个月没找到工作,明明我有设计基础,而且不算差,但因为没做过美工,所以肯定没人要我的。我口袋里的钱只够租150元的床位了,再找不到工作,我连吃饭都有困难了。&/p&&p&  我就去网吧找了几份和自己水平相近,但稍稍比自己水平高一点的企业网站,仔细熟悉了一遍,截了图,就说成是我做的。过了几天就有人要求我去面试了,面试的时候,对方说工资不高,让我画一个频道页面,水平合格就可以来上班,我连夜做了一张,这就是我的第一份1500元的工作。&/p&&p&  你要知道,我们之所以能竞争过那些专业出身的人,归根结底是因为他们高不成低不就。听说过猎狗和兔子的故事吗?&b&人家奔跑只是为了顿午餐,你却是为了活命啊&/b&。&/p&&p&  今天有点忙,有空继续跟你们往下谈。&/p&&p&  ----------现在有空继续说-----------------&/p&&p&  找到了1500的美工的工作以后呢,我肯定是不满足的。&/p&&p&  现在很多人觉得,老板给我的钱有多少,我就干多少活。但我不这样认为,我觉得如果我值1万的价值,我跟别人要1万是不会有人给我的,但我如果值10万,跟别人要1万,那肯定有无数人愿意给我,价值永远应该在薪水之前。&/p&&p&  如果老板给得钱少,你干得活就少,那就会走向恶性循环。实际上当我们刚进入一个行业的时候,我们都是学徒,你去学习还要交学费呢,老板给你发了工资,为了出活还不得不指导你,你不觉得其实老板才是我们的启蒙老师吗?&/p&&p&  所以我入行以后,只要是力所能及的所有活,我都不拒绝。只要我觉得对我的技术有增长有帮助,我都抢着干,每天都加班到很晚。一是因为我租的是床铺,回去就没有电脑了,二是我加班可以在公司包一顿晚饭。&/p&&p&  你知道做美工应该是我先做好页面,然后由程序员来嵌入代码和数据的。但我觉得设计太吃青春饭,很容易被替代。为了学习编程,除了自己看书,我还向和我一起搭档的程序员请教。为了让人家愿意教你,我是让他直接写读取数据的代码,然后我负责和页面进行搭配。一方面可以更直观地学习人家的代码,二是人家觉得不好意思,可以多教我点东西。&/p&&p&  我加班变态到老板都觉得不好意思,直接把我的工资涨到2000。&/p&&p&  有一次,吃完午饭和老板聊天时,老板忽然对我说,我知道你在我这里做不长久的。我心里一惊,就问为什么?老板说,我给你的工资不值得你如此努力,你这么拼命,肯定是想有更好的发展。&/p&&p&  气氛一度比较尴尬,我正想说点什么,老板又笑了说,我的庙有点小,你应该有更好的发展。我有点感动,这年头没有人是傻瓜,你做或者不做,人家嘴上不说,其实心里也有一杆称。&/p&&p&  总之后来,我用了半年的时候把公司的网站改了一遍版,我人生的第一个网站就是 &a href=&//link.zhihu.com/?target=http%3A//www.soft6.com& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://www.&/span&&span class=&visible&&soft6.com&/span&&span class=&invisible&&&/span&&i class=&icon-external&&&/i&&/a&。改完了版,我对程序也有了一个基础,于是我就跳槽了。&/p&&p&  ---------------------------------&/p&&p&  当时我决心跳进程序猿的坑里,就在网上找了三家公司,发了简历,说公司的网站是我开发的。因为有作品,一天之内这三家公司都给我回了信,要求我去面试。&/p&&p&  于是我就挑了一家,虽然我只做了美工部分,但因为所有代码都是我和页面进行的搭配,所以也算是有问有答,整个过程很自信。技术总监比较满意,就让我过几天来上班了。工资定为3500。&/p&&p&  所以你看,别人没义务去相信你的,之所以愿意给你机会,一定是你先给了别人一个诱惑,或者先小吹了一个牛皮,别人就会来试试你,过得去就有机会。&/p&&p&  其实起点低并不可怕,只要不眼高手低,愿意扎实&b&从头开始&/b&,不断地&b&骑驴找马&/b&,只要不断积累作品,业余转行其实也可以成功的。&/p&&p&  当然,找工作遇到的这点困难,和我后来的事情相比,就不值一提了,有机会再聊吧。
任何职业其实都和年龄没有必然联系,简单说说我的经历: 我英语毕业,然后进银行做了6年会计,后来辞职。做了2年销售,又自学设计,平面效果图+一点视频后期。2004年来到北京,开始做美工,一年后,边做美工边学习网站编程,那年29岁。 有两年时间,我手机…
发现上午写的所谓的书的结构有问题,所以答案重新写了。可能有几个问题要先区分一下,第一个是“嵌入式linux”,答案里面可能讨论的是“嵌入式”的linux开发,所以我的理解是跑在MCU上面的Linux开发而不是跑在高端CPU上的Linux开发,因此,不会涉及服务器编程,更遑论高并发了。还有,也排除拿N块RPi搭个集群跑Mapdeduce的开发,跑分布式计算之类的,这些都是另外的话题;第二个是不会涉及开发操作系统(写内核)相关的书籍;第三个是不把Android归为这一类;最后就是可能会推荐一些除了书籍之外的资料,比如公开课,blog之类的。&br&&br&这里可能推荐的是一些自己浑沦吞枣过的或者是正在看的,如果是完全没有接触过的话可能不敢在这推荐了。由于自己的水平非常有限,只能以很有限的能力和认识来推荐,所以希望大家多指正,补充。&br&&br&我的思路是这样的,从底层到上层,从基础到应用。基础、底层的东西不一定简单,上层、应用的东西不一定复杂。不一定要按照这个顺序学习。&br&&br&&br&&br&&b&底层:&/b&&br&首先是&a href=&//link.zhihu.com/?target=http%3A//book.douban.com/subject/5333562/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Computer Systems:A Programmer's Perspective(CSAPP) &i class=&icon-external&&&/i&&/a&&br&在coursera上有UW的公开课:&a href=&//link.zhihu.com/?target=https%3A//www.coursera.org/course/hwswinterfacehardware& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Hardware Software Interface&i class=&icon-external&&&/i&&/a&,书是该课推荐的参考资料,并且会涉及书上大量的实验。最近还没开课,同学可以留意下,不过网上可以下到往年的教学视频。&br&&br&x86和ARM是Linux常见的两种载体:&br&x86:&a href=&//link.zhihu.com/?target=http%3A//www.intel.com/content/www/us/en/processors/architectures-software-developer-manuals.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Intel IA-32 Architectures Software Developer Manuals&i class=&icon-external&&&/i&&/a&&br&ARM: &a href=&//link.zhihu.com/?target=https%3A//silver.arm.com/download/ARM_and_AMBA_Architecture/AR580-DA-7-05rel0/DDI0403E_B_armv7m_arm.pdf& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&ARMv7 Architecture Reference Manual &i class=&icon-external&&&/i&&/a&&br&&a href=&//link.zhihu.com/?target=https%3A//silver.arm.com/download/ARM_and_AMBA_Architecture/AR150-DA-7-00bet7/DDI0487A_f_armv8_arm.pdf& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&ARMv8 Architecture Reference Manual &i class=&icon-external&&&/i&&/a&&br&值得一提的是,x86手册分为三卷,如果不是为了写操作系统,看第三卷软件部分即可。&br&&br&计算机底层部分推荐了这些资料,好像跟Linux八竿子打不着。在Linux上做应用开发,忽略上面讲的这些也是可行的。但是,当你遇到很多底层相关问题(如内核,驱动)时,扎实的底层基础是solution的源泉。&br&&br&&b&语言:&/b&&br&主要的开发语言有两种:C和汇编&br&&br&C语言:&br&&a href=&//link.zhihu.com/?target=http%3A//book.douban.com/subject/1139336/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&The C Programming Language,Second Edition&i class=&icon-external&&&/i&&/a&&br&&a href=&//link.zhihu.com/?target=http%3A//book.douban.com/subject/1102097/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&C Traps and Pit Falts&i class=&icon-external&&&/i&&/a&&br&&a href=&//link.zhihu.com/?target=http%3A//book.douban.com/subject/3012360/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Pointers on C&i class=&icon-external&&&/i&&/a&&br&推荐这三本既是主流也是非主流,第一本很薄,讲了C的基本概念;第二本主要侧重于C语法;第三本,还是比较推荐的,C的入门与否在于指针是否能够熟练使用,这本书主要侧重于指针的应用角度来讲C,建议课后的习题可以边学边做。值得注意的是,学习时要把指针函数和函数指针这里概念弄清,在内核开发和驱动开发有大量的应用。&br&&br&在应用开发中,对数据结构和算法的要求不高,当然,常见的数据结构,如链表(单向,双向,双向循环)、堆、栈等还是需要熟练掌握的。&br&这里推荐一本:&br&&a href=&//link.zhihu.com/?target=http%3A//book.douban.com/subject/1139426/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Data Structure and Algorithm Analysis in C,Second Edition&i class=&icon-external&&&/i&&/a&&br&这本书相对比较薄,难度上比算法导论这种还是简单的。&br&&br&汇编&br&实际上Linux应用开发中涉及汇编的不多,多见于内核开发,写的不多,以读懂为主,比如调试的时候objdump出来的代码能读懂即可。&br&&a href=&//link.zhihu.com/?target=http%3A//infocenter.arm.com/help/basic/help.jsp%3Ftopic%3D/com.arm.doc.dui0204ic/Cjafgdih.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&汇编指令&i class=&icon-external&&&/i&&/a&--------讲述一些汇编的基本指令&br&在一些底层应用开发的时候,为了是效率更高,我们通常会使用内联汇编:&br&&a href=&//link.zhihu.com/?target=http%3A//www.ibm.com/developerworks/library/l-ia/index.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Inline assembly for x86 in Linux&i class=&icon-external&&&/i&&/a&&br&关于汇编的一些使用在后面提到的书籍中还会有进一步的涉及&br&&br&&b&操作系统:&/b&&br&&a href=&//link.zhihu.com/?target=http%3A//book.douban.com/subject/3852290/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Mordern Operating System,Third Edition&i class=&icon-external&&&/i&&/a&&br&&a href=&//link.zhihu.com/?target=http%3A//book.douban.com/subject//& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Operaating System---Internals and Design Principles,Seventh Edition&i class=&icon-external&&&/i&&/a&&br&第一本书不用多说了,业界名著;至于第二本书,是清华学堂在线MOOC操作系统课的推荐书籍,最近我也在看,相对来偏向于原理叙述为主。&br&操作系统作为CS本科的基础课程,是最为综合的一门课程,在这门课程里面我们接触到了内存管理,进程,线程调度,IO等等原理概念,这些概念在操作系统开发上,不仅仅是Linux,是基本功。所以,到了这一步,虽然还没涉及Linux,但是相关的概念却是以后开发的基础。&br&不过,操作系统的学习本身非常枯燥,最好结合实验来做。&br&&br&&b&Linux基础&/b&&br&这一块暂不涉及Linux开发,主要还是涉及对Linux的使用和认识上,推荐:&br&&a href=&//link.zhihu.com/?target=http%3A//book.douban.com/subject/4889838/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&鸟哥的Linux私房菜.基础学习篇(第三版) &i class=&icon-external&&&/i&&/a&&br&这本书作为Linux入门广为流传的书籍,讲述了很多linux的基础知识,从安装到简单的脚本配置,到各种命令的使用等等。厚是厚了点,不过,初学者颇为受用。&br&&br&&b&Linux开发基础&/b&&br&&a href=&//link.zhihu.com/?target=http%3A//book.douban.com/subject/4831448/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Beginning Linux Programming,Forth Edition&i class=&icon-external&&&/i&&/a&&br&这本书讲述了Linux的一些开发基础,包括文件操作,进程,线程,管道等开发,这些与前面操作系统原理基本相对应,是原理的实践。学这本书的时候,只需要有一台电脑,里面装了Linux某发行版即可实践。基本上把书上的练习和代码都练过后对之后的驱动开发或者内核开发大有裨益,而且,在有前面扎实的C和操作系统基础的情况下,普通的应用程序开发也不会是瓶颈。&br&&br&Linux开发过程中少不了这几个要素:&br&Shell:
&a href=&//link.zhihu.com/?target=http%3A//book.douban.com/subject/5286665/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Practice guide to Linux commands,editors,and shell programming&i class=&icon-external&&&/i&&/a&&br&调试工具:GDB(在书中会有涉及)&br&编译工具:&a href=&//link.zhihu.com/?target=https%3A//gcc.gnu.org/onlinedocs/gcc-4.9.2/gcc/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&GCC&i class=&icon-external&&&/i&&/a&&br&&br&&b&Linux 驱动开发&/b&&br&&a href=&//link.zhihu.com/?target=http%3A//book.douban.com/subject/1723151/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Linux Device Drivers,Third Edition(LDDR3)&i class=&icon-external&&&/i&&/a&&br&这本书基于2.6版本的内核,主要讲述了三种常见的驱动类型:字符设备驱动、块设备驱动、网络设备驱动;书中关于PCIe和USB驱动也有讲解,这个可以根据自己的实际使用情况来考虑。较新的内核版本的驱动框架与书中介绍的会有出入,但实际上本质一样。驱动学习的有效路径之一是学习内核提供的各种设备的驱动代码。现实应用中需要开发Linux设备驱动的场合可能不是很多,但是通过对驱动的学习可以了解到很多设计思想,对于应用开发也是有好处的。&br&&br&&b&Linux 内核开发&/b&&br&对于想从事内核开发或者开发内核的工程师来说,Linux的内核是很重要的学习内容。作为内核初学者,直接拿成熟的2.6或者3.x内核来学习显然是很痛苦的事情。所以可以考虑从低版本内核学起:&br&&br&&a href=&//link.zhihu.com/?target=http%3A//book.douban.com/subject/3229243/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Linux内核完全剖析 &i class=&icon-external&&&/i&&/a&&br&这本书分析的内核版本为0.12,是20年前的linus的作品,代码量不过2w行,麻雀虽小,五脏俱全。通过这个版本的学习可以作为深入了解内核的敲门砖。&br&&br&&br&&b&ARM&/b&&br&&b&1.ARM体系结构与开发&/b&&br&&a href=&//link.zhihu.com/?target=http%3A//product.dangdang.com/7403136.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&ARM体系结构与编程&i class=&icon-external&&&/i&&/a&&br&&a href=&//link.zhihu.com/?target=http%3A//product.dangdang.com/9034832.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&ARM嵌入式系统开发:软件设计与优化&i class=&icon-external&&&/i&&/a&&br&这两本书有点类似,基本上都是从体系结构开始,到汇编指令到软件开发。基本上择一从之即可,实际的开发可以看具体ARM芯片的datasheet。&br&&b&2.ARM开发实践&/b&&br&&a href=&//link.zhihu.com/?target=http%3A//book.douban.com/subject/3152027/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&嵌入式Linux应用开发完全手册 &i class=&icon-external&&&/i&&/a&&br&&a href=&//link.zhihu.com/?target=http%3A//pan.baidu.com/share/home%3Fuk%3D%23category/type%3D0& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&韦东山--嵌入式Linux视频&i class=&icon-external&&&/i&&/a&&br&通过前面的原理和技术积累,终于可以开始实践了。这里主要还是推荐韦东山的相关材料。书和视频的第一二期相辅相成,从裸机开发到linux移植到uboot到根文件系统到常见外设驱动开发。基本上理了一遍嵌入式Linux在ARM上的主要应用流程。视频和书的讲解都比较详细。当然还是要买一块开发板来学,不一定要使用视频推荐的板子,可以使用其他的ARM9开发板。虽然这里介绍的ARM9,但作为入门足矣。&br&&br&如果学习顺序是从这一步开始的话,并非不可,通过书本学习和实际操作,入门和进步应该很快,但少了之前的基础,坦率讲,也只是学到了“匠”的技能罢了。&br&&br&&br&在这些资料中,忽略了关于Linux强大的网络开发的资料,但我想,这块并不属于嵌入式Linux的主要内容,所以也没提及。&br&希望能随着我的了解更加深入,能进一步更新吧。&br&&br&&br&//---------------------------------------------更新---------------------------------------------//&br&好吧,先把结构写一下,回头再更:&br&体系结构:&br&语言:&br&操作系统:&br&应用开发:
发现上午写的所谓的书的结构有问题,所以答案重新写了。可能有几个问题要先区分一下,第一个是“嵌入式linux”,答案里面可能讨论的是“嵌入式”的linux开发,所以我的理解是跑在MCU上面的Linux开发而不是跑在高端CPU上的Linux开发,因此,不会涉及服务器编…
几个我买过的吧,没买过的不评论。&br&&br&cubieboard:算是国内较早出现的,性能不错,且可以按照一定节奏更新产品。质量上没啥问题,我总计买过40多个,经常使用的有10个,至今除了一个被我误接12V烧坏的以外,还没有损坏的。最高端产品是A80芯片的,性能可观。&br&&br&orangepi:价格便宜的令人发指,二代产品基于H3芯片,四核cortex-a7。性价比无人能及。99元买过一个,使用不多,没坏。&br&&br&pcduino:主打兼容arduino的引脚位置,有公开出版的书籍。买过3个搭建nas集群,开机一个多月了,网卡会经常失效需要重连,也许是驱动问题。总的来说性能稳定。&br&&br&bananapi:具备sata口最便宜的选择,买过3个,做nas集群,两周内就全都坏了,非常不建议购买。&br&&br&以上所有板子用的都是深圳全志的芯片,可见全志在开源上的支持力度。常用设备的驱动都有。但一些稍微高级点的芯片内外设的驱动不提供或支持力度较差。比如GPU,VPU,CSI摄像头,模拟视频等等。&br&&br&补充一下几种开发板的运算性能。ARM在ARMv7时代,有个计算性能的系数,即DMIPS/MHz。相当于每1MHz所提供的执行指令数。Cortex-A7为1.9、Cortex-A8为2.0、Cortex-A9为2.5之类的。&br&&br&cubieboard1使用AllWinner A10芯片,频率1.0GHz,Cortex-A8,所以其性能就是2000 DMIPS。&br&&br&cubieboard2/A20使用AllWinner A20芯片,频率1.0GHz,双核Cortex-A7,性能3800 DMIPS。&br&&br&cubieboard3/cubietruck也是使用A20,不谈。&br&&br&cubiebaord4/CC-A80:使用allwinner A80芯片,4核心Cortex-A7+4核心Cortex-A15,频率2.0GHz,性能47200 DMIPS。尤其是他的Cortex-A15核心,性能虐一下ATOM还是很容易的,在一些矩阵运算和OpenCV中,可以虐i3。另外其内置的GPU为G6230,计算性能为68 GFLOPS,前提是你必须用android,且会使用OpenCL-1.1。&br&&br&树莓派1代就算了,树莓派2代是4核Cortex-A7,0.9GHz,性能6840 DMIPS。而反推树莓派1的CPU性能是树莓派2的1/6,所以树莓派1的性能是1140 DMIPS。值得一提的是两个时代的树莓派CPU

我要回帖

更多关于 嵌入式系统人才需求 的文章

 

随机推荐