chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

探究嵌入式開(kāi)發(fā)是否需要架構(gòu)設(shè)計(jì)?

GReq_mcu168 ? 來(lái)源:CSDN技術(shù)社區(qū)道哥分享 ? 作者:CSDN技術(shù)社區(qū)道哥分 ? 2021-04-05 09:49 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

閱讀這篇文章,你能了解到什么

1. 從事嵌入式開(kāi)發(fā)12年的我,對(duì)架構(gòu)設(shè)計(jì)的理解;

2. 對(duì)嵌入式系統(tǒng)中的架構(gòu)設(shè)計(jì)要刻意訓(xùn)練;

3. 嵌入式系統(tǒng)開(kāi)發(fā)過(guò)程中的一些小技巧;

4. 一個(gè)用于智能家居項(xiàng)目的Demo,可以直接編譯、執(zhí)行;

我對(duì)架構(gòu)設(shè)計(jì)的理解

1.架構(gòu)設(shè)計(jì)概念的認(rèn)識(shí)

相信看這篇文章的同學(xué),大部分都是從事嵌入式開(kāi)發(fā)的,大家也肯定有這么一個(gè)印象:在招聘網(wǎng)站上的一些架構(gòu)設(shè)計(jì)的崗位,都是針對(duì) Web 方向的,卻很少看到招聘嵌入式崗位的系統(tǒng)架構(gòu)師的崗位。

我的理解是大概有下面2個(gè)原因:

(1) Web開(kāi)發(fā):百家爭(zhēng)鳴,沒(méi)有統(tǒng)一的標(biāo)準(zhǔn)和老大

這些年得益于移動(dòng)互聯(lián)網(wǎng)的發(fā)展,前、后端開(kāi)發(fā)崗位的需求量大增,而且各種框架層出不窮。

如何利用這些框架來(lái)為用戶提供高性能的服務(wù)并沒(méi)有一個(gè)統(tǒng)一的標(biāo)準(zhǔn),于是百家爭(zhēng)鳴,相應(yīng)的設(shè)計(jì)師崗位也就層出不窮。

(2) 嵌入式開(kāi)發(fā):Linux 舍我其誰(shuí)

在嵌入式系統(tǒng)的開(kāi)發(fā)中,在操作系統(tǒng)的選擇上幾乎沒(méi)有太大的余地,大部分是 ARM+Linux 組合。在 Linux 操作系統(tǒng)層面:那些大神們已經(jīng)把內(nèi)核和驅(qū)動(dòng)層設(shè)計(jì)的很完美了,很少需要開(kāi)發(fā)人員做大量的修改。在應(yīng)用程序?qū)用妫洪_(kāi)發(fā)人員如果沒(méi)有什么追求,只為了實(shí)現(xiàn)規(guī)格書(shū)中定義的功能即可。而老板呢,也只是重視產(chǎn)品功能是否能正常實(shí)現(xiàn),至于什么可移植、可擴(kuò)展、執(zhí)行效率等等,不會(huì)想到這個(gè)層面。即使產(chǎn)品需要更新?lián)Q代,讓開(kāi)發(fā)人員重新實(shí)現(xiàn)即可,反正只需要功能OK就行。

2.嵌入式系統(tǒng)的架構(gòu)設(shè)計(jì)重要性

說(shuō)一個(gè)小故事。有一位同事為客戶寫(xiě)一個(gè)單片機(jī)產(chǎn)品的程序,后來(lái)同事離職后把代碼移交給我。這個(gè)產(chǎn)品有一個(gè)小功能需要修改一下,恰巧那會(huì)我正在處理另外一個(gè)項(xiàng)目,于是在征得老板許可的情況下把源代碼發(fā)給客戶,請(qǐng)他們自己修改。因?yàn)槟玫搅嗽创a,客戶肯定很開(kāi)心啊,因?yàn)橹灰酝噶舜a,其他類似的設(shè)備都可以自己開(kāi)發(fā)了。過(guò)了一段時(shí)間,我問(wèn)客戶:上次那個(gè)產(chǎn)品的功能修改怎么樣了?他說(shuō):還沒(méi)搞定呢,上次你給的代碼我丟了,會(huì)把人看死的,現(xiàn)在正從頭重新寫(xiě)代碼呢。

