作者:togo.huang
链接:https://www.zhihu.com/question/315310041/answer/1021466934
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
时间回到十五年前,大部分人搞嵌入式,其实是做单片机,那时单片机资源少(我曾用过128字节RAM的MCU,要仔细扣每一字节的使用,函数调用不能太深,一不小心栈就爆了),用各种资源都要小心翼翼,不像现在的单片机动辄就几十K上百K的RAM。另外当时单片机的资源和选择面非常少,只有51,AVR,PIC这些,ARM7才刚刚出道。在当时,能用单片机做一个系统,已经算是很风骚的操作了。
但时过境迁,这十几年来,移动计算能力在摩尔定律下取得了跨越式的发展,嵌入式鸟枪换**了,能做的事情越来越多,同时也迎来了新的更难的挑战:
- 计算性能永远不够:不得不说,现在最新的计算机视觉/AI算法在嵌入式平台上还跑不起来;所以选择算法时,一般会选当前平台能运行的最好算法,这就导致有多少CPU就用多少CPU,CPU占用率常年维持在90%以上。
- 内存永远不够:图像既吃空间又吃带宽,经常出现的问题是功能还没做完,内存用完了,oom满天飞。更隐晦的是内存带宽也会悄悄被耗尽,悄悄拖慢运行速度。
- 实时性要求也不低:虽然不似实时控制一样需要做到抖动在1ms以内,但做到30ms还是要要的,要不就丢帧了。如何在高CPU和内存占用率下保证实时性,是一项前所未有的挑战。
- 复杂度高:由于功能复杂度提升,引入了很多新的高级总线接口和协议栈,代码的规模也越来越大,要搞清全局,变得越来越困难。
这些新的挑战,映射到技术细节上,又可以归纳为以下方面:
- 编程技能:随着系统复杂度的提升,需要编程技能的要求也水涨船高。
- 处理器架构:当遭遇CPU和内存性能问题时,不懂点CPU架构,就像在猜哑迷一样。
- 操作系统:哇,oom了;哇,丢帧了;哇,写FLASH性能抖动了;只能边哇哇哇地哭边恶补内存管理,进程调度,文件系统知识了。
- 接口与驱动:接口越来越多,速度越来越快,现在这个年头,不懂十几个接口都听不懂小米的发布会了。
- Framework(中间件):ROS,Camera Pipeline,各类协议栈,学好任何一个都不容易。
- 算法优化:处理器性能就像海绵里的水,拧一拧总能优化一点出来。
- 应用编程与调试:多线程,多进程,多核,线程间通信,进程间通信,多核间通信。对,就是这么纠结。
- 硬件知识:嵌入式工程师不懂点硬件知识哪能和硬件工程师愉快地玩耍呢?
- 其他:作为一个承上启下的岗位,对软技能有更高的要求。
|