91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

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

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

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

嵌入式設(shè)計(jì)中每一分錢都很重要

星星科技指導(dǎo)員 ? 來源:嵌入式計(jì)算設(shè)計(jì) ? 作者:Shawn Prestridge ? 2022-11-16 17:07 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

量化節(jié)約的最簡(jiǎn)單方法之一是BML:低成本零件要求公司花費(fèi)更少的錢來制造產(chǎn)品。在大多數(shù)嵌入式設(shè)計(jì)中,兩個(gè)最昂貴的部件通常是屏幕(如果設(shè)備有,大多數(shù)物聯(lián)網(wǎng)設(shè)備沒有)和處理器。隨著您向處理器添加更多內(nèi)存(閃存和 RAM),處理器的成本也會(huì)增加。雖然成本增加多少的具體細(xì)節(jié)因半導(dǎo)體公司而異,但粗略的經(jīng)驗(yàn)法則是,每增加一倍內(nèi)存,處理器單位成本就會(huì)增加約一美元。

使這個(gè)問題變得更糟的是,嵌入式工程師通常不太擅長(zhǎng)在應(yīng)用程序的設(shè)計(jì)階段預(yù)測(cè)內(nèi)存需求。這些對(duì)所需內(nèi)存量的最佳“猜測(cè)”是處理器選擇的關(guān)鍵因素。鑒于許多生產(chǎn)運(yùn)行每年達(dá)到數(shù)十萬或數(shù)百萬臺(tái),在BML中增加不必要的美元會(huì)對(duì)公司的底線產(chǎn)生有害影響。

結(jié)果,無數(shù)項(xiàng)目“資源緊張”,這是“我們沒有正確預(yù)測(cè)內(nèi)存需求”的代碼。加劇這個(gè)問題的是,BML通常在項(xiàng)目開始時(shí)就被推薦給高層管理人員。一旦發(fā)生這種情況,成本就變得不可侵犯。這使人們爭(zhēng)先恐后地減少內(nèi)存占用,或者依靠采購(gòu)來保持BML成本與管理層預(yù)期的相同,通過協(xié)商其他組件的更好價(jià)格。為了減少內(nèi)存占用,團(tuán)隊(duì)經(jīng)常求助于編譯器的優(yōu)化引擎來減小生成的代碼的大小。

提高編譯器優(yōu)化的標(biāo)準(zhǔn)

一些工程師非常不愿意加快優(yōu)化,因?yàn)樗麄冋J(rèn)為優(yōu)化會(huì)給系統(tǒng)帶來錯(cuò)誤。這種情況很少發(fā)生,根據(jù)我的經(jīng)驗(yàn),大約 5% 的優(yōu)化器問題最終是優(yōu)化器的問題。

當(dāng)優(yōu)化級(jí)別提高時(shí),編譯器對(duì) C 和 C++ 語言的語義非常挑剔。優(yōu)化決策是基于對(duì)語言規(guī)則的嚴(yán)格解釋做出的。通常,工程師并沒有以他們看起來很自然的方式完全了解語言和代碼的所有細(xì)微差別。

例如,如果函數(shù)調(diào)用是這樣編寫的:

myFunc(varA, varB, varC, varD);

自然的假設(shè)是從左到右讀取變量:varA 將從內(nèi)存中讀取,然后是 varB 等。

但是,C 或 C++ 中沒有任何內(nèi)容表明必須如此。如果內(nèi)存是有目的地布置的,或者是偶然的,其中varB位于varD旁邊,那么高級(jí)優(yōu)化可能會(huì)使用索引寄存器來讀取連續(xù)的內(nèi)存空間,以節(jié)省代碼大小和速度。

在大多數(shù)情況下,這不會(huì)對(duì)代碼產(chǎn)生影響。但是,如果您依賴于從左到右編寫時(shí)要訪問的變量,則可能會(huì)出現(xiàn)代碼在較低優(yōu)化下運(yùn)行良好但在高級(jí)別無法正常運(yùn)行的情況。這就是工具供應(yīng)商提供的良好支持結(jié)構(gòu)可以幫助發(fā)現(xiàn)這些類型的問題并重寫代碼部分以更好地優(yōu)化和正常工作的地方,而與優(yōu)化設(shè)置無關(guān)。