故事是真實(shí)的。

代碼都是字符組成的,有些代碼看起來(lái)賞心悅目,有些代碼看起來(lái)懷疑人生。沒(méi)有架構(gòu)設(shè)計(jì)進(jìn)行指導(dǎo)的代碼,有這些缺點(diǎn):

(1) 代碼不能復(fù)用,移植很麻煩。

(2) 當(dāng)需求發(fā)生改動(dòng)時(shí),不能快速調(diào)整代碼。

(3) 對(duì)于已有的代碼:不敢改、不想改,牽一發(fā)而動(dòng)全身。

(4) 調(diào)試bug很頭疼。

相反的,如果架構(gòu)設(shè)計(jì)的好,對(duì)各方面都有好處:對(duì)于項(xiàng)目來(lái)說(shuō):

(1) 項(xiàng)目周期可控

(2) 代碼可讀性好

(3) 功能可擴(kuò)展

(4) 修改單一模塊不會(huì)影響其他功能

(5) 并行開(kāi)發(fā)

(6) 單元測(cè)試方便

對(duì)于開(kāi)發(fā)人員來(lái)說(shuō)

(1) 節(jié)省開(kāi)發(fā)時(shí)間

(2) 全局視角,提高開(kāi)發(fā)大型項(xiàng)目的能力

(3) debug輕松、快速

如何進(jìn)行架構(gòu)設(shè)計(jì)

1.設(shè)計(jì)文檔

只要進(jìn)入編程領(lǐng)域,大家都知道要高內(nèi)聚、低耦合,分模塊、分層設(shè)計(jì)。

但是具體需要怎么做?如何在規(guī)定好的項(xiàng)目周期內(nèi)把事情做好,而且讓自己沒(méi)那么累?如何為自己后期的維護(hù)做好鋪墊?

這些問(wèn)題可能在項(xiàng)目初期的時(shí)候,都規(guī)劃的比較好。但是在執(zhí)行過(guò)程中,就會(huì)越來(lái)越偷懶,越來(lái)越偏離預(yù)定義的方向。

我的建議是:

無(wú)論項(xiàng)目的大小,無(wú)論項(xiàng)目周期的長(zhǎng)短,一定要有設(shè)計(jì)文檔,設(shè)計(jì)文檔的詳細(xì)程度就需要根據(jù)項(xiàng)目的實(shí)際情況進(jìn)行靈活把握了。在設(shè)計(jì)文檔中,就要把架構(gòu)方面的設(shè)計(jì)體現(xiàn)出來(lái)。在實(shí)現(xiàn)的過(guò)程中,嚴(yán)格按照文檔中的要求來(lái)做。取乎其上,得乎其中;取乎其中,得乎其下。

2. 程序文件的物理模型

(1) 分層設(shè)計(jì)

業(yè)務(wù)層、功能模塊層、驅(qū)動(dòng)層。

(2) 分模塊設(shè)計(jì)

根據(jù)功能來(lái)劃分模塊

模塊之間通過(guò)API接口函數(shù)進(jìn)行數(shù)據(jù)交互

設(shè)計(jì)靈活的API接口函數(shù)

3. 進(jìn)程與線程的選擇

在嵌入式系統(tǒng)中,實(shí)現(xiàn)產(chǎn)品的功能,可以通過(guò)多個(gè)進(jìn)程相互配合來(lái)完成,也可以用多線程來(lái)實(shí)現(xiàn),這個(gè)選擇沒(méi)有固定的標(biāo)準(zhǔn),視項(xiàng)目的具體情況而定。

