色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

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

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

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

為什么嵌入式系統(tǒng)需要堆棧分析?如何進(jìn)行監(jiān)控堆棧分析呢?

MATLAB ? 來(lái)源:MATLAB ? 2024-03-28 10:23 ? 次閱讀

隨著代碼行數(shù)從幾千到上百萬(wàn)不等,嵌入式軟件變得日益復(fù)雜,但總體目標(biāo)依然是實(shí)現(xiàn)穩(wěn)健、正確且快速執(zhí)行的軟件。快速執(zhí)行的軟件需要以最優(yōu)方式管理可用的 CPU 和內(nèi)存資源,這對(duì)內(nèi)存空間(尤其是 RAM)有限的嵌入式系統(tǒng)來(lái)說(shuō)不失為一項(xiàng)挑戰(zhàn)。

為此,必須通過(guò)執(zhí)行堆棧和堆分析對(duì) RAM 的使用情況進(jìn)行分析。開(kāi)發(fā)人員手動(dòng)估計(jì)堆棧和堆負(fù)載是一項(xiàng)艱巨的任務(wù),即使對(duì)于小程序來(lái)說(shuō)也是如此。如果估計(jì)不正確,則可能會(huì)導(dǎo)致堆棧溢出和未定義的行為。

因此,一些編碼標(biāo)準(zhǔn)要求強(qiáng)制執(zhí)行內(nèi)存分配使用最佳實(shí)踐,以避免不必要的開(kāi)銷。但是,堆棧仍是 RAM 的必要組成部分,需要得到優(yōu)化利用。

為什么嵌入式系統(tǒng)需要堆棧分析?

當(dāng)可用堆棧小于代碼需求時(shí),就會(huì)發(fā)生堆棧溢出。然而,當(dāng)為環(huán)境配置的堆棧大于需求時(shí),內(nèi)存又會(huì)被浪費(fèi)。開(kāi)發(fā)人員必須持續(xù)一致地估計(jì)安全關(guān)鍵型應(yīng)用中最差情形下的堆棧使用量,以防止軟件運(yùn)行時(shí)發(fā)生 RAM 不足的情況。

e8b80808-ec2b-11ee-a297-92fbcf53809c.png

堆棧估計(jì)不正確所帶來(lái)的風(fēng)險(xiǎn)。

如何估計(jì)堆棧分析?

手動(dòng)估計(jì)堆棧

雖然手動(dòng)估計(jì)堆棧分析偶爾會(huì)有幫助,但對(duì)于更復(fù)雜的系統(tǒng)來(lái)說(shuō)可能充滿挑戰(zhàn)。這就需要徹底了解函數(shù)調(diào)用的深度、所有局部變量的細(xì)節(jié),以及執(zhí)行過(guò)程中隨時(shí)發(fā)生的中斷幀的大小,等等。這是一個(gè)漫長(zhǎng)而又容易出錯(cuò)的過(guò)程。使用靜態(tài)代碼分析工具可以快速計(jì)算出上述結(jié)果,而不必手動(dòng)執(zhí)行這個(gè)過(guò)程。

使用靜態(tài)代碼分析器

開(kāi)發(fā)人員可以通過(guò)靜態(tài)代碼分析器預(yù)測(cè)堆棧的使用情況。分析工具有助于分析函數(shù)調(diào)用深度、局部變量和返回參數(shù)的堆棧估計(jì)、嵌套中斷以及執(zhí)行期間發(fā)生的中斷幀的大小。使用靜態(tài)代碼分析器的好處在于,它可以處理編碼規(guī)則違規(guī)、運(yùn)行時(shí)缺陷、編碼復(fù)雜性以及堆棧分析估計(jì)。它在幾分鐘內(nèi)就能完成這些操作,從而幫助開(kāi)發(fā)人員節(jié)省了手動(dòng)計(jì)算堆棧使用量的時(shí)間。

對(duì)目標(biāo)進(jìn)行測(cè)試和測(cè)量

靜態(tài)分析器可以在開(kāi)發(fā)過(guò)程中估計(jì)堆棧的使用量。但是,最好在真實(shí)硬件上獲得實(shí)際的堆棧使用量數(shù)據(jù)。許多開(kāi)發(fā)環(huán)境都具有硬件模擬功能,并提供實(shí)時(shí)堆棧分析功能。在實(shí)際硬件上執(zhí)行堆棧分析,并創(chuàng)建溢出場(chǎng)景來(lái)測(cè)試故障安全例程,這一點(diǎn)非常重要。現(xiàn)在,最大的問(wèn)題是:何時(shí)使用靜態(tài)分析工具執(zhí)行堆棧分析?何時(shí)在實(shí)際目標(biāo)上執(zhí)行?