此外,如果您的代碼可以在高優(yōu)化下工作,那么它編寫正確并且經(jīng)過更好的測(cè)試。如果代碼在更高的優(yōu)化下不起作用,則很有可能潛在缺陷正在等待“咬你”。

當(dāng)設(shè)置為高尺寸優(yōu)化時(shí),好的工具可以節(jié)省 10-40% 的代碼大小。但是,并非所有優(yōu)化轉(zhuǎn)換都是任何代碼段的好選擇 - 某些轉(zhuǎn)換實(shí)際上可能會(huì)增加某些類型代碼的代碼大小。這本身就是一篇文章。

目前,有一些資源可以解決“從編譯器中獲得最少的資源”,這意味著最小大小的代碼和最緊湊的執(zhí)行時(shí)間。節(jié)省如此多的代碼空間可能是剝離功能以保持在設(shè)備尺寸內(nèi)、由于手動(dòng)優(yōu)化代碼而錯(cuò)過計(jì)劃或超出 BML 預(yù)算之間的區(qū)別。

雖然好的代碼可以在任何優(yōu)化級(jí)別上運(yùn)行相同的操作,但調(diào)試高度優(yōu)化的代碼在最好的情況下是很棘手的。例如,整個(gè)代碼段可以折疊到完全不同的位置的其他代碼段中。這就是為什么必須在低優(yōu)化或無優(yōu)化下調(diào)試代碼,并在增加優(yōu)化以運(yùn)行全部測(cè)試之前驗(yàn)證代碼是否正常運(yùn)行的原因。

在 BML 中調(diào)試成本

使嵌入式調(diào)試變得困難的部分原因是,大多數(shù)人根本不知道他們武器庫中的所有調(diào)試工具。它們傾向于默認(rèn)使用 printf 語句和代碼斷點(diǎn)。在嘗試隔離硬故障、查找發(fā)生堆棧溢出的位置或找出變量不斷被破壞的原因時(shí),這些默認(rèn)值無濟(jì)于事。

好消息是,存在特殊的工具可以幫助發(fā)現(xiàn)這些類型的問題。

處理硬故障

讓我們從硬故障開始。許多現(xiàn)代MCU都具有實(shí)時(shí)指令跟蹤功能,可讓您跟蹤指令流。在基于 Arm 的設(shè)備上,用于實(shí)現(xiàn)此目的的技術(shù)是嵌入式跟蹤宏單元 (ETM)。參考手冊(cè)將指示設(shè)備是否支持 ETM。如果是這樣,請(qǐng)將跟蹤引腳拉到調(diào)試標(biāo)頭,并使用啟用跟蹤的調(diào)試器(如 IAR I-jet 跟蹤),該調(diào)試器可以捕獲該實(shí)時(shí)指令流并將其顯示在調(diào)試器窗口中。

要查找導(dǎo)致硬故障的原因,只需滾動(dòng)跟蹤窗口并找到在轉(zhuǎn)到錯(cuò)誤處理程序之前執(zhí)行的指令。瞧!這個(gè)指示是罪魁禍?zhǔn)?。如果可以可靠地重現(xiàn)錯(cuò)誤,請(qǐng)?jiān)阱e(cuò)誤處理程序處設(shè)置斷點(diǎn)并消除跟蹤窗口中的所有滾動(dòng) - 罪魁禍?zhǔn)资歉櫞翱谥械牡箶?shù)第二條指令。

現(xiàn)在原因已知,因此可以在罪魁禍?zhǔn)咨显O(shè)置斷點(diǎn),并再次運(yùn)行測(cè)試用例,以查看導(dǎo)致異常的代碼出了什么問題。

