热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

嵌入式的发展方向

嵌入式的发展方向有很多,门槛高低不一样。具体来说:1.单片机:工控程序(不跑os)--入门容易,无外乎就是掌握汇编和c,能够根据datasheet来写,发展前景一般,也没有太大的技术难度,除非你在算法
嵌入式的发展方向有很多,门槛高低不一样。具体来说:

1.单片机:工控程序(不跑os)--入门容易,无外乎就是掌握汇编和c,能够根据datasheet来写,发展前景一般,也没有太大的技术难度,除非你在算法上面有优势,比如智能车会各种PID,模式识别上会神经网络,优化上会遗传算法等等,但是这些复杂的控制一般就不会裸奔了(除非环境恶劣),肯定是处理器强悍,带os的;硬件制作--就是数字电路,涉及单片机的外设,感觉难度也不高,据我说知,只会单片机无论硬件还是软件工资都不高,也没有特别大的技术含量,同时,单片机更新换代特别快,你需要从大量的单片机中找寻适合产品的,看不同的datasheet。

2.ARM:这个搞的人很多,软件上就是
(1)写底层驱动,这个入门,深入都不容易,需要对硬件及os有较深的了解,发展还是很不错;
(2)操作系统-比较复杂,linux,android等,你看现在很多手机厂商推出的操作系统也就是修改内核,换皮肤,就业还是很容易的;
(3)应用程序,就是android开发或者Linux上应用开发(QT等),做的人很多,就业容易待遇也不错,需要掌握c++/java。

硬件上
(1)就像手机一样在处理器上做整体的电路,比单片机入门难的多,做成技术大牛了不缺钱。
(2)soc,架构开发等后面会提到。

3.FPGA:就是硬件编程,入门很简单,做深很难,要对时序有非常深的理解和大量的项目开发经验,就算你做的特别好,前景还是不明确。FPGA近年的一大热门就是软件无线电,成本还降不下去,同时AD采样速度目前不够,导致FPGA的应用有限,一般公司都是把它作为一个验证工具比如IC设计上的验证。只会FPGA就业会很窄,也不理想,建议作为工具学习。

4.DSP:就是算法,你需要一个名牌大学研究生以上学历,同时在算法和数学上有很强的能力。如果做不到,就不用搞了。

5.IC设计,做微处理器上的soc,前端后端,专用处理器(应该也属于嵌入式领域),入门难,成为牛人更难,对计算机体系结构,微处理器结构,集成电路等等有比较深的认识,然后项目经验大大的有才行。不过国内行情一般,外企招人少,希望国家的扶持政策能够发挥作用。

6.微处理器体系结构:偏理论,偏宏观,研究生能够对整个体系结构有个比较浅的了解同时在局部上能够做一点设计工作,博士生能够对整个结构有较深的认识在局部上能设计。现在搞的多的是高性能体系结构,低功耗结构,并行开发等等,因为功耗和并行限制了目前处理器的速度,所以在低功耗和并行上开发有很大的前景,同时基于神经网络的架构处理器,云计算处理器等专用处理器也是目前的一个热点。发展前景很好,但是难度不是一般的大,从中国在架构上做出的贡献在世界上分量很少就可以看出。


时成
嵌入式开发的门槛相对较高,对程序员的要求一般都是对底层感兴趣,学习能力、动手能力要强,对问题能够从全局和细节去把握,有很强的系统分析和设计能力。从工程师起步,一般有几个发展方向,一个是成为技术方面的核心,领域内的专家;另一个是从项目中锻炼起来,成为项目主管或是管理型人才;再有就是利用自己的技术及行业经验去创业。

硬件和软件的发展方向是不同的。说说软件需要学习的知识。

虽然说搞嵌入式软件更多时候是在实际的工作中学习的,但一些重要的基础知识不可或缺。

1. 计算机组成/微机原理
主要是为了了解微型计算机的硬件工作原理,明白CPU、总线、I/O、存储器等一些关键结构是怎么工作的,虽然是很枯燥的知识,但是对熟悉外围设备硬件工作方式,及操作系统,软件架构的设计及优化相当关键。

2. 操作系统
嵌入式产品应用比较广泛的是Linux和WinCE。但操作系统的内部设计原理都是殊途同归。首先要去学习的是操作系统原理,去了解进程通信、内存管理、文件系统等几个重要的部分,因为这些在软件开发尤其是内核驱动开发时会用到。接下来可以去熟悉至少一种主流的操作系统,Linux是一个很好的选择,去了解它的内核架构,设备驱动架构,如何去编译,裁剪,编写应用程序,以及如何使用在具体的嵌入式产品上。

