一、嵌入式软件开发难吗?
嵌入式软件开发可以买相应的开发板,开发板带的资料越详细越好,开发板里驱动已经做好,bsp包也有了,自己做的工作只是按照需求做一小部分修改。
二、嵌入式软件开发学习路线是什么?
干货满满,从学习路线+学习书籍+练手项目都总结好了!
大家好,我是仲一,作为一个去年拿下oppo,小米等十余家大厂offer的学长回答下。最近有公众号粉丝经常问我,如何学习嵌入式。粉丝有要求,咱们必需安排上。
不得不说,上班了是真的忙,每天只能抽下班回 来的一个多小时写文章。这篇8000字的文章足足写了11天,修改了十几次。终于在十月中旬终于肝完了这篇文章。下面开始本文的内容,干货满满!
我个人是从STM32转到驱动开发的,在研二的时候学习了韦东山老师的驱动开发的课程,转到了驱动开发的方向。下面就如何学习嵌入式说下我个人的看法。
嵌入式方向
嵌入式工程师需要掌握的内容非常广泛,主要包括嵌入式软件、嵌入式硬件、以及相关行业、产品的专业知识。作为嵌入式初学者,我们不可能,也没有那么多精力把所有的知识到搞的很精通,我们要学会抓住重点,学会取舍,达到一通百通,事半功倍的学习效果。 首先嵌入式技术主要分为嵌入式软件和嵌入式硬件两大方向。
嵌入式硬件方向
嵌入式硬件工程师主要工作职责是为产品设计硬件电路原理图,设计硬件PCB板,选择合适的元器件,焊接调试硬件电路板,保证硬件电路板的可靠性、稳定性和抗干扰能力。
因为现在集成电路发展迅速,大部分集成电路厂商都会提供参考电路,所以硬件电路原理图的设计相对来说比较简单,硬件工程师工作的含金量主要体现在产品的可靠性和稳定性设计、以及电磁兼容设计,这才是硬件设计工程师的含金量所在。
要成为一个资深的嵌入式工程师相当难,一方面要有非常扎实的理论知识,同时也要有相当的那种大型的、高频CPU、多层PCB板的设计经验。
嵌入式硬件工程师要学的课程主要有模拟电路设计、数字电路设计、电磁波理论等。熟悉常用的放大电路、滤波电路、电源电路设计和分析。
嵌入式软件方向
嵌入式软件工程师的职责主要是根据产品的功能需求设计好软件,让硬件工作起来。
嵌入式电子产品硬件部分,大部分都是相同的,核心的都是由CPU、RAM和FLASH 几大部分组成,而软件就千差万别了。产品的具体功能都是由软件来实现的,一般来讲一个产品的实现,软件设计的工作量是硬件设计的4 ~ 5倍。
所以一般情况下,一个公司的软件工程师数量是硬件硬件工程师的4~5倍,嵌入式软件工程师需求比硬件工程师大很多,同时跟硬件工程师相比,嵌入式软件工程师学起来相对容易些,所以这里我重点和大家谈一下嵌入式软件工程的学习路线。
学习嵌入式需要那些内容?
C语言
C语言是嵌入式的重中之重,Linux操作系统就是用C实现的,包括安卓系统的底层也是C语言实现的,基础不牢,地动山摇,一定要打好基础。
C语言学习过程中重点要放在指针,结构体,文件的处理,数组等。在学习过程中,一定要多写代码,代码光看是看不会的。
遇到错误不要怕麻烦,善于使用搜索工具,百度,google,stack overflow。要知道,你遇到的问题别人肯定也会遇到过,一般在网上一搜就会有答案。
最后,要多调试程序,熟悉调试的过程。程序三分写,七分调,没有谁的程序是可以一遍写对的。而且,多调试程序也可以让我们理解程序具体是如何执行的。
基本的硬件原理
嵌入式肯定要和硬件打交道的。如果做嵌入式的应用层的话,可能和硬件接触的少一点。但是很多企业在面试的时候,也会问一些基本的硬件知识。
比如,我同学在面试联发科的C++工程师的时候,就问到了他很多关于硬件的知识(中断是什么,轮询是什么,二者有什么区别,一个基本嵌入式系统有什么构成等),所以说硬件知识知道越多越好,就算做应用层,一些最基本的也要知道。
如果是打算做嵌入式底层的话,对于硬件知识的掌握要求就比较高了。比如,LCD是如何显示的,IIC协议/SPI协议是什么,如何收发数据,不同设备对于IIC的速度有什么要求,IIC协议上拉电阻一般是多少等等。只有明白了硬件原理,在看芯片手册的时候才能明白如何去配置各个寄存器。
此外,常用的设备仪器的使用能掌握就更好了,和硬件工程师扯皮的时候会用到。比如,万用表,示波器,逻辑分析仪等。不会也没关系,这部分不是必须的。
数据结构与算法
这部分是程序员的必修课。在各大厂的秋招春招中,笔试面试都是必考的。常见的数据结构如链表,二叉树,堆,队列,常见排序算法及其改进(快排,归并,冒泡,插入)等都是要掌握的。如果是为了找工作,这部分内容有很多是要能达到手写的目的。(相关内容见我整理的嵌入式软件工程师笔试面试指南 )
虽然嵌入式对于数据结构与算法的要求不像传统互联网那么高,而且,这些数据结构在以后的工作中不一定可以用到,但是一些基本的我们还是要知道的。
像Linux内核中就用到了很多的链表,二叉树等。掌握这部分内容对于我们以后跳槽,深入研究操作系统都有很大的帮助。
计算机基础
这部分直接决定了我们以后是否能走的更远,像操作系统的基本概念,计算机组成原理的内容都是需要我们去了解的。比如自旋锁,信号量,阻塞与非阻塞等。
学习任何技术一定要学到这门技术的边界,对于嵌入式来讲,它的边界就是汇编。汇编语言不要求会写,但是一定要能看懂(其实就是Arm指令集)。在很多情况下,看反汇编文件对于bug的调试会更方便。
学习路线推荐
入门:51+STM32
主要学习内容
中断、定时器、串口、NAND FLASH、网络控制器、LCD屏、触摸屏等的工作原理。
学习资源推荐
视频:野火,正点原子
书籍:野火,正点原子
学习建议
如果你以后的方向是驱动开发,这部分学习的话重点放在硬件知识的理解。买个开发板,学习下他们的例程是如何写的,常用嵌入式外围设备的硬件工作原理,以及如何使用C语言来编程、控制这些硬件。把基本的外设都学习一遍,不求都会写,但是硬件原理一定要搞清楚。
进阶:ARM-A+Linux
这部分主要分为两个方向:Linux应用开发,Linux驱动开发。下面我会对这两个方向分别进行说明。
有了之前的单片机基础,上手Linux开发就会快一点。可以买个ARM-A内核的开发板,ARM-A和stm32很多地方都是相通的,理解起来不难,二者最大的差别在于开发环境,很多新手入门Linux开发在搭建环境时就被劝退了。学习ARM-A前可以先看下 《ARM体系结构与编程》,再去看韦老师视频的话会理解快一点,视频中讲到的难理解的这里基本都有。
推荐一个 github仓库,上面放了上百本经典的嵌入式,计算机书籍,可以star一下,下次找书直接在上面搜索就可以了: github 书籍宝藏仓库 github访问不了可以访问这个:gitee 书籍宝藏仓库
应用开发
主要学习内容
Linux系统调用概念,多进程,多线程实现多任务开发,多任务的同步互斥开发:互斥锁、信号量,网络数据通信过程,TCP/IP协议,Socket编程、TCP网络编程、UDP网络编程,QT编程。
学习资源推荐
书籍:《Unix环境高级编程》,《Unix网络编程》,《Qt Creator快速入门》
视频:这部分视频没看过,可以在哔哩哔哩搜索下,找播放量高的就可以。
驱动开发
主要学习内容
Bootloader的工作流程、UBOOT的编译、裁剪与移植、Linux内核的编译、裁剪与移植,根文件系统的构建、BootLoader、内核和根文件系统的烧写。
重点驱动框架如:字符设备驱动、块设备驱动、LCD设备驱动、触摸屏设备驱动,总线设备驱动模型,输入子系统模型等。
学习资源推荐
书籍:《Linux设备驱动开发详解》《Linux设备驱动程序》
视频:强烈推荐韦东山老师!!
学习建议
对照视频一点一点学习的过程中,刚开始第一遍看的话会有很多地方不明白,不要紧。如果在查阅了一些资料后还是不明白,可以先往后放放,不用深究。内核的许多东西一旦深究起来,越陷越深。
作为初学者,学习驱动开发主要学习驱动的框架(比如,输入子系统模型常用的一个函数input_attach_handler()这个函数,刚开始我们只需要知道他是用来匹配dev设备和驱动软件就可以,暂时可以不用知道这个函数内部是如何实现的)。有一定基础之后,可以再去深究其中的某个点,思考他们为什么这么写。
大神:各类复杂驱动
一般自学能到第二个阶段就已经相当不错了。复杂驱动部分一般是在工作中学习的。像Android驱动,音视频驱动,usb驱动,wifi,蓝牙协议,内核开发等都是比较深入一点的东西了,随便拿出一块内容,深入钻研下都可以成为这个领域的专家。
学习资源推荐
书籍:这部分方向很多,我自己对很多方向也不了解。分享几本不错的内核书籍,《Linux内核设计与实现》《深入理解LINUX内核》《深入Linux内核架构》
视频:哔哩哔哩搜索【Linux内核精讲】
总结
- 在学习的过程中,我们应该抓住不变的东西,考虑下这些不变的内容是否对我们以后掌握变化的东西有帮助。
- 不管是学习任何技术,一定要学到这门技术的边界。对于嵌入式开发来讲,汇编,这就是软件的边界。
- 经常会在往上看到有人讨论,嵌入式有35岁危机吗?不能说没有,只能说压力相比于互联网可能会小点。
- 嵌入式相对于互联网来讲,技术的更新迭代没有那么快。如果能在嵌入式某个领域深入研究,建立起技术的护城河,或许职业生涯会长一点。
- 聪明,好奇,协作,忠诚,随遇而安。
推荐一个 github仓库,上面放了上百本经典的嵌入式,计算机书籍,可以star一下,下次找书直接在上面搜索就可以了: github 书籍宝藏仓库 github访问不了可以访问这个:gitee 书籍宝藏仓库
练手项目推荐这篇文章:
分享GitHub上一些嵌入式相关的高星开源项目笔试面试推荐我写的免费知乎专栏:
嵌入式软件工程师笔试面试指南码字不易,如果觉得本篇文章对你有帮助,可以点个免费的赞支持作者 @仲一
三、学嵌入式软件开发前景如何?
随着信息时代的深入发展,嵌入式应用只会越来越广,从日常生活到工业控制,可以说无处不在。可以说一睁眼就能看见嵌入式应用,墙上的电子钟,空调,甚至LED灯,厨房里就更不用说了,像微波炉,热水器等。其它的再如地上跑的汽车火车电动车,天上飞的飞机,哪个都离开开嵌入式应用。这一切都表明嵌入式已经深入到人们的日常生活。
因此,学嵌入式的前景是非常光明的,可以各在所有的工业门类里都可以找到嵌入式岗位,这是一顶非常基础性的工作。但是同时也可以是非常前沿的工作,像华为的5G,也属于嵌入式系统,还有CPU等,哪个都离不开嵌入式软件开发。
四、嵌入式软件开发应该考研吗?
得看你是想从事学术还是技术了,其实都需要有扎实的技术功底,考研之后学历高一点,可以从事嵌入式开发学术研究了,比如出书、钻研行业发展等。平台高一点自然发展前景就广阔一点了。
五、嵌入式软件开发平台有哪些?
说说我用过的吧。
51和STM32之类的单片机一直用的KEIL。飞思卡尔的用的是codewarrior,现在被恩智浦收购了,恩智浦又出了S32。编译代码的我一般接触的就是这些比较多。还有就是ARM软件eclipse , GDB Server , Jlink软件。编写代码我喜欢用VIM,看代码之类的有souceinsight等等。六、嵌入式软件开发思维训练
嵌入式软件开发思维训练:提升技能,实现卓越
嵌入式软件开发是现代科技领域中一项重要的技能,深受业界青睐。作为一名嵌入式软件开发人员,掌握相关技能不仅能够提高自身竞争力,还能在工作中实现卓越成果。然而,要想成为一位优秀的嵌入式软件开发人员,并不仅仅需要扎实的编码基础,还需要培养一种特定的思维模式。在本篇文章中,我们将探讨一些嵌入式软件开发思维训练的方法和技巧。
1. 高度细致的分析能力
一个出色的嵌入式软件开发人员需要具备高度细致的分析能力。他们需要能够深入理解问题的本质,并能够从整体到细节进行全面的分析。这种分析能力不仅仅涉及到代码本身,还包括对硬件、操作系统以及应用的深入理解。只有通过对问题进行仔细分析,开发人员才能找到最佳的解决方案。
2. 创造性解决问题的能力
嵌入式软件开发往往面临各种各样的挑战和问题。作为一名优秀的开发人员,必须具备创造性解决问题的能力。这不仅意味着能够寻找和实施解决方案,还需要具备挖掘问题潜在因素的能力,从而提出更好的解决办法。创造性地解决问题需要开发人员以全新的视角来看待困难,并具备灵活的思维模式。
3. 强大的调试和排错能力
嵌入式软件开发中出现问题是难免的。因此,一位出色的开发人员需要具备强大的调试和排错能力。他们应该能够快速定位问题,并找出根本原因。此外,他们还需要精通常用的调试工具和技术,以便能够有效地修复和调优代码。强大的调试和排错能力可以帮助开发人员提高效率,缩短开发周期。
4. 持续学习和自我提升
嵌入式软件开发领域的技术日新月异,新的技术和平台不断涌现。因此,作为一名优秀的开发人员,持续学习和自我提升是非常重要的。通过不断学习新的知识和技术,开发人员可以跟上行业的最新动态,提高自己的技术水平。在不断学习的过程中,开发人员还可以通过实践和项目经验来不断完善自己的开发思维。
5. 注重团队协作和沟通
嵌入式软件开发通常不是一个人独立完成的,而是需要与其他开发人员、硬件工程师和项目经理等紧密合作。因此,注重团队协作和沟通是非常重要的。优秀的开发人员应该具有良好的沟通技巧,能够清晰地表达自己的想法和意见,并能够有效地与团队成员进行合作。只有通过良好的团队合作,才能够共同实现项目的成功。
6. 高效的时间管理能力
嵌入式软件开发工作常常面临时间紧迫的压力。因此,一位优秀的开发人员需要具备高效的时间管理能力。他们应该能够根据项目的优先级合理安排时间,并合理分配任务。高效的时间管理能力可以帮助开发人员更好地应对项目的挑战,提高工作效率。
7. 持续改进和反思
嵌入式软件开发过程中会遇到许多挑战和问题,但这也是一个宝贵的学习机会。优秀的开发人员应该具备持续改进和反思的能力。他们应该能够从项目和经验中总结教训,并通过不断改进自身的开发思维和技能。持续改进和反思可以帮助开发人员不断提高自己,并不断取得更好的成绩。
结语
嵌入式软件开发思维训练是成为一名优秀开发人员的关键所在。通过培养高度细致的分析能力、创造性解决问题的能力、强大的调试和排错能力,以及持续学习和自我提升等思维模式,开发人员可以提高自身的竞争力,实现卓越的成就。此外,注重团队协作和沟通、高效的时间管理能力,以及持续改进和反思的能力也是成为一名优秀开发人员必备的素质。只有通过不断训练和发展这些思维模式,开发人员才能够在嵌入式软件开发领域中取得长足的进步。
七、永州嵌入式工业软件开发
在当今信息技术飞速发展的时代,永州嵌入式工业软件开发已经成为许多企业关注的焦点。随着物联网、人工智能等技术的不断成熟与普及,嵌入式软件在各行各业的应用也愈发广泛。作为提供永州嵌入式工业软件开发的行业领军者,我们致力于为客户提供高质量、高可靠性的定制化解决方案,助力其在竞争激烈的市场中脱颖而出。
嵌入式软件的定义与特点
永州嵌入式工业软件开发是指集成在特定硬件设备中,与之配合完成某种功能的软件。与桌面软件或移动应用程序不同,嵌入式软件通常不需要用户干预,以稳定可靠地运行在嵌入式设备中。其特点包括:
- 实时性要求高:嵌入式系统通常需要在严格的时间要求内响应和处理事件。
- 资源受限:嵌入式设备的资源有限,包括处理器性能、内存容量等。
- 稳定性强:嵌入式系统需要长时间稳定运行,故软件需具备良好的稳定性和可靠性。
永州嵌入式工业软件开发的重要性
在工业自动化、智能交通、医疗设备等领域,永州嵌入式工业软件开发的重要性不言而喻。通过定制化的嵌入式软件,企业可以更好地适应不同行业的需求,提升产品的竞争力和市场占有率。无论是控制系统、传感器、还是嵌入式通信设备,都需要可靠高效的软件支持,才能发挥其最大价值。
我们的核心竞争优势
作为专业的永州嵌入式工业软件开发服务提供商,我们拥有以下核心竞争优势:
- 丰富的行业经验:多年来,我们在工业自动化、智能制造等领域积累了丰富的经验和成果。
- 强大的研发团队:我们拥有一支由资深工程师和技术专家组成的团队,能够快速响应客户需求。
- 定制化解决方案:针对不同行业、不同设备的需求,我们提供灵活定制的解决方案,满足客户多样化的需求。
- 全面的技术支持:无论是系统架构设计、软件开发、还是测试与优化,我们均能提供全方位的技术支持。
案例分析:智能工厂自动化系统
以智能工厂自动化系统为例,该系统涵盖了多个嵌入式设备、传感器和控制器,需要一个稳定高效的软件平台来实现设备间的协同工作。我们针对客户需求,进行了永州嵌入式工业软件开发,最终交付了一个高度定制化的智能工厂解决方案。通过我们的软件支持,客户实现了生产过程的智能化管理,大幅提升了生产效率和产品质量。
未来展望
随着科技的不断进步和行业的发展,嵌入式软件在工业生产中的地位将愈发重要。我们将继续深耕永州嵌入式工业软件开发领域,不断提升研发实力和服务水平,为客户创造更大的价值。期待未来,我们将与客户携手,共同探索工业智能化道路,共同开创美好的未来!
八、珠海嵌入式工业软件开发
珠海嵌入式工业软件开发指南
在现代工业领域,嵌入式软件开发已经成为极为重要的技术之一。而在中国,作为科技产业发展较为著名的城市之一,珠海也蓬勃发展着嵌入式工业软件开发领域。本指南将带您深入了解珠海在嵌入式工业软件开发领域的发展现状及未来趋势。
什么是嵌入式工业软件开发?
嵌入式工业软件开发是指针对工业自动化、智能制造等领域需求,开发针对特定硬件平台的软件系统。这类软件通常需要具备实时性强、稳定性高、适应性强等特点,以满足工业设备控制、数据采集、信息处理等任务。
珠海嵌入式工业软件开发现状
作为中国南部重要的经济中心之一,珠海在嵌入式工业软件开发领域拥有得天独厚的地理优势和产业基础。众多科技企业、高校科研机构以及工业企业的共同努力,推动了珠海嵌入式工业软件开发行业的快速发展。
目前,珠海嵌入式工业软件开发涵盖了多个领域,包括智能制造、物联网、工业自动化等。各类企业通过不断创新,推动了智能工厂、智慧城市等项目的落地和发展。
珠海嵌入式工业软件开发关键技术
在嵌入式工业软件开发过程中,珠海企业积极采用了多项关键技术,以提升软件系统的性能和稳定性:
- 实时操作系统(RTOS)
- 驱动程序开发
- 通信协议设计
- 数据采集与处理
- 安全加密技术
这些关键技术的运用,使得珠海嵌入式工业软件开发在行业内具备一定的竞争优势,为企业的发展提供了有力支撑。
未来发展趋势
随着工业互联网、5G技术等新技术的不断普及和应用,珠海嵌入式工业软件开发领域将迎来更多机遇和挑战。
未来,珠海将继续加大在人才培养、技术研发等方面的投入,推动嵌入式工业软件开发技术的创新和应用,助力珠海智能制造产业的蓬勃发展。
结语
珠海嵌入式工业软件开发作为珠海科技产业的重要组成部分,不仅推动了当地产业的升级与发展,也为中国的工业软件开发领域注入了更多活力。希望本指南能为您提供一些参考,带您更深入了解这一领域的发展现状。
九、嵌入式软件开发工程师待遇?
具体薪资还是得看个人修为,有的达不到该薪资水平,有的早已超过该薪资水平):
非211、985院校应届毕业生平均月薪:8K;
是211、985院校应届毕业生平均月薪:12K;
一年工作经验者月薪:10K-15K;
二年工作经验者月薪:12K-18K;
三至五年工作经验者月薪:20K-30K;
十、嵌入式软件开发需要考什么证书?
什么证书都不需要,现在看重的是你的学历和工作经验,做过什么项目,没有那么多的要求,只要你有能力就行,就是要动手能力强,能做出产品