打印

为什么招聘单片机工程师的时候要求精通C/C++?

[复制链接]
1950|15
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
lindoug|  楼主 | 2020-5-19 14:27 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
大部分招聘说明里可能都是复制同类嵌入式公司的需求,在删删补补,所以这句话一直遗留下来,不算乱写,但其实和招聘的真正要求差别很大。从我曾经不下20~30次大厂小厂的嵌入式面试经验来说,大部分公司在招聘时不会涉及C++(本身公司负责有QT应用产品的除外,但目前占比很小,也不属于单片机方向),  对C语言要求也远远不会到精通的地步,基本上对C语言语法熟练掌握,把<C Primer Plus>过一遍,后面标注提到的重点细节详细掌握下,笔试基本都是C基础语法(关键字,宏,结构体, 枚举,指针和引用,数组,强制转换,位移,大小端,存储区,函数的健壮性),在结合数据结构(排序,查找,二叉树),在涉及一些硬件知识类的如(中断,AD的精度,RTC时钟转换)这一类,这里面考察的C语言知识在我看来也远远没有到达精通的地步。
作为嵌入式从业者,以我这些年的经验来说,除非专门从事嵌入式Linux开发,而且是QT界面应用方向的,C++知识储备是必须的。对我认识的大部分嵌入式工程师来说,即使实力比我强很多的,对于C++基本停留在C with Class的程度,掌握模板的都不多,更不要说后面强大的STL,以及涉及函数式编程的lambda和模板元编程, 也就是我这种闲着喜欢看书码代码的无聊人士,才会花时间去专门学习C++11,甚至去追逐了解前端框架,因为这些知识对于嵌入式开发事实上真的没啥用,对于单片机来说,一方面要追求稳定可控,另一方面成本严苛,资源(RAM/FLASH)有限,所以你可以看到NodeMcu和MicroPython的开发调试玩具卖的火热,却很难看到相应的技术用到产品领域,这对于C++也一样,使用STL会带来编译结果(代码容量)不可避免的膨胀,如果阉割掉这部分,还不如使用C语言来的简单方便,这也限制了C++发挥的市场。
在单片机领域和嵌入式驱动开发,基本上C语言占有绝对地位,即使在Linux上层应用这块,Android/Java的开发优势也明显高于QT/C++,所以要求精通C++可以说是无稽之谈。事实上精通C++的要求有多高,你可以去相应问题下看看,这种人怎么会使用阉割的C++来从事单片机开发。
最后来说,精通C语言的问题,特别是精通单片机领域的C语言,是一个很困难的事,至少对于现在的我来说,离精通C语言也差的有些远。因为精通C语言不仅仅是掌握关键字和语法特性,和下面这些复杂但实用的操作,如位域实现对寄存器的位操作利用结构体强制转换用于各种协议解析,函数指针实现异步回调宏定义加##实现的函数格式化;这些虽然复杂,但至少是有一套标准规则,只要去看书实践就可以了解掌握,但当你用C语言完成复杂稳定的项目代码,解决各种异常bug时,就会知晓C语言的精通不只上面这些固定的语法知识。在调试中可能遇到指针越界,栈溢出,共享资源未保护,非对齐访问异常,编译器优化错误等,这些问题单独拿出来也许很容易找出来,但在复杂的十几万行的代码中,往往可能执行错误的地方工作表现是正常的,但干扰到其它部分,导致未出错的地方执行异常,这就需要的不仅仅是C语言的,还包含系统内核,总线架构和汇编的知识,精通C语言的困难正是在此,你要理解掌握计算机技术中成体系的东西,对内存分配,总线架构,内核,汇编这些都有清晰的认识。例如了解函数内的空间是在栈中,那么我们在函数中需要使用大数组时,就要考虑是否定义为静态变量(避免栈溢出),如果多个函数使用数组,就要考虑是否添加内存管理, 如果数组会被2字节/4字节的指针访问,在声明时是否考虑要强制对齐(我就曾经遇到过#pragma pack(1)后面忘了闭合,导致后续全局变量未对齐,4字节指针访问时触发异常,因为中间涉及多次转换,所以花费了很多时间才查找定位解决)。另外如果用到了Cache和MPU,那么整个系统又更加复杂,何时需要写回,何时需要无效CacheLine,volatile的意义,以及配合Cache使用的注意点,这些知识的掌握,其实都属于精通嵌入式C语言的一部分,因此可以说精通C语言并不简单。