3. 数字电路
学习这方面的知识主要是了解一些基本的电路知识,如门电路、逻辑电路、存储器、寄存器,为了更好的理解嵌入式芯片,存储器,外围设备等硬件的设计,但往往在软件开发中未必能用的到。因为大部分硬件都提供了很完整的软件接口。

4. 编程语言:C语言和汇编
对于C语言本身的基础来说,无非是把结构化,函数,数组,指针弄熟,但是嵌入式开发对C语言应用的要求会更高。要对内存分配,文件访问,寄存器访问,预处理指令,中断处理程序等等相当熟悉,这些都是在使用中要注意的细节问题。C语言对程序的优化也很重要,而这些往往是需要从全局去考虑。汇编一般是和处理器的指令集相关的,可以更好的去理解处理器的工作原理,往往是用在一些需要效率的地方,如系统的初始化。

5. 数据结构和算法
数据结构在嵌入式开发中也很重要,比如说操作系统里的很多实现都用到了具体的算法。基本的数据结构需要掌握,如各种链表,树,图等等;而算法的学习需要数学知识作为铺垫,用计算机语言去实现。对于软件从业人员来说,算法终究是一个工具,在实际应用时再深入挖掘也可。

6. 软件工程/软件测试/项目管理基础
这些是软件开发人员的必备知识。

7. 开发平台
嵌入式的开发平台不局限于一种操作系统,因此要熟悉各种操作系统下的命令、编辑器及开发工具,这一点往往被很多人忽视。举个例子,Linux下的程序员开发环境往往是按自己的习惯搭建,熟练掌握一种编辑器如Vim/Emacs可以大幅度提高工作效率。磨刀不误砍柴工。

嵌入式领域的方向是很多的,它所应用到的行业范围也很广。因此除了这些基础的知识以外,在具体的应用中可能还需要一些其它的知识,这些知识的每一种都可以研究的很深,举几个例子。

1. 内核,驱动及中间件
内核开发和驱动本身就是一个方向,驱动和硬件接口相关,而内核的修改和移植更是需要对OS有很深的理解。至于中间件,一般是基于OS或存在于OS和应用程序之间的库,最典型的就是基于Linux的Android。

2. 通信协议
通信协议有很多种,经常用到的有网络通信协议,无线通信协议,串口/USB通信协议等等。

3. 音视频技术
牵涉到音频视频处理,压缩,编解码等等。

4. 信息安全
如加密技术,身份认证,数字证书等等。

5. 行业知识
和具体行业或领域相关的知识,如通讯、工控、电子等等。

这里有一个我认为不错的学习步骤:

1. 基础知识中,计算机组成、操作系统、编程语言和数据结构是必需的。
2. 找一种CPU体系,了解其核心架构,学习指令集,比如说ARM。
3. 找一种OS,如Linux,或是传统RTOS,如Nucleus、eCos,读源码和文档,理解OS内部实现,包括进程,任务,消息机制,内存管理,设备驱动,中断等核心内容。
4. 找一块成熟的开发板,板级资料要齐全,熟悉嵌入式软件开发流程。
5. 在项目过程中深入学习其它的技术。

总之,这些知识的学习不是一蹴而就的,过程会很漫长,也没有什么特别的技巧。需要去看大量的技术文档和源码,而这些文档大部分又都是英文的。在工作和做具体项目的过程中会学习的比较快,理论结合实践才是王道。

教育梦想家
1.认清嵌入式设备的本质
嵌入式设备的本质就是一台专用的、微型计算机,所以就像计算机一样由三个层次的东西组成:

1)硬件,包括cpu(如Arm)、存储(如flash)、I/O(显示模块、通讯模块、视音频模块、I/O控制电路等)。
2)系统级软件,主要是OS和I/O软件如LCD、蓝牙、wifi、CDMA、声音等子系统。
3)应用软件,如基于ios的应用开发,基于android的应用开发,基于linux的应用开发。

2.选定学习方向
对于学习嵌入式来说,以上三个层次技术都了解一下是有好处的,但每层次都同时深入学习既增加学习难度也无必要,因为一个嵌入式设备肯定是由不同的人分工协作完成的,每个人精通某一层次上的技术就行了。

3.创建学习环境
如果能加入到老师的项目里,那是比较理想的。还有就是组队参加各种比赛。