我一般的做法是:

如果產(chǎn)品功能不復(fù)雜,盡量用多線程來(lái)實(shí)現(xiàn);

如果產(chǎn)品設(shè)計(jì)到的功能比較多,那么就把強(qiáng)相關(guān)的模塊放到獨(dú)立的進(jìn)程中。

(1) 使用進(jìn)程

各模塊獨(dú)立編譯,不會(huì)相互影響。

出現(xiàn)類似 SegmentFault 問(wèn)題,很容易定位到肇事者。

方便分布式部署。

代碼安全:除了整合人員,其他人只需要 clone 自己負(fù)責(zé)的模塊代碼,沒(méi)有權(quán)限、也不需要訪問(wèn)別人的代碼。

但是:需要考慮到進(jìn)程之間的通信問(wèn)題,比如:IPC調(diào)用、socket通信、總線。(我一般都會(huì)采用在本地系統(tǒng)內(nèi)使用一條MQTT總線來(lái)掛接所有的通訊模塊)

(2) 使用線程

創(chuàng)建線程成本低。

線程之間共享全局變量(換個(gè)角度,這也是一種缺點(diǎn))。

模塊之間調(diào)用方便,因?yàn)楹瘮?shù)地址直接可見(jiàn)。

4. API設(shè)計(jì)

可以把一個(gè)模塊看成是黑盒,給定一個(gè)輸入,就會(huì)返回確定的結(jié)果,或者執(zhí)行確定的功能,

模塊之間只需要定義好這個(gè)API接口函數(shù)就行。

至于模塊內(nèi)部是如何實(shí)現(xiàn)的,大家各顯其能。

另外,如果你是API設(shè)計(jì)人員,一定要注意要讓調(diào)用者用起來(lái)很舒服。就像你遞一把剪刀給別人,一定是把手給對(duì)方。

另外一個(gè)經(jīng)驗(yàn),在項(xiàng)目設(shè)計(jì)初期,盡量不要把API的函數(shù)設(shè)計(jì)的太死板,容易給自己下套。

例如:

(1) 可以設(shè)計(jì)帶有 char *的變量,使用json格式的字符串,來(lái)傳遞任意長(zhǎng)度和類型的數(shù)據(jù)。

(2) 可以設(shè)計(jì)帶有 void *的變量,用來(lái)傳遞任意數(shù)據(jù)類型的地址,這個(gè)功能在很多項(xiàng)目中被使用的出神入化,比如:很早之前高通手機(jī)的BREW平臺(tái),智能家居中的 ZWave平臺(tái)。

5. 文件目錄的設(shè)計(jì)

這部分容易理解,職責(zé)不同的文件要存放到相應(yīng)的目錄中:頭文件、庫(kù)文件、可執(zhí)行文件、相關(guān)文檔。如果這部分組織的不夠好,當(dāng)你把項(xiàng)目移交給其他同事時(shí),肯定會(huì)被其他人在心中默念一千遍:F-U-C-K Y-O-U!

6.編譯腳本的設(shè)計(jì)(構(gòu)建工具)

當(dāng)我們接到一個(gè)嵌入式項(xiàng)目時(shí),在確定方案之后,程序運(yùn)行的平臺(tái)都是確定的,大部分情況就是嵌入式Linux,或者是一些變體。

在開(kāi)發(fā)階段,我見(jiàn)過(guò)有些開(kāi)發(fā)人員每調(diào)試一個(gè)功能點(diǎn),就把代碼交叉編譯后放,然后通過(guò)NFS遠(yuǎn)程掛載,或者scp遠(yuǎn)程拷貝,在真實(shí)設(shè)備上執(zhí)行。我看著都比較累。

其實(shí)完全可以在編譯腳本中為不同的平臺(tái)編譯一個(gè)版本。