何時(shí)執(zhí)行堆棧分析?

執(zhí)行堆棧分析是軟件開(kāi)發(fā)生命周期中的一個(gè)連續(xù)過(guò)程。如果僅在軟件開(kāi)發(fā)生命周期結(jié)束時(shí)由單獨(dú)的質(zhì)量評(píng)估團(tuán)隊(duì)估計(jì)堆棧使用量,則可能會(huì)使整個(gè)開(kāi)發(fā)工作面臨風(fēng)險(xiǎn)。此外,在開(kāi)發(fā)周期的后期解決問(wèn)題可能會(huì)出錯(cuò)且耗時(shí);在確定是更改硬件還是軟件設(shè)計(jì)時(shí),這種做法可能還會(huì)造成混亂。執(zhí)行堆棧分析的最佳時(shí)點(diǎn)是:

在添加新功能時(shí)

在軟件中每添加一項(xiàng)新功能,都會(huì)使堆棧使用量增加。開(kāi)發(fā)人員必須密切關(guān)注新功能的堆棧使用情況。

執(zhí)行堆棧分析、進(jìn)行調(diào)試和修復(fù)復(fù)雜代碼:在每個(gè)主要功能實(shí)現(xiàn)后,開(kāi)發(fā)人員可以在本地對(duì)特定軟件組件或軟件模塊應(yīng)用靜態(tài)分析器,以評(píng)估基礎(chǔ)軟件和已實(shí)現(xiàn)軟件之間堆棧使用量的增加情況。

在整個(gè)開(kāi)發(fā)過(guò)程中監(jiān)控堆棧分析:QA 團(tuán)隊(duì)和產(chǎn)品負(fù)責(zé)人可以使用靜態(tài)分析器對(duì)持續(xù)集成 (CI) 管道進(jìn)行堆棧估計(jì),以在控制板上顯示結(jié)果。此過(guò)程有助于在軟件開(kāi)發(fā)生命周期中跟蹤堆棧分析。

執(zhí)行良好實(shí)踐以確保堆棧使用量最低:質(zhì)量門有助于避免違反 MISRA 和 AUTOSAR 編碼規(guī)范。這些規(guī)范要求強(qiáng)制有條件地使用動(dòng)態(tài)內(nèi)存分配。

在軟件發(fā)布前

靜態(tài)分析器執(zhí)行的堆棧估計(jì)提供了有力的證據(jù),表明堆棧使用量處于控制之中。在每次軟件發(fā)布之前,都應(yīng)在標(biāo)準(zhǔn)工作負(fù)載、最小負(fù)載和最大負(fù)載下,對(duì)真實(shí)目標(biāo)運(yùn)行堆棧分析,以全面了解堆棧的使用情況。驗(yàn)證堆棧上溢和下溢事件的故障安全例程也至關(guān)重要。

Polyspace 對(duì)堆棧估計(jì)有何作用?

Polyspace Code Prover 對(duì)每個(gè)函數(shù)中局部變量的大小上限和下限執(zhí)行保守和樂(lè)觀估計(jì),以得出函數(shù)級(jí)和程序級(jí)的最大和最小堆棧使用量。該分析考慮了函數(shù)返回值的大小、函數(shù)參數(shù)的大小、局部變量的大小,以及內(nèi)存對(duì)齊所需的額外填充。

e8c2975a-ec2b-11ee-a297-92fbcf53809c.png

Polyspace 桌面版上的堆棧分析代碼度量。

要了解和調(diào)試堆棧利用過(guò)量的問(wèn)題,開(kāi)發(fā)人員可以在本地運(yùn)行 Polyspace,通過(guò)檢查函數(shù)調(diào)用深度來(lái)確定堆棧利用過(guò)量的確切原因,并通過(guò)優(yōu)化利用可用資源來(lái)降低堆棧使用量。

e8d1c658-ec2b-11ee-a297-92fbcf53809c.png

函數(shù) table_loop() 的調(diào)用樹和更高的堆棧估計(jì)。

在整個(gè)開(kāi)發(fā)過(guò)程中監(jiān)控堆棧分析