如果自学,我的体会是:
1)对于想学硬件的,从学8位单片机入手,然后再学ARM、DSP、FPGA等比较容易。
2)对于想做系统级软件,从研究linux内核开始,可以买块ARM开发板来辅助学习。
3)学应用软件开发相对容易一些,网上资料也更丰富,有一个手机或开发板就可学习了。

刘enming
我认为嵌入式的未来在智能设备上,这意味着需要更多的传感器,需要OS调度,需要一些算法和更高的集成度。

以前的设备使用汇编语言编写,但现在基本已经看不到直接用汇编写程序的了。单片机性能的发展以至于汇编省下的那点性能还不够多出来的开发时间和维护成本。

同样的可以预见,未来不会是用C语言开发嵌入式。而是类似更高级的某个语言,很大概率会是java。因为安卓的开源,安卓手机硬件方案的泛滥及处理器性价比不断升高。完全可能出现类似将现行双核1G+4Gflash+1GRAM封装在一个模块内,只留些IO出来的模块。

当国内越来越多的公司可以生产这些IC时(这是必然的),这些IC的价格必然大大降低。这时候再去用C开发显然是不如java快的。

模块拿过来,加上电源,刷入为嵌入式定制过的安卓和开机自动运行的一个软件。在留出的IO上画上外围传感器等电路或者模块。(这是不是有点像PLC呢)

因为速度足够快了,价格也够低。已经没有必要在去纠结太多的算法提高效率,可以将各种功能做成模块(类似于计算机的DLL文件)

那时,开发是这样的,需要什么功能就接上什么模块,加入模块的dll,一个调用语句扩展那些费时费力但很多嵌入式设备中都能用到的功能,如语音识别.DLL、语音识别.ini、手势识别(图像识别)、HTTP/FTP服务(这个安卓自带)、心率诊断…………

硬件上一样的,各种集成。就是将原来的产品越做越小直到做成了一个IC,就像以前的晶体管电路,现在的设计已经很少见了。

人们设计产品时没必要再拘于内部电路的实现,这也是必然的。毕竟人的精力有限,如果每个人都从空穴多子学起,一辈子时间里能学到的高度就是固定的。

就像写java的人才不会管编译后的汇编是什么个鬼样子。

写python、matlab的甚至都不用去管解释成了什么鬼样子的C语言,用写好的函数(dll)就行了。

说了那么多废话,就是想说,除了C语言外,学门比C更高级的语言吧,python不错。

站在前人的肩膀上,不要花大量时间去将linux内核搞的清清楚楚了。知道安卓软件怎么写就行,不要再对语句的性能斤斤计较了,不值得。处理器性能过剩的年代,高端单片机和一个ADC、性能好点的运放差不多价格。需要整天用4bit单片机开发的公司就剩下满街都是的制造业了。

看远一点啊,毕竟嵌入式行业发展到现在也没多少个年头,十几年后会是什么样子还不知道,但肯定不会是现在的样子。

