打印
[学习笔记]

嵌入式应该会哪些技能呢?

[复制链接]
966|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
micoccd|  楼主 | 2023-10-27 15:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
1、嵌入式硬件开发:这是硬件工程师来做,一般出身为自动化,电子,通信等专业,他们要求熟悉电路等知识,非常熟悉各种常用元器件,掌握模拟电路和数字电路设计的开发能力。
熟悉硬件开发模式和设计模式,熟悉各种芯片及外围设备,熟悉8位16位32位处理器嵌入式硬件平台开发。

2、嵌入式驱动开发:这个可以硬件工程师来做,也可以软件工程师来做,主要还是取决于设备。
目前驱动开发,除非是简单的设备驱动,实际上很多时候都是移植,所以更多的是需要掌握目标平台的硬件和系统特性。
所以至少得掌握一些操作系统、系统结构、计算机组成原理、数据结构相关知识。熟悉嵌入式ARM/MIPS/PowerPC架构。
具有单片机、某种或多种32位嵌入式处理器的移植开发能力,熟悉bootloader过程,具有扎实的硬件知识,理解硬件原理图,能独立完成相关硬件驱动调试,能够根据芯片手册编写软件驱动程序。
如果涉及到网络设备,或许还要掌握很多高层的网络协议的原理,个人感觉这一块虽然大部分不是很难,但却是极为重要的,当然如果要在这一层次提供对上层的多线程支持,某些驱动也是很难写的。
3、嵌入式系统开发:这个没听说硬件工程师来做的。做这块,熟悉操作系统的原理是必不可少的,比如内存管理,比如线程调度,比如文件系统等等。
还要精通处理器体系结构、指令集、寻址方式、调试、汇编和混合编程等方面的内容;熟悉操作系统启动流程。
对于linux,要熟悉Linux配置文件的修改,掌握内核裁减、内核移植、交叉编译、内核调试、启动程序Bootloader编写、根文件系统制作和集成部署Linux系统等整个流程。
这一块要是真写起来,困难程度那是相当恐怖的,好在大多都是移植,很少听说有公司要去开发个操作系统的,没Google的实力啊。
4、嵌入式软件开发:这个嘛,没有操作系统的话,程序一般不会特别复杂,如果有操作系统的支持,又和一般的软件开发很接近,所以尽可以看作是搞桌面开发。
这个要求就是熟悉系统的API,精通C语言的高级编程知识,包括函数与程序结构、指针、数组、常用算法、库函数的使用等知识、数据结构的基础内容;掌握面向对象编程的基本思想,以及C++语言的基础内容。
精通嵌入式Linux下的程序设计,精通嵌入式Linux开发环境,包括系统编程、文件I/O、多进程和多线程、网络编程、GUI图形界面编程、数据库。
熟悉常用的图形库的编程,如QT、GTK、miniGUI、fltk、nano-x等,掌握各种应用层的网络协议使用,以及各种音视频技术等。
另外还有些以上四类都用得着的技能:
1、基础技能:搞嵌入式开发,还有一些必不可少的基础技能。
  • 开发平台的熟悉,目前的嵌入式开发大多数是在linux或者类linux下的环境下进行的,那么linux的使用应该熟悉吧,shell脚本得会写吧,配置文件得会改吧,GCC GDB 得会用吧,Make工具得会吧?
  • 比如项目管理工具的使用,都什么年代了,不会用CVS,也不会用SVN?请问,你还活在软件时代的原始社会么?
  • 数据结构和算法,搞软件开发,不懂数据结构,不会算法优化,不会衡量复杂度,太不靠谱了吧?当然,这个不是要求啥算法都会,啥数据结构都记得住,最起码得知道有那么种东西,有什么作用,这样用到的时候好歹也能查啊
  • 编程语言,关于JAVA,我知道现在JAVA的异军突起,很是震动了编程语言界,但是在嵌入式开发下,不会C或者C++语言,实在说不过去。

    当然现在很多手机应用完全用java写的,如果你只想搞嵌入式的上层软件开发又不想深入下去,只用JAVA也未尝不可。

    关于汇编,嗯,这个可能挺难,毕竟跟具体的硬件架构(主要是CPU)有关,但是真的很有意思,而且在某些时候,它是不可替代的。