但是,如果您沒有 ETM 怎么辦?大多數(shù)基于 Arm 的設(shè)備都具有串行線輸出 (SWO),允許采樣、低速跟蹤。雖然您沒有收到每一條指令,但這可以提供足夠的跟蹤信息來縮小范圍并定位問題。此外,嘗試降低MCU時(shí)鐘和/或調(diào)整SWO設(shè)置,以便從調(diào)試器中獲取更精細(xì)的跟蹤信息粒度,以查明問題發(fā)生的位置。

其他設(shè)備架構(gòu)具有與 ETM 或 SWO 類似的功能。因此,使用高質(zhì)量的工具可以利用這些信息并快速隔離和消除問題。此外,可用的支持資源有助于提高 SWO 的性能,以保護(hù)更多的跟蹤數(shù)據(jù)。

停止堆棧溢出

堆棧溢出或找出變量神秘丟失其內(nèi)容的原因怎么樣?使用相同的技術(shù)來診斷這兩種情況。

在 Arm 領(lǐng)域,大多數(shù)處理器在其調(diào)試接口中都有一個(gè)數(shù)據(jù)觀察點(diǎn)和跟蹤 (DWT) 塊,可用于快速隔離這些類型的問題。在這種情況下,請(qǐng)使用數(shù)據(jù)觀察點(diǎn)來找出壞事發(fā)生的地方。每當(dāng)接觸一段數(shù)據(jù)時(shí),此觀察點(diǎn)本質(zhì)上就是一個(gè)斷點(diǎn)。

將選項(xiàng)配置為僅在讀取和/或?qū)懭霐?shù)據(jù)時(shí)中斷執(zhí)行。此外,甚至可以將其限制為僅在數(shù)據(jù)是具有特定位掩碼的特定值時(shí)才中斷。在避免每次訪問數(shù)據(jù)時(shí)都停止時(shí),這非常方便。

在堆棧溢出的情況下,我們希望在堆棧頂部設(shè)置一個(gè)數(shù)據(jù)觀察點(diǎn)。讀取或?qū)懭朐撝挡⒉恢匾?,因?yàn)槎褩T诖a中的那個(gè)點(diǎn)已經(jīng)吹響了。處理器將在堆棧頂部停止執(zhí)行,提供一個(gè)完全保留的調(diào)用堆棧,允許查看哪一段代碼正在吹堆棧以及您如何到達(dá)該點(diǎn)。這是確定如何修復(fù)錯(cuò)誤的關(guān)鍵。

清理整理數(shù)據(jù)

對(duì)于被破壞的數(shù)據(jù),我們使用基本相同的技術(shù),只是在該變量經(jīng)歷寫入時(shí)設(shè)置數(shù)據(jù)觀察點(diǎn)。如果始終使用相同的值進(jìn)行破壞,則進(jìn)一步縮小斷點(diǎn)的范圍,僅在將該值寫入變量時(shí)跳閘。然后,再次運(yùn)行我們的測(cè)試用例,找出導(dǎo)致問題的代碼。

同樣,許多其他架構(gòu)(如瑞薩電子RL78、RX和許多其他芯片供應(yīng)商的器件)具有類似的功能,可用于實(shí)現(xiàn)相同的結(jié)果。使用高質(zhì)量的工具,查找這些類型的問題變得更加容易,并增加了滿足緊迫的時(shí)間表和截止日期的幾率。

讓采購(gòu)知道您的關(guān)心

事半功倍似乎是一個(gè)矛盾,但通過使用正確的工具可以輕松實(shí)現(xiàn)。通過使用編譯器優(yōu)化,您可以將代碼硬塞到盡可能小的空間中,以便為您的應(yīng)用程序使用最便宜的設(shè)備。

優(yōu)化還可以幫助桌面檢查您的代碼,以查看它在高優(yōu)化下是否運(yùn)行相同,以便在您將代碼簽入構(gòu)建之前找到潛在的代碼缺陷(從而使每個(gè)缺陷都計(jì)入您的發(fā)布指標(biāo))。它還通過使用完整的工具箱更快地查找錯(cuò)誤來幫助您更有效地進(jìn)行調(diào)試,從而縮短測(cè)試和修復(fù)周期并更快地啟動(dòng)項(xiàng)目。

