加入星計劃,您可以享受以下權(quán)益:

  • 創(chuàng)作內(nèi)容快速變現(xiàn)
  • 行業(yè)影響力擴(kuò)散
  • 作品版權(quán)保護(hù)
  • 300W+ 專業(yè)用戶
  • 1.5W+ 優(yōu)質(zhì)創(chuàng)作者
  • 5000+ 長期合作伙伴
立即加入
  • 正文
    • 什么是 C 語言面向?qū)ο螅?/span>
    • 為什么要用 C語言面向?qū)ο螅?/span>
    • 關(guān)于C 語言面向?qū)ο蟮臓幾h
  • 推薦器件
  • 相關(guān)推薦
  • 電子產(chǎn)業(yè)圖譜
申請入駐 產(chǎn)業(yè)圖譜

嵌入式 C 語言面向?qū)ο缶幊?--- 總結(jié)

07/11 08:05
1381
閱讀需 9 分鐘
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點(diǎn)資訊討論
我是老溫,一名熱愛學(xué)習(xí)的嵌入式工程師,關(guān)注我,一起變得更加優(yōu)秀!

什么是 C 語言面向?qū)ο螅?/strong>

在開始嵌入式 C 語言設(shè)計模式系列文章之前,先通過三篇文章講述了如何使用?C??語言實(shí)現(xiàn)面向?qū)ο蟮娜筇匦裕?a class="article-link" target="_blank" href="/baike/492719.html">封裝,繼承,多態(tài)。

對于“面向?qū)ο蟆边@個詞語,相信很多軟件工程師都不會感覺到陌生,并且很多軟件工程師在剛開始學(xué)習(xí)編程的時候,講師一般都會跟我們講,C?語言是一門面向過程的語言,而?C++,Java,Python,Go?等高級語言,才是主流的面向?qū)ο笳Z言。

那到底什么是“面向過程”,什么是“面向?qū)ο蟆蹦兀筷P(guān)于這兩者的概念,我相信網(wǎng)絡(luò)上并不缺少相關(guān)的信息,這里也不再復(fù)制粘貼網(wǎng)上的概念介紹。

舉幾個例子:

例子1:

客戶:“我需要一份蛋炒飯”。

面向過程:先把飯煮好,點(diǎn)火起鍋燒油,雞蛋先放,炒好撈出,再起鍋燒油,瘦肉豆芽胡蘿卜絲翻炒半熟撈出,刷鍋起鍋燒油,倒入米飯。。。。一頓操作猛如虎。

面向?qū)ο螅?/strong>蛋炒飯有米飯,雞蛋瘦肉豆芽胡蘿卜絲,需要花生油,炒鍋,等等工具,需要廚師,需要。。。。

例子2:

客戶:“我需要一輛自行車”。

面向過程:先把自行車的機(jī)架車身電焊,上油漆,再安裝前后兩個車轱轆,安裝剎車,安裝停車支架,安裝扶手,安裝坐墊,安裝籃子。。。

面向?qū)ο螅?/strong>自行車有機(jī)架車身,有車轱轆,有剎車,有停車支架,有扶手,有坐墊,有籃子,剎車用來剎車(這話有點(diǎn)廢,哈哈哈),車轱轆用來行走。。。

例子3:

客戶:“我需要一架航天飛機(jī)”。

面向過程:先找來一些耐高溫耐輻射的航天級工業(yè)材料,用來打造航天飛機(jī)的機(jī)身,機(jī)身主要分為前段機(jī)身、中段機(jī)身和后段機(jī)身,各段機(jī)身打造完成后,開始設(shè)計機(jī)身內(nèi)部航天員活動空間,然后再設(shè)計主發(fā)動機(jī)和軌道控制發(fā)動機(jī),然后再。。。。(編不下去了)

面向?qū)ο螅?/strong>找NASA。(開玩笑,哈哈哈哈)

如上面三個(其實(shí)是前兩個)例子所述,面向過程主要思考的是“如何(HOW)”的問題,也就是把一個目標(biāo),拆分為多個流程環(huán)節(jié),然后把每個流程環(huán)節(jié)拼湊起來,最終實(shí)現(xiàn)客戶想要的目標(biāo)。