Polyspace Access 是結(jié)果數(shù)據(jù)庫(kù)服務(wù)器,可以在 Web 瀏覽器上呈現(xiàn)圖形用戶界面。CI 流程可以觸發(fā) Polyspace Server 上的堆棧分析,以生成堆棧使用量估計(jì)結(jié)果。此結(jié)果可以上傳到結(jié)果數(shù)據(jù)庫(kù)。QA 團(tuán)隊(duì)和產(chǎn)品負(fù)責(zé)人可以在圖形化前端持續(xù)查看堆棧使用量,并在可用堆棧資源過(guò)度使用的情況下采取必要的措施。

e8d8b3fa-ec2b-11ee-a297-92fbcf53809c.png

Polyspace Access 中的項(xiàng)目級(jí)堆棧估計(jì)。

下一步是,檢查堆棧使用量較高的函數(shù),并將特定函數(shù)分配給開(kāi)發(fā)人員,以供進(jìn)一步調(diào)查和調(diào)試。Polyspace 允許您為分析結(jié)果指定狀態(tài)和嚴(yán)重性并添加注釋,然后在 Jira 等 Bug 跟蹤工具中將這些結(jié)果分配給開(kāi)發(fā)人員。

e8e3c876-ec2b-11ee-a297-92fbcf53809c.png

Polyspace Access 中的函數(shù)級(jí)堆棧估計(jì)和結(jié)果審查控制板。

執(zhí)行良好實(shí)踐以確保堆棧使用量最低

對(duì)于產(chǎn)品級(jí)代碼,必須絕對(duì)避免違反編碼標(biāo)準(zhǔn),如 MISRA C、MISRA C++、AUTOSAR C++ 等。這些編碼標(biāo)準(zhǔn)要求強(qiáng)制禁止動(dòng)態(tài)內(nèi)存分配,并推薦特定用例來(lái)優(yōu)化靜態(tài)內(nèi)存分配。

Polyspace Bug Finder 有助于識(shí)別任何違反最佳實(shí)踐的行為,開(kāi)發(fā)人員可以在本地監(jiān)控這些行為,而產(chǎn)品負(fù)責(zé)人可通過(guò) Polyspace Access 監(jiān)控這些行為。以下編碼規(guī)則詳細(xì)說(shuō)明了靜態(tài)內(nèi)存分配的最佳實(shí)踐。靜態(tài)內(nèi)存分配可以使用 Polyspace Bug Finder 進(jìn)行分析。

e8f21138-ec2b-11ee-a297-92fbcf53809c.png

隨著代碼的循環(huán)復(fù)雜度、嵌套函數(shù)調(diào)用的數(shù)量、函數(shù)中變量數(shù)目等的增加,堆棧的使用量也在增加。Polyspace 能夠控制影響堆棧使用量的諸多變量,并支持設(shè)置代碼復(fù)雜度閾值。

e906038c-ec2b-11ee-a297-92fbcf53809c.png

設(shè)置代碼復(fù)雜度閾值。

Polyspace Bug Finder 提供了許多針對(duì)靜態(tài)和動(dòng)態(tài)內(nèi)存分配的運(yùn)行時(shí)檢查。解決所有高、中和低優(yōu)先級(jí)缺陷有助于降低內(nèi)存分配帶來(lái)的風(fēng)險(xiǎn)。

e90c6b6e-ec2b-11ee-a297-92fbcf53809c.png

運(yùn)行時(shí)靜態(tài)和動(dòng)態(tài)內(nèi)存檢查。

無(wú)論使用何種方法來(lái)計(jì)算堆棧使用量,稍微增大堆棧大小都不失為一個(gè)好辦法。這種方法有助于避免測(cè)試期間可能未檢測(cè)到的堆棧溢出導(dǎo)致的系統(tǒng)漏洞。

堆棧溢出漏洞是許多嵌入式應(yīng)用程序在實(shí)際運(yùn)行中表現(xiàn)出不可定義行為的一個(gè)重要原因。在正確的時(shí)間使用正確的工具并遵循最佳實(shí)踐,可以增強(qiáng)對(duì)軟件防止堆棧溢出的信心。



審核編輯:劉清

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(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)投訴
  • 嵌入式系統(tǒng)
    +關(guān)注

    關(guān)注

    41

    文章

    3614

    瀏覽量

    129631
  • RAM
    RAM
    +關(guān)注

    關(guān)注

    8

    文章

    1369

    瀏覽量

    114864
  • AUTOSAR
    +關(guān)注

    關(guān)注

    10

    文章

    363

    瀏覽量

    21704

