RMB | USD

在通往 Embedded World 2021 的道路上:第 2 部分

我脑中挥之不去的是复杂性,以及减少复杂性的一般需求。我想通过我的描述,为大家介绍过去几十年来复杂性是如何解决的,提醒人们如何到达自己的目标,并揭示一些不为人知的简化技术。

就像我上月说的那样,我现在是半退休状,有足够的时间追求我的技术兴趣。最近,为了赶上客户的嵌入式开发工具的速度,我不得不查阅一些早已忘掉的 C 编程语言语法,因此我再次捧起 Brian Kernighan 和 Dennis Ritchie (K&R) 撰写的《C 编程语言》重新学习。实际上,我既有这本书的原始版本,也有第二版。

来源:Wikipedia (https://en.wikipedia.org/wiki/The C Programming Language)

最后,我再次阅读了这本书的序言、引言和第 1 章,所有这些都唤起我第一次学习这种语言时的记忆。我从 1970 年代后期开始担任汇编语言程序员。我记得很难将我的思想转换为更高层次的概念。在那时,用汇编语言编程就像我对 HP-67 可编程计算器进行编程一样;您直接处理机器的寄存器和步骤来获得正确结果。我曾是汇编语言程序员。编写汇编语言枯燥乏味,但简单。记得我曾思考过这一更高的级别是否真的值得,因为当时对我来说唯一的优势就是能够切换 CPU。

位于俄亥俄州辛辛那提的 Baldwin Piano and Organ Company 生产的电子乐器中嵌入了九个微处理器,其中的一个微处理器采用了我的汇编语言程序。Baldwin 发明了电子琴并致力于前沿技术。在解码音乐家演奏的和弦的同时生成伴奏,便产生了极其严重的实时限制性问题。可预测性能等同于成功。降低复杂性不是。

无论如何,每本 K&R 书的第 1 章都是教程。令我非常满意的是,在 Linux 机器上输入示例后一切都与书本中显示的完全相同;在执行完逐字记录命令以进行编译、运行这些示例时,所有操作均按书中所述进行。这真是太棒了。该书于 1978 年首次出版。我的 Linux 机器运行的是 2020 年 10 月 7 日出版的最新版 Linux(即:5.8.14 版),并且未进行任何更改以阻止我正常运行简单 C 语言程序。优秀!我想起了一句谚语:“没坏就不修。”

有了这种经验,我决定再次拿起书重读 C++ 的介绍部分。这是 Bjarne Stroustrup 于 1991 年的出版第二版《 C++编程语言》。我手头的 C 和 C++ 书都是由这些语言创造者编写的。我喜欢了解发明人的想法。得益于了解作者是如何思考的,后续作者编写的书可能会把事情描述得更清楚,但也可能会变得冗长臃肿,超出学习某个概念的真正所需。

来源:https://stroustrup.com/2nd.html

Stroustrup 仅用 10 页的篇幅介绍使用 C ++ 来驱动他实现目标的一系列技术(可以说是计算机科学家的目标),这种策略就是从根本上降低那些使用计算机程序可以解决的现实问题的建模复杂性。

他解释说,我们先从过程编程开始,然后是模块化编程,数据抽象,最后是面向对象的编程。我们回顾一下 Stroustrup 所说的过程编程:

Stroustrup 定义的模块化编程为:

在这里,我们看到了用来减少复杂性的 iota(希腊字母); 也就是说,将数据隐藏在模块中。这是简化系统的关键属性。这是封装概念的开始。

Stroustrup 继续介绍数据抽象范例:

根据 Stroustrup 的说法,数据抽象并非没有问题。他解释说,使抽象适应新用途需要修改其定义。因此,一旦必须修改定义,就无法准确地重复使用已有定义。这使他引入了面向对象编程的概念:

因此,我们现在有了层次结构的概念,这是降低复杂性的核心。

我在这些博客中写的内容并不是我为准备嵌入式世界主题演讲所做的最新研究。我使用的是我自己的一系列技术,但是我在这些博客中讲述的概念已形成了我的想法。在下篇文章中我将与您分享更多的内容。

关于此作者

Image of Randy Restle

Randall Restle 在电子元器件行业从业四十余载,学识渊博、经验丰富。 现处于半退休状态,担任 Digi-Key Electronics 应用工程副总裁。他曾经领导过多个应用工程、技术人员和管理人员团队,指导他们开发原创、独有的先进技术产品。

其个人擅长数字信号处理、可编程逻辑实现、运动控制改进和软件设计。 他拥有多项专利,横跨多个行业,是 IEEE 的高级会员。 Randall 拥有辛辛那提大学 BSEE、MS 和 MBA 学位。

More posts by Randall Restle