比如:使用Ubuntu系統(tǒng)來(lái)開(kāi)發(fā)產(chǎn)品時(shí),只要x86平臺(tái)可以模擬產(chǎn)品功能,就直接編譯x86版本。

當(dāng)所有的功能點(diǎn)在x86平臺(tái)上測(cè)試OK了, 再統(tǒng)一放到真實(shí)的嵌入式系統(tǒng)中進(jìn)行聯(lián)調(diào),這樣做能節(jié)省很多時(shí)間。

Demo說(shuō)明

1.簡(jiǎn)介

這個(gè)Demo是從一個(gè)智能家居項(xiàng)目中抽取出來(lái)的,只是體現(xiàn)了各功能模塊的設(shè)計(jì),函數(shù)內(nèi)部沒(méi)有實(shí)現(xiàn)任何功能,僅僅是用來(lái)展示設(shè)計(jì)的過(guò)程。

2.代碼獲取

https://pan.baidu.com/s/1B3F9byydXeNWdtgYEEQNLg

密碼:3a9p

在 Ubuntu16.04 系統(tǒng)下,可以直接編譯執(zhí)行。

3.系統(tǒng)架構(gòu)圖

pIYBAGBihVqAUJCpAAsGaPmYpzo175.png

4.目錄結(jié)構(gòu)

Makefile: 編譯腳本

application: 業(yè)務(wù)層

module: 功能模塊層

driver: 硬件驅(qū)動(dòng)層

5. 執(zhí)行序列演示

圖中橙色的箭頭,表示從云端發(fā)來(lái)一個(gè)控制指令。

業(yè)務(wù)層接收到指令后,解析指令,發(fā)送給 Control 模塊。

Control 模塊再次解析具體的指令,發(fā)送給 ZigBee 設(shè)備,同時(shí)記錄到日志中。

pIYBAGBihSmAekqcAArNNczJ25Q828.png

編輯:jq

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 嵌入式
    +關(guān)注

    關(guān)注

    5198

    文章

    20449

    瀏覽量

    334125
  • 驅(qū)動(dòng)
    +關(guān)注

    關(guān)注

    12

    文章

    1956

    瀏覽量

    88552
  • API
    API
    +關(guān)注

    關(guān)注

    2

    文章

    2373

    瀏覽量

    66792

原文標(biāo)題:嵌入式開(kāi)發(fā)需要架構(gòu)設(shè)計(jì)嗎?