原文標(biāo)題:嵌入式軟件 | 如何在整個(gè)開(kāi)發(fā)過(guò)程中持續(xù)監(jiān)控堆棧分析?

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

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    uCOS任務(wù)堆棧的深入分析

    在uCOS中,每一個(gè)任務(wù)都有一個(gè)獨(dú)立的任務(wù)堆棧。為了深入理解任務(wù)堆棧的作用,不妨分析任務(wù)從“出生”到“消亡”的整個(gè)過(guò)程,具體就是分析任務(wù)的建立,運(yùn)行,掛起幾種狀態(tài)中任務(wù)
    發(fā)表于 11-01 11:52 ?3258次閱讀

    Embedded Studio堆棧溢出預(yù)防功能

    為了識(shí)別運(yùn)行的嵌入式系統(tǒng)中的堆棧溢出問(wèn)題,SEGGER編譯器通過(guò)為每個(gè)函數(shù)生成檢測(cè)代碼的方式來(lái)檢查堆棧溢出。該功能可以使用命令行開(kāi)關(guān)-mstack-overflow-check來(lái)使能。
    發(fā)表于 07-14 11:08 ?644次閱讀

    如何通過(guò)IAR進(jìn)行堆棧使用分析

    前言在嵌入式應(yīng)用開(kāi)發(fā)過(guò)程中,由于MCU的存儲(chǔ)資源有限,因此堆棧空間大小的設(shè)定極為關(guān)鍵。堆棧空間設(shè)置過(guò)大則會(huì)造成資源的浪費(fèi),堆棧空間設(shè)置過(guò)小則可能導(dǎo)致
    發(fā)表于 01-03 16:45

    嵌入式處理器環(huán)境中為什么匯編語(yǔ)言不需要堆棧

    嵌入式處理器環(huán)境中,為何C語(yǔ)言(函數(shù)調(diào)用)需要堆棧,而匯編語(yǔ)言卻不需要堆棧?據(jù)我所知,c語(yǔ)言最終也是被編譯成了匯編,都是匯編,為何c語(yǔ)言生
    發(fā)表于 03-20 04:35

    嵌入式學(xué)習(xí)手冊(cè)——堆棧結(jié)構(gòu)與編程

    棧這種結(jié)構(gòu)在嵌入式里其實(shí)是非常常用的,比如函數(shù)調(diào)用與返回就是典型的棧應(yīng)用,雖然很多時(shí)候棧都是 CPU 系統(tǒng)在自動(dòng)管理,我們只需要在鏈接文件里分配棧大小以及棧存放位置,但稍微了解一下棧的原理會(huì)更加利于
    發(fā)表于 04-20 07:00

    嵌入式堆棧原理及其純C的實(shí)現(xiàn)方法

    嵌入式堆棧原理及其純C實(shí)現(xiàn)  
    發(fā)表于 12-28 06:30

    嵌入式C語(yǔ)言應(yīng)用工程中堆棧的相關(guān)資料分享

    堆棧的定義和作用2. 嵌入式 C 語(yǔ)言應(yīng)用工程的棧大小確定3. 嵌入式 C 語(yǔ)言應(yīng)用工程的堆棧溢出定義、危害以及應(yīng)對(duì)措施 概述與案例分析過(guò)去
    發(fā)表于 11-04 06:10

    介紹嵌入式軟件堆棧使用情況的估算方法

    介紹了嵌入式軟件堆棧使用情況的估算方法。為了方便理解這種估算方法,還對(duì)相應(yīng)的堆棧操作匯編代碼(ARM Cortex-M處理器)進(jìn)行分析和說(shuō)明
    發(fā)表于 12-14 07:25

    KAN316如何確定應(yīng)用程序的堆棧使用情況

    使用,并通過(guò)進(jìn)程堆棧指針(PSP)進(jìn)行尋址。 由于堆棧的內(nèi)存區(qū)域在大小上受到限制,因此在堆棧上分配比可用內(nèi)存更多的內(nèi)存可能會(huì)導(dǎo)致程序崩潰或堆棧
    發(fā)表于 08-28 07:27

    深入分析uCOS的任務(wù)堆棧

    就是分析任務(wù)的建立,運(yùn)行,掛起幾種狀態(tài)中任務(wù)堆棧的變化情況。 現(xiàn)在假設(shè)系統(tǒng)運(yùn)行著一個(gè)由用戶創(chuàng)建的用以完成打印工作的任務(wù)TPrint。TPrint最初通過(guò)OSTaskCreate()函數(shù)創(chuàng)建,在該函數(shù)中與任務(wù)
    發(fā)表于 12-01 01:25 ?689次閱讀

    深入分析MCU堆棧的作用 以及該如何設(shè)置堆棧大小

    深入分析MCU堆棧的作用,以及該如何設(shè)置堆棧大小
    的頭像 發(fā)表于 03-01 14:13 ?5167次閱讀
    深入<b class='flag-5'>分析</b>MCU<b class='flag-5'>堆棧</b>的作用 以及該如何設(shè)置<b class='flag-5'>堆棧</b>大小

    高性能嵌入式堆棧Azure PTOS USBX概述

    Azure RTOS USBX 是一種高性能的 USB 主機(jī)、設(shè)備和移動(dòng) (OTG) 嵌入式堆棧。 Azure RTOS USBX 與 Azure RTOS ThreadX 完全集成,適用于所有支持
    發(fā)表于 05-24 10:55 ?10次下載

    TCP/IP 堆棧漏洞是嵌入式軟件的警鐘

    URGENT/11和其他最近的漏洞(例如與嵌入式 TCP/IP 堆棧相關(guān)的AMNESIA:33)表明在審查和審計(jì)軟件供應(yīng)鏈方面存在缺陷。責(zé)任不僅僅在于軟件供應(yīng)商,還指出嵌入式設(shè)備制造商需要
    的頭像 發(fā)表于 07-15 15:43 ?1306次閱讀
    TCP/IP <b class='flag-5'>堆棧</b>漏洞是<b class='flag-5'>嵌入式</b>軟件的警鐘

    Embedded Studio堆棧溢出預(yù)防簡(jiǎn)析

    為了識(shí)別運(yùn)行的嵌入式系統(tǒng)中的堆棧溢出問(wèn)題,SEGGER編譯器通過(guò)為每個(gè)函數(shù)生成檢測(cè)代碼的方式來(lái)檢查堆棧溢出。
    的頭像 發(fā)表于 07-14 11:07 ?970次閱讀

    嵌入式系統(tǒng)堆棧監(jiān)控的作用

    在微控制器或微處理器中,堆棧是內(nèi)存的一個(gè)保留區(qū)域,用于存儲(chǔ)臨時(shí)數(shù)據(jù)和函數(shù)調(diào)用信息,管理函數(shù)的執(zhí)行,跟蹤返回地址、局部變量和函數(shù)參數(shù)。堆棧監(jiān)控嵌入式
    的頭像 發(fā)表于 01-05 11:13 ?535次閱讀
    主站蜘蛛池模板: jizz非洲| xxnx日本| 色偷偷777| 老司机亚洲精品影院在线观看| 嗯啊快停下我是你老师啊H| 我要色色网| 亚州三级视频| 亚洲AV 日韩 国产 有码| 最近最新的日本字幕MV| 把腿张开JI巴CAO死你H教室| 久久999视频| 色偷偷888欧美精品久久久| 嘴巴舔着她的私处插| 国产午夜精品久久久久九九| 国产麻豆精品人妻无码A片| 免费在线观看a视频| 欧美内射AAAAAAXXXXX| 色青青草原桃花久久综合| 自慰弄湿白丝袜| 国产真实夫妇交换视频| 花蝴蝶免费版高清版| 久久视频精品38在线播放| 污漫日本E同人| 久久精品国产亚洲AV麻豆欧美玲| 日韩人妻无码精品久久中文字幕| 2022国产精品不卡a| 黄色小说男男| 男同志china免费视频| 亚洲aaaa级特黄毛片| 阿离被扒开双腿疯狂输出| 九九在线免费视频| 双性大乳浪受噗呲噗呲h总| 亚洲国产系列一区二区三区| 亚洲精品婷婷无码成人A片在线| 亚洲欧洲免费三级网站| 边摸边吃奶边做下面视频| 国产精品久久久久久搜索| 国产永久免费观看视频软件 | 花蝴蝶高清影视视频在线播放| 摸老师丝袜小内内摸出水| 91精品一区二区综合在线|