我认为中国嵌入式的未来一段时间都是可以预见的,无非是走发达国家走过的路。大量IC企业拔地而起,微电子成为高校基本都开设的专业,大量仿制现有国外高端设备,并且将价格做的极低,什么9999的B超,99999的CT,199998的核磁共振
推荐阅读
  • Python与R语言在功能和应用场景上各有优势。尽管R语言在统计分析和数据可视化方面具有更强的专业性,但Python作为一种通用编程语言,适用于更广泛的领域,包括Web开发、自动化脚本和机器学习等。对于初学者而言,Python的学习曲线更为平缓,上手更加容易。此外,Python拥有庞大的社区支持和丰富的第三方库,使其在实际应用中更具灵活性和扩展性。 ... [详细]
  • Java中高级工程师面试必备:JVM核心知识点全面解析
    对于软件开发人员而言,随着技术框架的不断演进和成熟,许多高级功能已经被高度封装,使得初级开发者只需掌握基本用法即可迅速完成项目。然而,对于中高级工程师而言,深入了解Java虚拟机(JVM)的核心知识点是必不可少的。这不仅有助于优化性能和解决复杂问题,还能在面试中脱颖而出。本文将全面解析JVM的关键概念和技术细节,帮助读者全面提升技术水平。 ... [详细]
  • 如何撰写PHP电商项目的实战经验? ... [详细]
  • 在并发编程中,`as-if-serial`原则确保了即使编译器和处理器对指令进行重排序,单线程的执行结果也不会受到影响。这一原则要求编译器、运行时环境和处理器必须严格遵守,以保证程序的正确性。本文深入探讨了`volatile`关键字的内存模型,详细分析了其在多线程环境中的可见性和有序性特性,以及如何通过`as-if-serial`规则来确保数据的一致性和可靠性。 ... [详细]
  • 本书详细介绍了在最新Linux 4.0内核环境下进行Java与Linux设备驱动开发的全面指南。内容涵盖设备驱动的基本概念、开发环境的搭建、操作系统对设备驱动的影响以及具体开发步骤和技巧。通过丰富的实例和深入的技术解析,帮助读者掌握设备驱动开发的核心技术和最佳实践。 ... [详细]
  • 从无到有,构建个人专属的操作系统解决方案
    操作系统(OS)被誉为程序员的三大浪漫之一,常被比喻为计算机的灵魂、大脑、内核和基石,其重要性不言而喻。本文将详细介绍如何从零开始构建个人专属的操作系统解决方案,涵盖从需求分析到系统设计、开发与测试的全过程,帮助读者深入理解操作系统的本质与实现方法。 ... [详细]
  • 在 Linux 系统中,`/proc` 目录实现了一种特殊的文件系统,称为 proc 文件系统。与传统的文件系统不同,proc 文件系统主要用于提供内核和进程信息的动态视图,通过文件和目录的形式呈现。这些信息包括系统状态、进程细节以及各种内核参数,为系统管理员和开发者提供了强大的诊断和调试工具。此外,proc 文件系统还支持实时读取和修改某些内核参数,增强了系统的灵活性和可配置性。 ... [详细]
  • 在探讨C语言编程文本编辑器的最佳选择与专业推荐时,本文将引导读者构建一个基础的文本编辑器程序。该程序不仅能够打开并显示文本文件的内容及其路径,还集成了菜单和工具栏功能,为用户提供更加便捷的操作体验。通过本案例的学习,读者可以深入了解文本编辑器的核心实现机制。 ... [详细]
  • 机顶盒,即数字电视机顶盒(Digital TV Set-Top Box,简称STB),是一种放置在电视机旁的设备。它主要用于将数字信号转换为电视能够识别的模拟信号,从而实现高质量的视频和音频播放。机顶盒不仅支持基本的电视节目接收功能,还具备多种增值服务,如互动点播、网络浏览等。随着技术的发展,现代机顶盒集成了更多的智能功能,成为家庭娱乐的重要组成部分。 ... [详细]
  • 本文作为《Java学习笔记》的开篇,旨在为初学者提供一个全面的概览。文章首先介绍了Java的基本概念及其在编程语言中的地位,强调了Java与其他主流编程语言的共通之处,特别是其核心结构,如控制语句的重要性。通过详细的目录和前言,读者可以快速了解Java的基础知识和学习路径。此外,文章还探讨了控制语句在编程中的关键作用,为后续深入学习打下坚实基础。 ... [详细]
  • Java集合框架特性详解与开发实践笔记
    Java集合框架特性详解与开发实践笔记 ... [详细]
  • 本文通过具体的代码示例,详细解析了如何在Java中利用AspectJ实现面向切面编程(AOP)。AspectJ是Java平台上的一个AOP框架,通过引入连接点(JoinPoint)、通知(Advice)和切面(Aspect)等核心概念,扩展了Java语言的功能。文章首先介绍了AspectJ的基本概念,然后通过实际编码示例展示了如何定义和应用切面,帮助读者更好地理解和掌握这一技术。 ... [详细]
  • Spring Boot 实战(一):基础的CRUD操作详解
    在《Spring Boot 实战(一)》中,详细介绍了基础的CRUD操作,涵盖创建、读取、更新和删除等核心功能,适合初学者快速掌握Spring Boot框架的应用开发技巧。 ... [详细]
  • 在《PHP应用性能优化实战指南:从理论到实践的全面解析》一文中,作者分享了一次实际的PHP应用优化经验。文章回顾了先前进行的一次优化项目,指出即使系统运行时间较长后出现的各种问题和性能瓶颈,通过采用一些通用的优化策略仍然能够有效解决。文中不仅详细阐述了优化的具体步骤和方法,还结合实例分析了优化前后的性能对比,为读者提供了宝贵的参考和借鉴。 ... [详细]
  • Spring框架入门指南:专为新手打造的详细学习笔记
    Spring框架是Java Web开发中广泛应用的轻量级应用框架,以其卓越的功能和出色的性能赢得了广大开发者的青睐。本文为初学者提供了详尽的学习指南,涵盖基础概念、核心组件及实际应用案例,帮助新手快速掌握Spring框架的核心技术与实践技巧。 ... [详细]
author-avatar
小小的家雀
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有