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

单片机爱好者 2022-04-22 18:30


大家好,给大家分享知乎上一个热议的话题:为什么招聘单片机工程师的时候要求精通C/C++?



在这里分享几个回答,有一定的参考价值,欢迎留言讨论!


01 



回答1
作者:Qi K
链接:https://www.zhihu.com/question/335790805/answer/2111472871

所谓的大部分单片机项目不用C++是因为整个嵌入式开发行业从业者的平均软件素养已经差到了一个令人发指的地步。

大部分嵌入式工程师出身于电子、通信、自动化等专业,由于专业教育的缺失和自己学习能力的问题,根本不具有面向对象设计、设计模式、软件工程等基本常识,所以在他们看来C和C++差不多,没必要上C++。

一个基层工程师,整天满嘴都是稳定、可靠、市场、成本、性价比这些屁话,却根本没听说过设计模式、代码复用、可扩展性、单元测试、持续集成这些现代软件技术的精华。

知道的知道你是一个强行挽尊的嵌入式工程师,不知道的还以为你是什么统领千军的大老板。

(我预判了他们的预判,这段真的戳到了一些传统的嵌入式工程师。居然有人跟我杠说设计模式、单元测试、持续集成这些不重要?我通篇就是打的这样人的脸,你被打完了还跟我说:你打脸而已,没打到要害,你根本就不会打人!我笑得满地打滚!)

所有没用到C++的单片机应用项目(底层驱动库不在此列),都是因为其规模过小,应用过于简单,一两个人,最多不超过5人就可以完成全部开发,这种项目不但用不到C++,甚至用不到C,甚至用汇编完成,更用不到任何现代软件工程技术。

作为一个嵌入式开发的候选人,如果你想加入大厂,参与任何有规模的嵌入式项目,你的C++水平就是你的天花板。

这里的大厂不止是华为、大疆这种,甚至很多爱好者熟悉的“周立功单片机”老板周立功就多次在公开场合表示,他们已经全面转向C++,只会C的工程师不会得到工作机会。

Arduino也许是世界上最著名的AVR(8位单片机)项目,没有之一。

Arduino的封装全面使用了C++和面向对象的设计。广泛使用基于虚函数实现的运行时多态,很多设计遵从了开闭原则、接口隔离、依赖倒置等重要设计原则。

在ARM项目中, 用到C++的更多。ARM官方推动的mbed项目大概是ARM单片机领域最知名的项目之一。

如果你要抬杠说Arduino是玩具,不具有工业强度的话,那mbed项目绝对是为工业级应用设计的,从底层RTOS到上层的硬件抽象层HAL都有实现。

mbed是用C++实现的,广泛使用开闭原则和依赖倒置,要求用户通过继承虚基类来完成平台相关的实现,从而实现扩展。

如果你是一个一线嵌入式工程师,却根本不了解我提到的一些专业术语是什么意思,我觉得应该反思一下为什么自己的工资上不去。因为这些都是最基础的面向对象和设计模式常识。

最后回答问题,为什么单片机工程师要求会C++?那还不简单?因为企业不傻啊!

其实我也是C的铁粉,C在嵌入式领域毫无疑问占有举足轻重的地位。

我坚定认为在现代嵌入式系统中,C和C++共存的现象会广泛存在,且具有上升的趋势。在硬件抽象层使用C,在应用层和接口层使用C++是非常典型的实践。

这也是正面回答这个问题,为什么嵌入式要会C++?因为嵌入式应用中C和C++都有用。

说了这么多,如果你的观点还是“C++无用,C++滚出嵌入式”的话,祝你好运!


02 



回答2
作者:听心跳的声音
链接:https://www.zhihu.com/question/335790805/answer/768873197
大部分招聘说明里可能都是复制同类嵌入式公司的需求,在删删补补,所以这句话一直遗留下来,不算乱写,但其实和招聘的真正要求差别很大。

从我曾经不下20~30次大厂小厂的嵌入式面试经验来说,大部分公司在招聘时不会涉及C++(本身公司负责有QT应用产品的除外,但不属于单片机方向), 对C语言要求也远远不会到精通的地步,基本上对C语言语法熟练掌握。

过一遍,后面标注提到的重点细节详细掌握下,笔试基本都是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语言并不简单。

-END-

点个 赞 点个在看