如果您知道工具箱中有哪些工具(以及如何正確使用它們),您就可以讓每一分錢都為您的組織發(fā)揮作用。

審核編輯:郭婷

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

    關(guān)注

    68

    文章

    20256

    瀏覽量

    252479
  • C++
    C++
    +關(guān)注

    關(guān)注

    22

    文章

    2124

    瀏覽量

    77147
  • 編譯器
    +關(guān)注

    關(guān)注

    1

    文章

    1672

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評(píng)論

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

    【解決方案】新能源園區(qū)投資,如何讓每一分錢都“心中有數(shù)”?

    體化微電網(wǎng)成為新能源消納與能效提升的關(guān)鍵載體,但風(fēng)光分布能源出力的波動(dòng)性、負(fù)荷需求的不確定性,讓新能源規(guī)劃和能源管理難度陡增。 傳統(tǒng)能源調(diào)度模式難以匹配實(shí)時(shí)能源供需變化,導(dǎo)致能源浪費(fèi)、運(yùn)行成本高等問題。市場(chǎng)亟需
    的頭像 發(fā)表于 02-26 16:03 ?118次閱讀
    【解決方案】新能源園區(qū)投資,如何讓<b class='flag-5'>每一分錢</b>都“心中有數(shù)”?

    嵌入式單片機(jī)開發(fā)學(xué)習(xí)路徑

    嵌入式系統(tǒng)是現(xiàn)代科技的重要組成部分,廣泛應(yīng)用于智能家居、汽車電子、工業(yè)控制、醫(yī)療設(shè)備等領(lǐng)域。學(xué)習(xí)嵌入式單片機(jī)開發(fā)不僅能提升個(gè)人技能,還能開拓職業(yè)發(fā)展路徑。本文將為你提供條詳細(xì)的
    發(fā)表于 02-09 15:42

    記ESP32CAM踩坑解決指南,已反映商家

    中國(guó)香河英茂科工沒有個(gè)鴨蛋是白吃的,沒有一分錢融資是百花的,都轉(zhuǎn)化為科技成果----記ESP32CAM踩坑解決指南,已反映商家 https://user.qzone.qq.com/382905282/blog/1770127464
    發(fā)表于 02-03 22:23

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

    系統(tǒng),用于控制、監(jiān)測(cè)或通信等特定用途。與般計(jì)算機(jī)系統(tǒng)不同,嵌入式系統(tǒng)通常具有較小的存儲(chǔ)容量、處理能力和功耗,且需要滿足特定的實(shí)時(shí)性、可靠性和安全性要求?。 應(yīng)用領(lǐng)域 嵌入式系統(tǒng)
    發(fā)表于 01-12 16:13

    電表自身耗電誰掏錢?答案明確:不用居民買單!

    答案來了,不用居民掏一分錢!
    的頭像 發(fā)表于 12-31 10:58 ?758次閱讀

    嵌入式應(yīng)掌握的幾種能力

    1. 編程語言 基本掌握嵌入式必備的編程語言。C語言為主,C++為輔。在資源有限的情況下,大多數(shù)嵌入式產(chǎn)品還是使用C語言為主的,特別是底層驅(qū)動(dòng)開發(fā)。上層應(yīng)用開發(fā)大多用C,在些資源比較充足的平臺(tái)
    發(fā)表于 12-08 06:05

    UPS電源售價(jià)迷霧重重?讀懂這幾點(diǎn),讓你的每一分錢都花在刀刃上

    導(dǎo)語:正在為數(shù)據(jù)中心、醫(yī)療設(shè)備或家庭辦公電腦尋找臺(tái)可靠的UPS不間斷電源?查價(jià)格,從幾百到數(shù)萬,是不是瞬間眼花繚亂??jī)r(jià)格差異的背后,究竟隱藏著怎樣的秘密?今天,我們就來撥開迷霧,聊聊UPS售價(jià)
    的頭像 發(fā)表于 11-20 10:45 ?575次閱讀
    UPS電源售價(jià)迷霧重重?讀懂這幾點(diǎn),讓你的<b class='flag-5'>每一分錢</b>都花在刀刃上

    2025年最佳的嵌入式編程語言有哪些呢?

    嵌入式系統(tǒng)是現(xiàn)代科技不可或缺的一部分。它們存在于家用電器、汽車、住宅、醫(yī)院、商店等各個(gè)領(lǐng)域。它們與我們的社會(huì)緊密相連。選擇合適的語言來構(gòu)建嵌入式系統(tǒng)對(duì)于成功至關(guān)重要。那么,2025年最
    的頭像 發(fā)表于 11-14 10:27 ?1447次閱讀
    2025年最佳的<b class='flag-5'>嵌入式</b>編程語言有哪些呢?

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

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

    N101仿真運(yùn)行C程序出錯(cuò)怎么解決?

    公眾號(hào)里面的微信不能添加了。。。。。能不能處理下,幫我拉如討論群,謝謝! 問題:芯來一分錢計(jì)劃里面的N101SoC,然后將C程序編譯好之后,仿真運(yùn)行時(shí)出現(xiàn)錯(cuò)誤,大家能不能看看時(shí)什么原因幫忙解決下。。。。。,新手小白看不出什么
    發(fā)表于 11-06 06:02

    為什么說對(duì)嵌入式ARM核心板進(jìn)行24小時(shí)老化測(cè)試十分重要

    在飛凌嵌入式的生產(chǎn)及測(cè)試流程,有個(gè)雷打不動(dòng)的環(huán)節(jié)——每塊核心板產(chǎn)品都必須完成24小時(shí)持續(xù)老化測(cè)試,才能獲準(zhǔn)出廠。這個(gè)看似簡(jiǎn)單的數(shù)字背后,是飛凌
    的頭像 發(fā)表于 10-24 09:01 ?9422次閱讀
    為什么說對(duì)<b class='flag-5'>嵌入式</b>ARM核心板進(jìn)行24小時(shí)老化測(cè)試十<b class='flag-5'>分重要</b>?

    嵌入式工程師為什么要學(xué)QT?

    Qt對(duì)嵌入式工程師來說,真的很重要嗎? Qt是個(gè)跨平臺(tái)的C++應(yīng)用程序開發(fā)框架,非常適合嵌入式系統(tǒng)的開發(fā),Qt在嵌入式開發(fā)
    發(fā)表于 08-14 15:15

    入行嵌入式應(yīng)該怎么準(zhǔn)備?

    想入行嵌入式該怎么準(zhǔn)備。很能理解大家對(duì)于嵌入式的關(guān)注,嵌入式系統(tǒng)是當(dāng)今科技領(lǐng)域中的重要組成部分,它存在于我們生活的方方面面,各行各業(yè)。智能化時(shí)代的到來也讓
    發(fā)表于 08-06 10:34

    嵌入式適合自學(xué)嗎?

    缺乏系統(tǒng)的規(guī)劃,而學(xué)習(xí)到些不相關(guān)或不重要的內(nèi)容。 2)缺乏實(shí)踐機(jī)會(huì):嵌入式開發(fā)需要大量的實(shí)踐,而自學(xué)的學(xué)習(xí)者可能缺乏實(shí)際的項(xiàng)目練習(xí)和實(shí)踐機(jī)會(huì)。這會(huì)導(dǎo)致學(xué)習(xí)者在實(shí)際工作缺乏經(jīng)驗(yàn),難以
    發(fā)表于 04-27 09:54

    Python在嵌入式系統(tǒng)的應(yīng)用場(chǎng)景

    你想把你的職業(yè)生涯提升到個(gè)新的水平?Python在嵌入式系統(tǒng)中正在成為股不可缺少的新力量。盡管傳統(tǒng)上嵌入式開發(fā)更多地依賴于C和C++語言,Python的優(yōu)勢(shì)在于其簡(jiǎn)潔的語法、豐富的
    的頭像 發(fā)表于 03-19 14:10 ?1510次閱讀