使用特权

评论回复

相关帖子

沙发
lixmlxm| | 2020-5-19 15:26 | 只看该作者
  你这个是什么系统,要求这么高。我们到现在为止,都涉及不到这些。你们这样才是真正高手!

使用特权

评论回复
板凳
123654789| | 2020-5-19 15:39 | 只看该作者
写上C++  , 显得高大上 , 那是套路

使用特权

评论回复
地板
wtmwtm| | 2020-5-19 17:04 | 只看该作者
我们公司单片机要会编写上位机程序,所以要会vb vc c++ c#其中之一语言呢?还要求会移动开发方面的APP呢?

使用特权

评论回复
5
ColeYao| | 2020-5-20 08:02 | 只看该作者
毕业20多年,电子研发也做了十几年了,离楼主位说的精通C/C++要求远的很,也没指望能精通C/C++,毕竟C/C++只是个干活的工具,活能干好就行了!

使用特权

评论回复
6
Cjy_JDxy| | 2020-5-20 08:57 | 只看该作者
我们公司要求用VB,C#

使用特权

评论回复
7
shizaigaole| | 2020-5-20 09:17 | 只看该作者
用过的QT,也了解点C++,甚至学过点JAVA。
就语言来说,C++是最难的,光是语言里面的细节,就非常繁复。
真的能熟练C++,肯定要使用C++很多年,
精通C++,绝对不是一件容易的事情。

搞搞单片机是不需要C++的,哪怕使用QT也不需要精通,嵌入式QT大部分是用来做些界面,
C++的高级特性基本用不到

使用特权

评论回复
8
zzele| | 2020-5-20 13:31 | 只看该作者
非常认可,有一点是纵然搞单片机应用不会用到c++开发,但是在应用c做数据处理的时候,常常会应用到使用联合及结构体组建近似于类的结构和方法,如果掌握了c++会更加游刃有余,思路更宽广,调用参数更加严谨些。无他,互勉吧

使用特权

评论回复
9
tom_xu| | 2020-5-20 15:26 | 只看该作者
就跟精通OFFICE一样?

使用特权

评论回复
10
123987| | 2020-5-20 17:05 | 只看该作者
wtmwtm 发表于 2020-5-19 17:04
我们公司单片机要会编写上位机程序,所以要会vb vc c++ c#其中之一语言呢?还要求会移动开发方面的APP呢? ...

这一定是个大公司。

使用特权

评论回复
11
huang1007| | 2020-5-21 10:19 | 只看该作者
wtmwtm 发表于 2020-5-19 17:04
我们公司单片机要会编写上位机程序,所以要会vb vc c++ c#其中之一语言呢?还要求会移动开发方面的APP呢? ...

这种一般会分为几个人来做把。招1,2个做android,1,2个做ios,1,2个做单片机。所以一个会c,一个会oc,一个会java就可以了

使用特权

评论回复
12
Jenghiz| | 2020-5-21 13:12 | 只看该作者
就是公司嫌钱太多呗,招聘条件越高面试的人越少,工资要求越高

使用特权

评论回复
13
dongshan| | 2020-5-21 15:24 | 只看该作者
c++不适合单片机开发。

使用特权

评论回复
14
云山道长| | 2020-5-22 21:35 | 只看该作者
C++是面向对象编程,适用于QT这种图形系统的编程

使用特权

评论回复
15
diweo| | 2020-5-23 16:29 | 只看该作者
大多数人都是人云亦云,说什么C++太难,嵌入式不需要C++之类的。
C++编写的程序和纯C编写的程序,Flash和RAM占用都不会相差太大。所以现在的绝大部分芯片程序都可以用C++来编。
当然,一般情况下,不需要用到高级特性,比如模板,泛型什么的。
STL不需要你去深入研究,只是特定情况下,可能用一般方法组织数据会比较困难,但如果用list组织一下,逻辑关系可以很清晰,那你就把它编进去,并正常运行即可。不要以为用到容器了,就会占用很多资源。关键在于你怎么用。
但是,封装,继承和多态,还是很有必要细细研究的。灵活使用的话,相同的功能,尤其是很多类似的逻辑的时候,代码会比纯C简单、清晰很多。

使用特权

评论回复
16
henglin| | 2020-5-24 23:11 | 只看该作者
基本上会单片机的 老司机   一般都会点 上位机开发的 VB  DELPHI C# C++

使用特权

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

本版积分规则

468

主题

472

帖子

19

粉丝