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

先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7

深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新Golang全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Go语言开发知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以添加V获取:vip1024b (备注go)
img

正文

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语言并不简单。


转载于郭忠明:https://www.zhihu.com/question/335790805/answer/2111472871#:~:text=嵌入式也有使用,崩溃等等问题.

嵌入式也有使用C++的情况, 就是使用C++在一些场合下可以大幅度提高开发速度.

上个月刚完成了一个嵌入式 wifi 项目自研版本 wifidog , 大家知道wifidog是一个提供wifi侧配合服务器侧Portal功能的C语言开源程序, 整体代码量近1万行, 是很多厂家wifi提供Portal功能的选择, 在很多wifi设备中都可以找到wifidog这个开源软件.

我们用C++重新实现了整个Wifidog的全部功能, 并且做了大量的扩展和优化. 后期会对一些相关厂家开放授权, 对比原生版本wifidog, 有三大类优化:

一个是实现HTTPS前向转发, 实现在各种情况下弹Portal的功能, 包括打开百度APP和淘宝APP弹Portal, https://www.baidu.com之类的也能够强制弹portal,

二是针对中国网络特殊情况的各种优化, 实现国际版本的苹果手机和安卓手机也能稳定的连接wifi网络, 正常上网的功能.

主要中国的wifi与国际上的wifi有很大的不同, 与美国人民常用的服务器连接不良, 需要进行定制性的代码优化, 这就涉及大量TCP/IP底层的处理, 包括对apple手机的wifi和各种应用的探测包进行单独处理, 实现apple手机和笔记本自动判断该设备的wifi网络internet质量极优, 到美国facebook 之类大陆无法访问的多种应用服务器的带宽极大, 将此wifi设备的无线网络, 在苹果手机的可用无线网络自动排序到第一名, 避免出现苹果手机错误判断需要弹Portal的网络不良导致无法在苹果手机中显示此wifi.

对 安卓手机的类似网络探测包连接Google网络也有各种复杂的处理流程, 避免因为中国大陆对Google全部服务器的拦截, 造成部分型号手机(原生版本安卓)连接wifi后反复掉线的问题, 以及wifi图标显示!的问题, 以及避免原生版本Google安卓判断网络不良等, 实现在无法连接Google服务器的大陆地区, 原生版本的安卓手机也可以稳定的连接此wifi.

三是针对降低Portal服务器端压力的一些优化, 使用keepalive 等技术降低Portal服务器的压力等等.

原生版本是C语言的开源wifidog代码, 全部用C++语言重新实现一遍, 采用C++的原因是由于公司有大量的基础库都是C++的, 在这些经过验证的基础库的加持下, 开发速度极高, 稳定性很好, 由于公司有各种C++高性能库加持, C++开发的代码性能比开源C语言版本快N倍, 功能上扩展比较容易, 开发任务紧, 稳定性要求极高, 所有功能短时间内就开发验证完毕了, 累计含公司版权的代码量大约4万行, 其中80%以上是各种自研库代码.

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip1024b (备注Go)
img

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
注Go)**
[外链图片转存中…(img-7BTeOaLV-1713452241187)]

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 16
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值