而面向?qū)ο?,主要思考的是?strong>什么(WHAT)”的問題,面向?qū)ο髸劝岩痪渚唧w的目標(biāo)拆分,目標(biāo)里面包含什么,每一個“什么”各自能完成哪些功能,把這些一個個的“什么”拼湊起來,就可以實(shí)現(xiàn)客戶想要的目標(biāo)。

面向過程的思維,和面向?qū)ο蟮乃季S,有著本質(zhì)上的區(qū)別,一直從事嵌入式開發(fā)的工程師,特別是單片機(jī)工程師,在面對銷售業(yè)務(wù)提出的需求或者疑問的時候,多數(shù)都是采用面向過程而非面向?qū)ο蟮乃季S方式進(jìn)行思考。

也就是說,單片機(jī)工程師第一反應(yīng),是想著“如何(HOW)”去解決業(yè)務(wù)端的需求,而不是去深挖這個需求的本質(zhì)是“什么(WHAT)”。

很多嵌入式C語言的入門教程,以及網(wǎng)絡(luò)上大多數(shù)的開發(fā)示例,都是用“HOW”的思維方式去告訴我們怎么解決一個問題,很少用“WHAT”的思維去讓工程師們思考問題的本質(zhì)。

(注意:這里并不是在否定面向過程的優(yōu)勢之處?。?/strong>

“HOW”的思維模式跟 C 語言的語法有著很大的關(guān)系,因?yàn)榛?C 語言的語法實(shí)現(xiàn)面向?qū)ο?,會繞一些彎路,C 語言的語法沒有面向?qū)ο蟮恼Z法糖支持,所以用 C 語言實(shí)現(xiàn)面向?qū)ο髸幸欢ǖ睦щy。

但往往在一些業(yè)務(wù)復(fù)雜的場景下,使用“WHAT”的思維比使用“HOW”的思維更加湊效,更能反映問題的本質(zhì),再往更深層次的思考,就會去到“WHY”的層面了。

編程語言只是一種工具,而“面向?qū)ο蟆焙汀懊嫦蜻^程”是兩種編程思想,編程思想會指導(dǎo)嵌入式工程師如何使用程序語言工具,這就是 C 語言和面向?qū)ο蟮谋举|(zhì)。

為什么要用 C語言面向?qū)ο螅?/strong>

既然面向?qū)ο笫且环N編程思想,而編程語言只是一種工具,那么,思想與工具之間就不存在一種強(qiáng)耦合的關(guān)系,C++可以面向?qū)ο螅琂ava可以面向?qū)ο?,C 語言同樣可以面向?qū)ο蟆?/p>

現(xiàn)在很多嵌入式設(shè)備的處理器,都可以支持使用 C++ 語言進(jìn)行開發(fā),但對于以往慣用的開發(fā)方式,嵌入式設(shè)備還是用 C 語言開發(fā)居多。

一些業(yè)務(wù)簡單,邏輯不復(fù)雜的嵌入式設(shè)備或嵌入式軟件模塊,其實(shí)是可以直接使用“面向過程”的思維模式去進(jìn)行開發(fā),這樣最直接高效,對于初學(xué)者,也建議用“HOW”的方式去進(jìn)行入門。

而一些復(fù)雜的業(yè)務(wù)場景,比如,操作系統(tǒng)內(nèi)核,協(xié)議棧,通用的驅(qū)動模塊,等等,就不得考慮使用面向?qū)ο蟆癢HAT”的思維方式去思考和設(shè)計了。

因?yàn)橄癫僮飨到y(tǒng)、協(xié)議棧這些復(fù)雜的業(yè)務(wù)模塊,所面對的場景是很豐富而且很復(fù)雜的,面向過程的思維就會讓這些業(yè)務(wù)模塊在設(shè)計和使用的時候受限。

這些運(yùn)行在嵌入式設(shè)備里面的業(yè)務(wù)模塊,為了執(zhí)行效率,通常都是用 C 語言進(jìn)行開發(fā)的,所以,就不得不用C語言進(jìn)行面向?qū)ο箝_發(fā)。

