整理自网络,排版:付斌
对嵌入式系统工程师及嵌入式硬件工程师而言,2020年将是振奋人心的一年。随着物联网应用的普及,MCU市场将再次繁荣。因此,市场上对嵌入式系统工程师人才的需求也将出现新高。这些都是底层编程领域中即将出现的趋势。
01
先搞清楚什么是嵌入式
我们已经习惯了使用强大的计算能力来处理机器学习,那么嵌入式是这样的吗?我们先和机器学习比一比。
AlexNet 需要727MFlops的运算能力(Flops=浮点运算)以及235Mb的内存才能处理小小的一张227 x 227像素的图像。例如,Google Nexus S上的 ARM Cortex-A8的处理能力为每秒 66MFlops。因此,你必须等待大约 11 秒才能进行推断。这也太慢了!
大学里我上了几门与机器学习相关的课程。我们做了很多有趣的作业。但是当时即便是4GB GTX1050也不足以训练所有模型。
一般的机器学习工程师很少考虑计算资源。而且他们也很少关心内存的使用情况。为什么?因为这些硬件都很便宜,甚至是你的手机都拥有相当不错的CPU和大量内存。
你已经很久没有过聚会拍照时发现自己手机上的存储不够的情况了吧?想象一下,你使用的是只有256KB闪存的TrueTouch感应控制器。没错,只有 256KB。而且由于固件占用了一部分, 因此你不能完全使用这点存储。算下来,你能使用的也就是大约100KB。回头再看看你的上一个模型的大小。可能比这个大多了。
有意思吧?我们来继续看。
当听到“嵌入式设备”时你会想起什么?记住脑海中出现的第一印象。
1. 嵌入式设备可以是任何电动机械,甚至是微波炉和洗衣机
没错,你答对了!
如今,几乎所有的电气设备都是嵌入式的。这些设备内部可能拥有一个或多个控制器来负责每个功能:触摸感应、发动机状态监控等。
2. Arduino 和树莓派
恭喜你,再次答对了!
二者是 DIY 项目中最受欢迎和使用最广泛的工具包之一。它们也是嵌入式设备。
3. Jetson Nano 及类似的产品
再次回答正确。
这是一种特殊的开发套件,简称迷你计算机,专门为运行机器学习模型而开发。它非常强大,而且非常酷。
但似乎有些不对。
我有很多朋友都在做一些很棒的硬件业余项目。通常他们会使用Arduino或 STM32。
答案:微乎其微
想一想你家中有多少电气设备,然后再想想汽车中包含的大量控制器,以及工作上用到的安保系统,等等。
假设你有一个微控制器。它的主要任务是处理手指触摸屏幕。它拥有ARM Cortex-M0处理器,256KB内存(其中只有80–120KG可用)。这是一个实时系统,因此你只需很少的时间来推断模型,例如100微秒。你的目标是改善算法或替换算法。
02
2020年软硬件有什么值得学习的新技术
如果你想尝试嵌入式编程,那么可以从下面几个方面着手:
-
https://www.learn-c.org/
Learn-c.org 是 Ron Reiter 的私人项目。虽然这个项目与嵌入式或硬件的关系不大,但作为C语言入门还是很不错的。
-
买个微处理器
就我个人而言,实际操作才是最佳的学习途径。所以,你也可以买一个微处理器,实际接触硬件,亲眼看到实际结果才是你最应该做的事情。你可以购买 Arduino 等流行的处理器,然后从一个小项目开始,真正了解硬件的工作原理。
-
阅读书籍和文档
阅读书籍和文档是最关键的学习方式。你可以根据自己选择的方向(嵌入式系统、固件开发、驱动程序开发等),选择相应的书籍。
除了C/C++之外,该领域没有真正占据实际市场份额的编程语言,但是下面的新起之秀值得关注。
Rust
相对于C,Rust 有几大优势,最大的优势之一就在于内存的安全性。Medium 网站上有很多关于 Rust 的文章,你可以通过阅读了解 Rust 的所有优势。此外,Rust 可以在许多微控制器上运行,这个 GitHub 代码库中汇总了大量信息(https://github.com/rust-embedded/awesome-embedded-rust)。
如果你想学习 Rust,那么我强烈建议你访问 Rust 主页(https://www.rust-lang.org/)。这个网站提供了大量的入门文档和教程。还有这本书《The Rust Programming Language》也是很好的起点。Rust 网站专门提供了有关嵌入式的说明(https://www.rust-lang.org/what/embedded),可以帮助你了解嵌入式设备上的 Rust 编程。
Golang
Golang?Golang!Golang 这种编程语言的潜力也超过了你的想象。目前,它主要运行在用户空间,可以替代 Ruby 等后端语言,或用作用户空间的应用程序,因为它拥有良好的多处理器支持。
RISC-V
RISC-V 是一种开源硬件指令集体系结构。它基于精简指令集计算机原理,即所谓的 RISC。与 Arm 相比,制造商不需要支付许可费用即可使用 RISC-V。
现在市场已有 RISC-V 的电路板,虽然价格仍然偏高,但值得关注。例如,眼前我的办公桌上的这块就是 SiFive HiFive Board。
big.LITTLE
最后我想谈谈 big.LITTLE 架构。最初它是由 ARM 发明的。原理是将低功耗的处理器(LITTLE)与功能强大、高功耗的(big)处理器相结合。同一时间内, LITTLE 或 big 只有一侧处于活动状态。这种架构应该能够更好地适应当今的动态计算需求。
这并不是一个新想法,ARM 于2011年就提出了此项建议。但是似乎其他制造商也对 big.LITTLE 跃跃欲试。英特尔于2019年预览的英特尔 Lakefield 异构处理器就采用了 big.LITTLE 架构。
03
除了这些还要学什么?
-
看懂电路图 -
看懂芯片手册 -
有编写,移植驱动的能力 -
懂内核的实现机制 -
懂C语言,C++, JAVA等
-
《微机原理》,可以理解一个计算机的组成原理 -
《数字电路》,掌握一些逻辑运算,理解各种门电路的原理 -
《ARM体系结构与编程》,对ARM的运行原理解释的很到位
-
Linux总线,设备,驱动模型的探究 -
Linux设备树的深入理解 -
Linux的启动流程 -
Linux设备和驱动的相遇 -
动手定制一个开发板
4、学习嵌入式Linux应用程序开发
-
LCD驱动程序 -
触摸屏驱动程序 -
USB驱动程序 -
NAND FLASH驱动程序 -
NOR FLASH驱动程序 -
网卡驱动程序 -
声卡驱动程序
6、根文件系统
-
Linux根文件系统目录结构 -
移植Busybox -
init进程介绍及用户程序启动过程 -
使用glibc库 -
制作/使用文件系统映象文件
-END-
推荐阅读
【1】让机器自主学习:用TensorFlow构建一个变体的自编码器
【2】要正确理解CCD的帧频,这三个问题先得搞清楚!
【3】终于整理齐了,电子工程师“设计锦囊”,你值得拥有!
【4】半导体行业的人都在关注这几个公众号