2、特殊技能:对于嵌入式开发的某些部分必不可少,但对于有些(比如应用开发)可能没有多大用处。
  • 数字电路,主要是了解一些基本的电路知识,如门电路、逻辑电路、存储器、寄存器,为了更好的理解嵌入式芯片,存储器,外围设备等硬件的设计,但往往在软件开发中未必能用的到,因为大部分硬件都提供了很完整的软件接口。
  • 操作系统,这个说的是平台上选用的操作系统,嵌入式产品操作系统是在太多了,但操作系统的内部设计原理都是殊途同归。

    首先要去学习的是操作系统原理,去了解进程通信、内存管理、文件系统等几个重要的部分,因为这些在软件开发尤其是内核驱动开发时会用到。

    接下来可以去熟悉至少一种主流的操作系统,Linux是一个很好的选择,去了解它的内核架构,设备驱动架构,如何去编译,裁剪,编写应用程序,以及如何使用在具体的嵌入式产品上
  • 计算机的组成/微机原理,主要是为了了解微型计算机的硬件工作原理,明白CPU、总线、I/O、存储器等一些关键结构是怎么工作的,虽然是很枯燥的知识,但是对熟悉外围设备硬件工作方式,及操作系统,软件架构的设计及优化相当关键。


3、扩展的能力:这些可能是要用到的。
  • 通信协议,对于非应用层的通信协议,我实在不知道是不是该把它放入操作系统的范畴,因为很多操作系统是没有网络部分的,但是在很多方面它又是由操作系统提供。

    当然这些下层通信协议,貌似不太用关心,因为太多的开源协议栈了,应用层的网络协议可能就要关心了,比如http,ftp,rtsp,rtmp,mms等等。
  • 音视频处理,比如文件封装啊,音视频的编解码啊,各种音视频的标准啊,还有流媒体什么的。Ffmpeg是一个很好的东西,建议学习一下。
  • 信息安全,恩,这一块貌似现在越来越受到重视了。
  • 数据库,唉,嵌入式设备能力越来越强啊!再搞搞我看也不用交叉编译了。


有时和同事讨论起现在的行业需求,说到各个公司总是招不到人,程序员又总说找不到工作,自己就有很多感想,是公司要求高,还是程序员要求高?
有时候看到一些招聘的职位要求,总是打击到自己的信心,一条一条数下来,好像自己能做到的还真没多少,只好让自己再努力些再努力些。
当然有时也会觉得某些招聘不靠谱,看那一条条的要求,个人感觉要是全做到,普通人怎么也得努力个十年八年的,这样的大牛们,估计看不上给出的那薪资吧。
对于程序员来讲,做技术真的是很累很难的一件事情,网上搜一下,遍地的抱怨贴,情感贴,都充分反映了这个职业对身体和情感的考验。
如果你不畏艰难,想把技术做下去,那么努力吧,也许某天你会随便拿起一份招聘启事,鄙视一眼:“靠!就这点要求,老子去都掉价!”,那么你就是真正的大牛了!

使用特权

评论回复

相关帖子

沙发
tpgf| | 2023-11-3 15:20 | 只看该作者
不需要都会 自己得要有一个侧重点

使用特权

评论回复
板凳
gwsan| | 2023-11-3 16:03 | 只看该作者
我总感觉作为一个硬件工程师 软件的任务也得会干

使用特权

评论回复
地板
tfqi| | 2023-11-3 19:12 | 只看该作者
为什么需要会的这么多 工资却这么低呢

使用特权

评论回复
5
zljiu| | 2023-11-3 19:44 | 只看该作者
也不是公司要求高 也不是个人要求高 只是期望值不相同而已

使用特权

评论回复
6
aoyi| | 2023-11-3 20:02 | 只看该作者
嵌入式最底层的人员都需要会什么呢

使用特权

评论回复
7
nawu| | 2023-11-3 20:33 | 只看该作者
我觉得需要了解学习的东西实在太多了

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

109

主题

727

帖子

1

粉丝