国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

嵌入式設計中每一分錢都很重要

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

掃碼添加小助手

加入工程師交流群

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

使這個問題變得更糟的是,嵌入式工程師通常不太擅長在應用程序的設計階段預測內存需求。這些對所需內存量的最佳“猜測”是處理器選擇的關鍵因素。鑒于許多生產運行每年達到數十萬或數百萬臺,在BML中增加不必要的美元會對公司的底線產生有害影響。

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

提高編譯器優化的標準

一些工程師非常不愿意加快優化,因為他們認為優化會給系統帶來錯誤。這種情況很少發生,根據我的經驗,大約 5% 的優化器問題最終是優化器的問題。

當優化級別提高時,編譯器對 C 和 C++ 語言的語義非常挑剔。優化決策是基于對語言規則的嚴格解釋做出的。通常,工程師并沒有以他們看起來很自然的方式完全了解語言和代碼的所有細微差別。

例如,如果函數調用是這樣編寫的:

myFunc(varA, varB, varC, varD);

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

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

在大多數情況下,這不會對代碼產生影響。但是,如果您依賴于從左到右編寫時要訪問的變量,則可能會出現代碼在較低優化下運行良好但在高級別無法正常運行的情況。這就是工具供應商提供的良好支持結構可以幫助發現這些類型的問題并重寫代碼部分以更好地優化和正常工作的地方,而與優化設置無關。

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

當設置為高尺寸優化時,好的工具可以節省 10-40% 的代碼大小。但是,并非所有優化轉換都是任何代碼段的好選擇 - 某些轉換實際上可能會增加某些類型代碼的代碼大小。這本身就是一篇文章。

目前,有一些資源可以解決“從編譯器中獲得最少的資源”,這意味著最小大小的代碼和最緊湊的執行時間。節省如此多的代碼空間可能是剝離功能以保持在設備尺寸內、由于手動優化代碼而錯過計劃或超出 BML 預算之間的區別。

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

在 BML 中調試成本

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

好消息是,存在特殊的工具可以幫助發現這些類型的問題。

處理硬故障

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

要查找導致硬故障的原因,只需滾動跟蹤窗口并找到在轉到錯誤處理程序之前執行的指令。瞧!這個指示是罪魁禍首。如果可以可靠地重現錯誤,請在錯誤處理程序處設置斷點并消除跟蹤窗口中的所有滾動 - 罪魁禍首是跟蹤窗口中的倒數第二條指令。

現在原因已知,因此可以在罪魁禍首上設置斷點,并再次運行測試用例,以查看導致異常的代碼出了什么問題。

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

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

停止堆棧溢出

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

在 Arm 領域,大多數處理器在其調試接口中都有一個數據觀察點和跟蹤 (DWT) 塊,可用于快速隔離這些類型的問題。在這種情況下,請使用數據觀察點來找出壞事發生的地方。每當接觸一段數據時,此觀察點本質上就是一個斷點。

將選項配置為僅在讀取和/或寫入數據時中斷執行。此外,甚至可以將其限制為僅在數據是具有特定位掩碼的特定值時才中斷。在避免每次訪問數據時都停止時,這非常方便。

在堆棧溢出的情況下,我們希望在堆棧頂部設置一個數據觀察點。讀取或寫入該值并不重要,因為堆棧在代碼中的那個點已經吹響了。處理器將在堆棧頂部停止執行,提供一個完全保留的調用堆棧,允許查看哪一段代碼正在吹堆棧以及您如何到達該點。這是確定如何修復錯誤的關鍵。

清理整理數據

對于被破壞的數據,我們使用基本相同的技術,只是在該變量經歷寫入時設置數據觀察點。如果始終使用相同的值進行破壞,則進一步縮小斷點的范圍,僅在將該值寫入變量時跳閘。然后,再次運行我們的測試用例,找出導致問題的代碼。

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

讓采購知道您的關心

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

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

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

審核編輯:郭婷

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 處理器
    +關注

    關注

    68

    文章

    20250

    瀏覽量

    252209
  • C++
    C++
    +關注

    關注

    22

    文章

    2123

    瀏覽量

    77110
  • 編譯器
    +關注

    關注

    1

    文章

    1672

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

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

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

    嵌入式單片機開發學習路徑

    嵌入式系統是現代科技的重要組成部分,廣泛應用于智能家居、汽車電子、工業控制、醫療設備等領域。學習嵌入式單片機開發不僅能提升個人技能,還能開拓職業發展路徑。本文將為你提供條詳細的
    發表于 02-09 15:42

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

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

    什么是嵌入式應用開發?

    系統,用于控制、監測或通信等特定用途。與般計算機系統不同,嵌入式系統通常具有較小的存儲容量、處理能力和功耗,且需要滿足特定的實時性、可靠性和安全性要求?。 應用領域 嵌入式系統
    發表于 01-12 16:13

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

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

    嵌入式應掌握的幾種能力

    1. 編程語言 基本掌握嵌入式必備的編程語言。C語言為主,C++為輔。在資源有限的情況下,大多數嵌入式產品還是使用C語言為主的,特別是底層驅動開發。上層應用開發大多用C,在些資源比較充足的平臺
    發表于 12-08 06:05

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

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

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

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

    嵌入式開發的關鍵點介紹

    嵌入式開發在現代科技扮演著非常重要的角色。隨著物聯網的發展,嵌入式系統的需求也越來越大。嵌入式開發不僅需要開發人員具備深入的硬件知識和編程
    發表于 11-13 08:12

    N101仿真運行C程序出錯怎么解決?

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

    為什么說對嵌入式ARM核心板進行24小時老化測試十分重要

    在飛凌嵌入式的生產及測試流程,有個雷打不動的環節——每塊核心板產品都必須完成24小時持續老化測試,才能獲準出廠。這個看似簡單的數字背后,是飛凌
    的頭像 發表于 10-24 09:01 ?9412次閱讀
    為什么說對<b class='flag-5'>嵌入式</b>ARM核心板進行24小時老化測試十<b class='flag-5'>分重要</b>?

    嵌入式工程師為什么要學QT?

    Qt對嵌入式工程師來說,真的很重要嗎? Qt是個跨平臺的C++應用程序開發框架,非常適合嵌入式系統的開發,Qt在嵌入式開發
    發表于 08-14 15:15

    入行嵌入式應該怎么準備?

    想入行嵌入式該怎么準備。很能理解大家對于嵌入式的關注,嵌入式系統是當今科技領域中的重要組成部分,它存在于我們生活的方方面面,各行各業。智能化時代的到來也讓
    發表于 08-06 10:34

    嵌入式適合自學嗎?

    缺乏系統的規劃,而學習到些不相關或不重要的內容。 2)缺乏實踐機會:嵌入式開發需要大量的實踐,而自學的學習者可能缺乏實際的項目練習和實踐機會。這會導致學習者在實際工作缺乏經驗,難以
    發表于 04-27 09:54

    Python在嵌入式系統的應用場景

    你想把你的職業生涯提升到個新的水平?Python在嵌入式系統中正在成為股不可缺少的新力量。盡管傳統上嵌入式開發更多地依賴于C和C++語言,Python的優勢在于其簡潔的語法、豐富的
    的頭像 發表于 03-19 14:10 ?1492次閱讀