单片机爱好者 《51单片机逆向学习实战教程》一书作者,单片机爱好者,每天为单片机用户分享一篇精品电子电路方面的经验笔记或教程。
评论
  • RK3506 是瑞芯微推出的MPU产品,芯片制程为22nm,定位于轻量级、低成本解决方案。该MPU具有低功耗、外设接口丰富、实时性高的特点,适合用多种工商业场景。本文将基于RK3506的设计特点,为大家分析其应用场景。RK3506核心板主要分为三个型号,各型号间的区别如下图:​图 1  RK3506核心板处理器型号场景1:显示HMIRK3506核心板显示接口支持RGB、MIPI、QSPI输出,且支持2D图形加速,轻松运行QT、LVGL等GUI,最快3S内开
    万象奥科 2024-12-11 15:42 65浏览
  • 概述 通过前面的研究学习,已经可以在CycloneVGX器件中成功实现完整的TDC(或者说完整的TDL,即延时线),测试结果也比较满足,解决了超大BIN尺寸以及大量0尺寸BIN的问题,但是还是存在一些之前系列器件还未遇到的问题,这些问题将在本文中进行详细描述介绍。 在五代Cyclone器件内部系统时钟受限的情况下,意味着大量逻辑资源将被浪费在于实现较大长度的TDL上面。是否可以找到方法可以对此前TDL的长度进行优化呢?本文还将探讨这个问题。TDC前段BIN颗粒堵塞问题分析 将延时链在逻辑中实现后
    coyoo 2024-12-10 13:28 101浏览
  • 全球知名半导体制造商ROHM Co., Ltd.(以下简称“罗姆”)宣布与Taiwan Semiconductor Manufacturing Company Limited(以下简称“台积公司”)就车载氮化镓功率器件的开发和量产事宜建立战略合作伙伴关系。通过该合作关系,双方将致力于将罗姆的氮化镓器件开发技术与台积公司业界先进的GaN-on-Silicon工艺技术优势结合起来,满足市场对高耐压和高频特性优异的功率元器件日益增长的需求。氮化镓功率器件目前主要被用于AC适配器和服务器电源等消费电子和
    电子资讯报 2024-12-10 17:09 84浏览
  •         霍尔传感器是根据霍尔效应制作的一种磁场传感器。霍尔效应是磁电效应的一种,这一现象是霍尔(A.H.Hall,1855—1938)于1879年在研究金属的导电机构时发现的。后来发现半导体、导电流体等也有这种效应,而半导体的霍尔效应比金属强得多,利用这现象制成的各种霍尔元件,广泛地应用于工业自动化技术、检测技术及信息处理等方面。霍尔效应是研究半导体材料性能的基本方法。通过霍尔效应实验测定的霍尔系数,能够判断半导体材料的导电类型、载流子浓度及载流子
    锦正茂科技 2024-12-10 11:07 64浏览
  • 本文介绍Linux系统(Ubuntu/Debian通用)挂载exfat格式U盘的方法,触觉智能RK3562开发板演示,搭载4核A53处理器,主频高达2.0GHz;内置独立1Tops算力NPU,可应用于物联网网关、平板电脑、智能家居、教育电子、工业显示与控制等行业。修改对应的内核配置文件# 进入sdk目录cdrk3562_linux# 编辑内核配置文件vi./kernel-5.10/arch/arm64/configs/rockchip_linux_defconfig注:不清楚内核使用哪个defc
    Industio_触觉智能 2024-12-10 09:44 90浏览
  • 【萤火工场CEM5826-M11测评】OLED显示雷达数据本文结合之前关于串口打印雷达监测数据的研究,进一步扩展至 OLED 屏幕显示。该项目整体分为两部分: 一、框架显示; 二、数据采集与填充显示。为了减小 MCU 负担,采用 局部刷新 的方案。1. 显示框架所需库函数 Wire.h 、Adafruit_GFX.h 、Adafruit_SSD1306.h . 代码#include #include #include #include "logo_128x64.h"#include "logo_
    无垠的广袤 2024-12-10 14:03 69浏览
  •         在有电流流过的导线周围会感生出磁场,再用霍尔器件检测由电流感生的磁场,即可测出产生这个磁场的电流的量值。由此就可以构成霍尔电流、电压传感器。因为霍尔器件的输出电压与加在它上面的磁感应强度以及流过其中的工作电流的乘积成比例,是一个具有乘法器功能的器件,并且可与各种逻辑电路直接接口,还可以直接驱动各种性质的负载。因为霍尔器件的应用原理简单,信号处理方便,器件本身又具有一系列的du特优点,所以在变频器中也发挥了非常重要的作用。  &nb
    锦正茂科技 2024-12-10 12:57 76浏览
  • 习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习笔记&记录学习习笔记&记学习学习笔记&记录学习学习笔记&记录学习习笔记&记录学习学习笔记&记录学习学习笔记记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记
    youyeye 2024-12-10 16:13 105浏览
  • 智能汽车可替换LED前照灯控制运行的原理涉及多个方面,包括自适应前照灯系统(AFS)的工作原理、传感器的应用、步进电机的控制以及模糊控制策略等。当下时代的智能汽车灯光控制系统通过车载网关控制单元集中控制,表现特殊点的有特斯拉,仅通过前车身控制器,整个系统就包括了灯光旋转开关、车灯变光开关、左LED前照灯总成、右LED前照灯总成、转向柱电子控制单元、CAN数据总线接口、组合仪表控制单元、车载网关控制单元等器件。变光开关、转向开关和辅助操作系统一般连为一体,开关之间通过内部线束和转向柱装置连接为多,
    lauguo2013 2024-12-10 15:53 78浏览
  • 时源芯微——RE超标整机定位与解决详细流程一、 初步测量与问题确认使用专业的电磁辐射测量设备,对整机的辐射发射进行精确测量。确认是否存在RE超标问题,并记录超标频段和幅度。二、电缆检查与处理若存在信号电缆:步骤一:拔掉所有信号电缆,仅保留电源线,再次测量整机的辐射发射。若测量合格:判定问题出在信号电缆上,可能是电缆的共模电流导致。逐一连接信号电缆,每次连接后测量,定位具体哪根电缆或接口导致超标。对问题电缆进行处理,如加共模扼流圈、滤波器,或优化电缆布局和屏蔽。重新连接所有电缆,再次测量
    时源芯微 2024-12-11 17:11 65浏览
  • 近日,搭载紫光展锐W517芯片平台的INMO GO2由影目科技正式推出。作为全球首款专为商务场景设计的智能翻译眼镜,INMO GO2 以“快、准、稳”三大核心优势,突破传统翻译产品局限,为全球商务人士带来高效、自然、稳定的跨语言交流体验。 INMO GO2内置的W517芯片,是紫光展锐4G旗舰级智能穿戴平台,采用四核处理器,具有高性能、低功耗的优势,内置超微高集成技术,采用先进工艺,计算能力相比同档位竞品提升4倍,强大的性能提供更加多样化的应用场景。【视频见P盘链接】 依托“
    紫光展锐 2024-12-11 11:50 44浏览
  • 天问Block和Mixly是两个不同的编程工具,分别在单片机开发和教育编程领域有各自的应用。以下是对它们的详细比较: 基本定义 天问Block:天问Block是一个基于区块链技术的数字身份验证和数据交换平台。它的目标是为用户提供一个安全、去中心化、可信任的数字身份验证和数据交换解决方案。 Mixly:Mixly是一款由北京师范大学教育学部创客教育实验室开发的图形化编程软件,旨在为初学者提供一个易于学习和使用的Arduino编程环境。 主要功能 天问Block:支持STC全系列8位单片机,32位
    丙丁先生 2024-12-11 13:15 45浏览
  • 我的一台很多年前人家不要了的九十年代SONY台式组合音响,接手时只有CD功能不行了,因为不需要,也就没修,只使用收音机、磁带机和外接信号功能就够了。最近五年在外地,就断电闲置,没使用了。今年9月回到家里,就一个劲儿地忙着收拾家当,忙了一个多月,太多事啦!修了电气,清理了闲置不用了的电器和电子,就是一个劲儿地扔扔扔!几十年的“工匠式”收留收藏,只能断舍离,拆解不过来的了。一天,忽然感觉室内有股臭味,用鼻子的嗅觉功能朝着臭味重的方向寻找,觉得应该就是这台组合音响?怎么会呢?这无机物的东西不会腐臭吧?
    自做自受 2024-12-10 16:34 136浏览
  • 一、SAE J1939协议概述SAE J1939协议是由美国汽车工程师协会(SAE,Society of Automotive Engineers)定义的一种用于重型车辆和工业设备中的通信协议,主要应用于车辆和设备之间的实时数据交换。J1939基于CAN(Controller Area Network)总线技术,使用29bit的扩展标识符和扩展数据帧,CAN通信速率为250Kbps,用于车载电子控制单元(ECU)之间的通信和控制。小北同学在之前也对J1939协议做过扫盲科普【科普系列】SAE J
    北汇信息 2024-12-11 15:45 68浏览
我要评论
0
点击右上角,分享到朋友圈 我知道啦
请使用浏览器分享功能 我知道啦