關(guān)于C 語言面向?qū)ο蟮臓幾h

用?C?語言進(jìn)行面向?qū)ο箝_發(fā),在嵌入式工程師群體里面,一直都存在著爭議,并且這個爭議維持了很長一段時間,都沒有得出正確的結(jié)論,并且群里面的小伙伴有時候會為這個話題爭論得面紅耳赤。

有些工程師認(rèn)為,既然嵌入式設(shè)備要進(jìn)行面向?qū)ο笤O(shè)計,為啥不用?C++?語言,或者用?Rust?語言,這些語言豈不是支持更多面向?qū)ο蟮恼Z法特性,因?yàn)檫@些語言的語法支持面向?qū)ο?,使用起來豈不是更加簡單?

也有一些工程師認(rèn)為,既然一些規(guī)模比較大的芯片廠家提供的?SDK,基本上都是使用面向?qū)ο筮M(jìn)行框架設(shè)計,還有世界上最優(yōu)秀的開源操作系統(tǒng)?Linux,里面也大量使用了?C?語言面向?qū)ο髞碓O(shè)計驅(qū)動框架,

那么,作為嵌入式軟件工程師,并且主要使用的編程語言是?C?語言,就更需要學(xué)習(xí)如何使用?C?語言面向?qū)ο蟮姆绞?,去?yīng)對復(fù)雜龐大的業(yè)務(wù)需求,設(shè)計出高彈性可擴(kuò)展的業(yè)務(wù)框架。

筆者認(rèn)為,不管“面向過程”還是“面向?qū)ο蟆?,不管?C?語言還是其他高級語言,其本質(zhì)都是解決業(yè)務(wù)問題的工具,除了要學(xué)習(xí)如何使用這些工具,還需要學(xué)習(xí)如何選擇合適的工具去解決特定的問題。

編程思維沒有高低優(yōu)劣之分,編程語言更是如此,因?yàn)檫@些編程思維和編程工具,都是在特定場景下,解決特定問題的工具。

網(wǎng)絡(luò)上經(jīng)常會看到很多人拿?C?語言去跟其他語言比較,說某某語言將會被淘汰,不建議再學(xué)習(xí),某某語言天下第一YYDS,等等。

且不說是不是有人別有用心,為了噱頭而拋出這些話題,光是這種片面的對比,就知道這些人的論點(diǎn)和論據(jù)過于片面而經(jīng)不起事實(shí)的推敲,參與這些話題的爭論,最終只會浪費(fèi)自己的時間。

最后,本系列文章需要強(qiáng)調(diào)一個基本原則,就是:不是所有使用C語言開發(fā)的嵌入式軟件,都一定要用面向?qū)ο蟮乃季S進(jìn)行編碼指導(dǎo),也并不是否定C語言面向過程開發(fā)的優(yōu)勢之處。一名優(yōu)秀的嵌入式軟件工程師,需要學(xué)會根據(jù)實(shí)際的項目情況,合理地選擇編程語言和編程思維,才能創(chuàng)造出穩(wěn)定可靠,高內(nèi)聚低耦合,高彈性易擴(kuò)展的應(yīng)用軟件。

推薦器件

更多器件
器件型號 數(shù)量 器件廠商 器件描述 數(shù)據(jù)手冊 ECAD模型 風(fēng)險等級 參考價格 更多信息
JST01TMAC1CY5GE2 1 Viavi Solutions Inc Transceiver,
暫無數(shù)據(jù) 查看
6N137-X007T 1 Vishay Intertechnologies Optocoupler Logic-Out Open Collector DC-IN 1-CH 8-Pin PDIP SMD T/R

ECAD模型

下載ECAD模型
$2.22 查看
TJA1055T/3/CM,118 1 NXP Semiconductors TJA1055 - Enhanced fault-tolerant CAN transceiver SOIC 14-Pin

ECAD模型

下載ECAD模型
$1.95 查看

相關(guān)推薦

電子產(chǎn)業(yè)圖譜