文章出處:【微信號(hào):mcu168,微信公眾號(hào):硬件攻城獅】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    嵌入式開(kāi)發(fā)是否會(huì)成為下一個(gè)被看好的領(lǐng)域?

    嵌入式開(kāi)發(fā)會(huì)不會(huì)成為下一個(gè)風(fēng)口,現(xiàn)在確實(shí)是個(gè)挺熱門(mén)的話題。各種論壇、投資報(bào)告都在講物聯(lián)網(wǎng)、智能硬件、AIoT的萬(wàn)億市場(chǎng),仿佛只要跟嵌入式沾邊,就能乘著東風(fēng)起飛。但如果套用我們剛才聊的那套邏輯,就會(huì)發(fā)現(xiàn),這事兒還真“不好說(shuō)”,得把那些熱鬧的表面詞藻扒開(kāi),看看里面的筋骨。
    的頭像 發(fā)表于 02-26 09:56 ?443次閱讀
    <b class='flag-5'>嵌入式開(kāi)發(fā)</b><b class='flag-5'>是否</b>會(huì)成為下一個(gè)被看好的領(lǐng)域?

    嵌入式開(kāi)發(fā)常用函數(shù)速查表

    嵌入式開(kāi)發(fā)中,掌握常用函數(shù)的用法可以大大提高開(kāi)發(fā)效率。無(wú)論是單片機(jī)初學(xué)者還是有一定經(jīng)驗(yàn)的工程師,熟悉函數(shù)庫(kù)和調(diào)用方式都是必備技能。今天,我們?yōu)榇蠹艺硪环?b class='flag-5'>嵌入式開(kāi)發(fā)常用函數(shù)速查表,覆蓋GPIO
    的頭像 發(fā)表于 01-19 09:06 ?308次閱讀
    <b class='flag-5'>嵌入式開(kāi)發(fā)</b>常用函數(shù)速查表

    什么是嵌入式應(yīng)用開(kāi)發(fā)?

    概述 所謂的嵌入式應(yīng)用開(kāi)發(fā)就是在嵌入式操作系統(tǒng)下進(jìn)行開(kāi)發(fā)、軟硬件綜合開(kāi)發(fā) ?嵌入式應(yīng)用
    發(fā)表于 01-12 16:13

    性能與性價(jià)比兼得!迅為RK3562開(kāi)發(fā)板開(kāi)啟嵌入式開(kāi)發(fā)新選擇

    性能與性價(jià)比兼得!迅為RK3562開(kāi)發(fā)板開(kāi)啟嵌入式開(kāi)發(fā)新選擇
    的頭像 發(fā)表于 12-23 16:10 ?1283次閱讀
    性能與性價(jià)比兼得!迅為RK3562<b class='flag-5'>開(kāi)發(fā)</b>板開(kāi)啟<b class='flag-5'>嵌入式開(kāi)發(fā)</b>新選擇

    分享一個(gè)嵌入式開(kāi)發(fā)學(xué)習(xí)路線

    拓展期(3-4個(gè)月) 學(xué)習(xí)嵌入式操作系統(tǒng)(RTOS)和物聯(lián)網(wǎng)通信技術(shù),能開(kāi)發(fā)“多任務(wù)、聯(lián)網(wǎng)”的復(fù)雜項(xiàng)目,理解企業(yè)級(jí)嵌入式開(kāi)發(fā)的“架構(gòu)思維”。這一階段的學(xué)習(xí)
    發(fā)表于 12-04 11:01

    嵌入式軟件分層架構(gòu)設(shè)計(jì)原則

    嵌入式軟件分層架構(gòu)的設(shè)計(jì)原則如下: 模塊化和可擴(kuò)展性:每一層應(yīng)當(dāng)保持松耦合,這樣當(dāng)硬件變化或某些功能擴(kuò)展時(shí),只需要修改對(duì)應(yīng)的層次,而不影響整體架構(gòu)。 硬件無(wú)關(guān)性:上層代碼應(yīng)當(dāng)盡量避免直
    發(fā)表于 11-28 07:05

    嵌入式開(kāi)發(fā)的關(guān)鍵點(diǎn)介紹

    嵌入式開(kāi)發(fā)在現(xiàn)代科技中扮演著非常重要的角色。隨著物聯(lián)網(wǎng)的發(fā)展,嵌入式系統(tǒng)的需求也越來(lái)越大。嵌入式開(kāi)發(fā)不僅需要開(kāi)發(fā)人員具備深入的硬件知識(shí)和編程
    發(fā)表于 11-13 08:12

    恩智浦如何攻克兩大嵌入式開(kāi)發(fā)難題

    在我們的身邊,嵌入式系統(tǒng)無(wú)處不在。而隨著技術(shù)的進(jìn)步和應(yīng)用的拓展,今天的嵌入式開(kāi)發(fā)也面臨著諸多新課題、新挑戰(zhàn)。
    的頭像 發(fā)表于 10-27 09:28 ?1785次閱讀

    嵌入式需要掌握哪些核心技能?

    : 1)C語(yǔ)言與底層編程 核心地位:C語(yǔ)言是嵌入式開(kāi)發(fā)的基石,需精通指針操作、內(nèi)存管理、位運(yùn)算,直接操控硬件資源。 延伸技能:C++用于復(fù)雜項(xiàng)目架構(gòu)設(shè)計(jì),匯編語(yǔ)言優(yōu)化底層性能(如啟動(dòng)代碼、中斷處理
    發(fā)表于 10-21 16:25

    新一代嵌入式開(kāi)發(fā)平臺(tái) AMD嵌入式軟件和工具2025.1版現(xiàn)已推出

    AMD 2025.1 版嵌入式軟件和工具是面向新一代嵌入式系統(tǒng)開(kāi)發(fā)而打造的綜合平臺(tái),全面加速概念構(gòu)想到部署落地。 2025.1 版嵌入式軟件和工具的新 增功能 AMD
    的頭像 發(fā)表于 08-20 09:15 ?3986次閱讀

    嵌入式開(kāi)發(fā)就業(yè)還有前景嗎?

    。在智能家居領(lǐng)域,嵌入式開(kāi)發(fā)的主要工作是開(kāi)發(fā)各種智能化設(shè)備和系統(tǒng),如智能照明、智能安防、智能家電等。嵌入式開(kāi)發(fā)人員需要掌握相關(guān)的硬件和軟件技術(shù),如處理器、傳感器、通信技術(shù)、操作系統(tǒng)等,
    發(fā)表于 07-16 10:47

    嵌入式開(kāi)發(fā)入門(mén)指南:從零開(kāi)始學(xué)習(xí)嵌入式

    隨著物聯(lián)網(wǎng)、智能硬件的發(fā)展,嵌入式開(kāi)發(fā)成為熱門(mén)技能之一。以下將為初學(xué)者提供一份詳細(xì)的嵌入式開(kāi)發(fā)入門(mén)指南,涵蓋學(xué)習(xí)路徑、必備工具、推薦資源等內(nèi)容。 1. 嵌入式系統(tǒng)的定義與應(yīng)用嵌入式系統(tǒng)
    發(fā)表于 05-15 09:29

    嵌入式開(kāi)發(fā):高門(mén)檻的系統(tǒng)性工程與 996 的行業(yè)困局

    嵌入式開(kāi)發(fā)的門(mén)檻,往往被培訓(xùn)機(jī)構(gòu)和表象所掩蓋。許多人誤以為 “用 C 語(yǔ)言寫(xiě)個(gè)跑在 ARM 上的程序” 就是嵌入式,實(shí)則連皮毛都未觸及。真正的嵌入式開(kāi)發(fā)是硬件與軟件深度融合的系統(tǒng)性工程,需跨越三重壁壘
    的頭像 發(fā)表于 04-09 11:06 ?994次閱讀
    <b class='flag-5'>嵌入式開(kāi)發(fā)</b>:高門(mén)檻的系統(tǒng)性工程與 996 的行業(yè)困局

    2025年嵌入式開(kāi)發(fā)趨勢(shì):新技術(shù)如何影響你的工作?

    嵌入式開(kāi)發(fā)的世界正在快速變化,新技術(shù)的崛起正悄然改變硬件設(shè)計(jì)、軟件架構(gòu)以及開(kāi)發(fā)方式。無(wú)論你是剛?cè)腴T(mén)的新手,還是經(jīng)驗(yàn)豐富的工程師,理解這些趨勢(shì)不僅能幫助你應(yīng)對(duì)技術(shù)變革,還能在職業(yè)發(fā)展中占據(jù)主動(dòng)
    的頭像 發(fā)表于 03-14 17:36 ?3281次閱讀
    2025年<b class='flag-5'>嵌入式開(kāi)發(fā)</b>趨勢(shì):新技術(shù)如何影響你的工作?

    BlackBerry QNX推出通用嵌入式開(kāi)發(fā)平臺(tái)

    BlackBerry有限公司(紐交所代碼:BB;多倫多證券交易所代碼:BB)旗下部門(mén)QNX今日宣布推出QNX 通用嵌入式開(kāi)發(fā)平臺(tái)(General Embedded Development
    的頭像 發(fā)表于 03-11 16:04 ?1194次閱讀