前進 2021 年 Embedded World 展覽:第二篇

編者註:此系列部落格文章關於 2021 年嵌入式電子與工業電腦應用展 (Embedded World),且一共有五篇,此第一篇文章將概述本展覽的內容。在此系列第二篇文章中,Randy 將展現其 C 程式語言能力。第三篇將著重說明物件導向程式設計如何降低複雜性。第四篇將說明良好的設計基礎在於有能力隨著需求改變而再次配置,無需重新實作建構模塊。最後第五篇部落格文章中將提前在 Randall 於 2021 年 Embedded World 展覽發表專題演講前,質疑作業系統是否需要無止盡擴充的空間,並且探討系統解構的議題。

我想討論複雜性,以及必須將之簡化的需求。我希望我的簡報能夠說明這數十年來增加的複雜性,提醒人們我們過往的歷程,及現在的定位,並且介紹一些不為熟知的簡化技術。

如同我上個月所說的,我已經半退休,有更多的時間去追尋我感興趣的技術。近來,為了追上客戶嵌入式開發工具的步伐,我必須回顧一些遺忘的 C 程式語言語法,所以我翻開了 Brian Kernighan 和 Dennis Ritchie (K&R) 所撰寫的 《C 程式設計語言 (The C Programming Language)》 一書。我其實有這本書的第一版和第二版。

來源:維基百科 (https://zh.wikipedia.org/wiki/C%E7%A8%8B%E5%BA%8F%E8%AE%BE%E8%AE%A1%E8%AF%AD%E8%A8%80_(%E4%B9%A6))

我重新閱讀了序論、簡介、第一章,讓我回想起開始學習 C 語言的時候。我在 1970 年代末,開始了組合語言程式設計師的工作。我還記得將思想轉換成高階概念的難度。組合語言程式設計就像是對我的 HP-67 可編程計算機進行編程一樣:直接面對機器的暫存器和步進,以取得正確的結果。當時我是一名組合語言程式設計師。編寫組合語言很冗長乏味,但也很單純。那時候,我懷疑這個更高階的語言是否有價值,因為當時我只用它來切換 CPU。

我的組合語言程式碼用於美國俄亥俄州辛辛那提市 Baldwin Piano and Organ Company 所製造的電子樂器,嵌入在其中的九個微處理器之一。Baldwin 發明了電風琴,並致力於運用最先進的技術。在產生伴奏音樂節奏的同時,為樂師正在彈奏的和弦解碼,會有非常難以達到的即時限制。達到預期的演奏效果也就成功了。降低複雜性則不會。

總而言之,K&R 教科書中的第一章是教學。我非常滿意第一章;我在 Linux 電腦完整輸入書上的範例,並且執行 verbatim 命令進行編寫和執行,結果與書中的說明一致。這感覺真好。這本教科書的首版發行於 1978 年。我的 Linux 電腦是最新的 Linux 版本 (即 5.8.14),發行於 2020 年 10 月 7 日,而我的 C 程式可以良好執行。這太傑出了!讓我想到那句俗語:東西沒壞就別修。

有了這個經驗,我決定再次閱讀我的 C++ 書籍的簡介部分。這本書是 Bjarne Stroustrup 的 《C++ 程式語言第二版 (The C++ Programming Language, 2nd edition)》,於 1991 年發行。我收藏的 C 和 C++ 書籍都是由語言創造者所編寫的。我喜歡閱讀並瞭解發明者的想法。後續其他作者所寫的書也許會對主題有更清楚的闡述,可以從作者的心得中獲益,但同時也對只需學習概念的讀者來說,提供太多資訊。

資料來源:https://stroustrup.com/2nd.html

Stroustrup 的這本書只有十頁,解釋利用 C++ 達到他的目標的分層技術 (也可以說是電腦科學家的目標)。此策略是從最基礎處理可利用電腦程式解決的現實問題,降低其模擬的複雜度。

他說明,首先採用「程序化編程」,接著進行「模組化編程」,再由「資料抽象化」及至最終的「物件導向編程」。讓我們來回顧,依照 Stroustrup 的解釋,程序化編程是指:

依照 Stroustrup 的解釋,模組化編程是指:

在此,我們看見降低複雜性的方式,也就是將資料隱藏在模組中。這是簡化系統的關鍵屬性。這是封裝概念的開始。

Stroustrup 接著說明資料抽象化:

Stroustrup 指出,資料抽象化有其問題存在。他解釋,對新使用者採用資料抽象化,會需要修正其定義。如此,定義一旦被修正,被修正定義的資料就無法再重新使用。因此他提出了「物件導向編程」的概念:

現在我們有了階層的概念,這就是降低複雜性的核心概念。

我在這邊部落格所寫的文章,並不是為了Embedded World 展覽的專題演講所準備的研究內容。我對技術有大量的想法,而這些想法是由我在這些部落格文章中所寫的概念所塑造。下一篇文章中,我們再多聊聊。

關於作者

Image of Randy Restle

Randall Restle 在電子元件產業累積超過 40 年的經驗。他目前已半退休,也擔任 DigiKey 的應用工程副總裁。他的經驗包括指導技術熟練的應用工程師、技術人員和管理人員團隊,以開發原創和獨特的先進技術產品。

他個人追求的目標包括數位訊號處理、可編程邏輯實作、運動控制改善以及軟體設計。他擁有眾多產業的專利,也是 IEEE 的資深會員。Randall 擁有辛辛那提大學的電機工程學士、碩士及企業管理碩士學位。

More posts by Randall Restle
 TechForum

Have questions or comments? Continue the conversation on TechForum, Digi-Key's online community and technical resource.

Visit TechForum