不知火舞的被虐|伊人天伊人天天综合网|博洛尼亚天气|任你懆这里只有精品4|久久美日韩精品久久|掌中之物漫画免费阅读观看|0丨d老妇

堆棧溢出的案例

嵌入式編程中五個必探的“潛在錯誤”
錯誤4:堆棧溢出 每個程序員都知道堆棧溢出是很不好的事情。但是,每次堆棧溢出的影響都各不相同。損壞的性質和不當行為的時機完全取決于破壞哪些數據或指令以及如何使用它們。重要的是,從堆棧溢出到它對系統的負面影響之間的時間長短取決于使用阻塞位之前的時間。 不幸的是,堆棧溢出比臺式計算機更容易遭受嵌入式系統的困擾。這有幾個原因,其中包括: (1)嵌入式系統通常只能占用較少的RAM; (2)通常沒有虛擬內存可回退(因為沒有磁盤); (3)基于RTOS任務的固件設計利用了多個堆棧(每個任務一個),每個堆棧的大小都必須足夠大,以確保不會出現唯一的最壞情況的堆棧深度; (4)中斷處理程序可能會嘗試使用這些相同的堆棧。 使該問題進一步復雜化的是,沒有大量的測試可以確保特定的堆棧足夠大。您可以在各種加載條件下測試系統,但是只能測試很長時間。僅在“半個藍月亮”中運行的測試可能不會見證僅在“一次藍月亮”中發生的堆棧溢出。在算法限制(例如無遞歸)下,可以通過對代碼的控制流進行自上而下的分析來證明不會發生堆棧溢出。但是,每次更改代碼時,都需要重做自上而下的分析。 最佳實踐:啟動時,在整個堆棧上繪制不太可能的內存模式。(我喜歡使用十六進制23 3D 3D 23,它看起來像ASCII內存轉儲中的籬笆' #==# '。)在運行時,讓管理員任務定期檢查是否沒有任何涂料在預先設定的高水位上方標記已更改。 如果發現某個堆棧有問題,請在非易失性內存中記錄特定的錯誤(例如哪個堆棧以及洪水的高度),并為產品的用戶做一些安全的事情(例如,受控關閉或重置)可能會發生真正的溢出。這是添加到看門狗任務中的一項不錯的附加安全功能。 錯誤5:堆碎片化 嵌入式開發工程師并沒有很好地利用動態內存分配。其中之一是堆碎片的問題。
展開
AbsInt — 確保代碼安全的性能/資源分析工具套件
Daimler在動力總成控制系統等多個軟件研發項目中,成功運用StackAnalyzer 工具進行相關分析,在研發前期即對軟件的堆棧使用量情況進行有效分析和預估,避免了堆棧溢出等問題造成的項目延期和成本損失。 經緯恒潤 北京市海淀區知春路7號致真大廈D座6層 電話:010-64840808 郵箱:market_dept@hirain.com 網址:www.hirain.com
AbsInt — 確保代碼安全的靜態性能分析工具
,避免了堆棧溢出等問題造成的項目延期和成本損失
AbsInt—確保代碼安全的靜態性能分析工具
dSPACE TargetLink實現無縫集成 ? Astrée有認證支持包,能夠提供認證支持服務(ISO-26262、IEC-61508、EN-50128等) RuleChecker:RuleChecker是C代碼規則檢查工具,支持以下代碼規則標準 ? MISRA 2004、2012、2012Amendment 1 ? ISO/IEC TS17961:2013 ? SEI CERT Secure C ? MITRE CWE ? 客戶訂制標準 應用案例 豐田汽車非預期加速事件調查,2010年aiT被NASA作為工業標準靜態分析工具用于豐田汽車公司非預期加速事件調查,以排除與時間相關的軟件缺陷 Daimler在動力總成控制系統等多個軟件研發項目中,成功運用StackAnalyzer工具進行相關分析,在研發前期即對軟件的堆棧使用量情況進行有效分析和預估,避免了堆棧溢出等問題造成的項目延期和成本損失
展開
堆棧溢出圖1
Symtavision — 分布式控制系統時間建模分析和驗證工具
ECU 的時間特性分析—SymTA/S ECU+TraceAnalyzer ? 捕獲ECU時間特性需求并建立參考模型 ? 將實際運行時間與需求進行對比,從而對時間特性進行驗證, 并自動生成報告 ? 對代碼及執行時間進行優化,從而降低CPU負載率 ? 對軟件架構、函數映射及任務調度進行優化,提供軟件可靠性 ? 通過最差情況調度分析確保軟件分區和定時保護 ? 確保單核ECU到多核ECU過渡的時間特性需求的滿足 ? 保證代碼性能的聯合方案,其中AbsInt aiT可以為SymTA/S ECU提供任務的最差執行時間(WCET),以便得出更加準確的最差響應時間(WCRT);同時,StackAnalyzer工具可以提供任務的最大堆棧量預計值,避免堆棧溢出錯誤 3. 系統級的時間特性分析—SymTA/S System +TraceAnalyzer ? SymTA/S System 包括 SymTA/S Network 和 SymTA/S ECU模塊,可以把控制器和網絡結合起來,在系統級對信號延時進行建模、分析和驗證? 進行“傳感器 -> 信號采集任務 -> 總線通信 -> 網關 -> 總線通信 -> 控制器任務 -> 執行器”整條鏈路的信號延時分析應用&案例1. FIAT通過時間分析將CAN總線負載率提高到70% 菲亞特研發部門一直采用SymTA/S來開發和驗證CAN總線系統。工程師在開發下一代車型的時候,在系統ECU數量增多但不計劃采用FlexRay總線的前提下,將更大的發揮CAN總線的通信能力(負載率提高到70%以上),但同時通過工具能夠確保設計的CAN總線滿足響應時間(Deadline)的要求。 2.
展開
新能源汽車動力系統部件測試大揭秘
PIL看似無關緊要,但不做重視也會引起一些不良后果(如調度問題、CPU Load,堆棧溢出等)。 4) HIL(Hardware-In-Loops)硬件在環測試,測試控制器完整系統功能,一般會搭建控制器所在系統的測試臺架,使用電氣元件模擬傳感器(如溫度)和執行器(如風扇負載)的電氣特性,驗證完整的系統功能。 這些測試環節的用例來源于系統需求。在汽車軟件開發流程中,開發和測試成V字型進行,俗稱軟件開發V模型,感興趣的同學可以查看汽車軟件開發流程ASPICE。 統開發流程中非常強調測試軟件環節的。要知道手機軟件出問題最多也就是秒退而已,車輛軟件出問題影響的是人命。 當年豐田剎車門事件,美國政府就派了嵌入式軟件專家和卡耐基梅隆的計算機教授詳細審查了發動機控制系統的軟件代碼,豐田對全局變量的濫用(上萬個)以及軟件安全機制的混亂就遭到了巨額處罰。如果豐田重視軟件測試工作的話,這件事也許不會發生。 最后再聊下零部件在整車極限環境下的測試情況:整車耐久測試這部分工作一般是整車廠的測試&標定工程師負責。整車耐久試驗的花銷很大,造工程樣車(每輛100萬左右)、租用測試場地、工程師團隊花銷,很考驗廠家的資金實力,沒有強大的資金池根本無法運行起來。但在極寒、高溫、高濕度等各種極限環境下的測試進行的越多,越能充分的驗證零部件的功能、性能以及耐久表現,越早發現問題,解決修復所耗費的成本越低。 1. 低溫耐久測試,主要測試冷起動性能,一般在黑河/牙克石進行。電池包的低溫充放電能力、低溫保護策略、電池包加熱功能在該項測試中都會進行考核。 2. 高溫耐久測試,一般在格爾木進行。主要測試電池包在高溫下充放電能力、電池包冷卻功能和過熱保護策略。下圖是蔚來在澳大利亞墨爾本進行高溫測試,為了整車開發整車廠都是不惜成本。 3.
展開
Abaqus子程序:基礎知識概述1
當需要使用大型數組或其他大型數據結構時,應該動態分配它們的內存,以便從堆而不是堆棧中分配內存。未能動態分配大型數組可能會導致堆棧溢出錯誤并退出 Abaqus 分析。有關使用本機 Fortran 可分配數組進行動態分配的示例,未來我研究明白了再講,實際上大多數情況是不用考慮的。 (6)測試與調試 開發用戶子程序時,在嘗試將它們用于生產分析工作之前,最好在較小的示例中測試它們,其中用戶子程序是模型中唯一復雜的方面。如果需要,可以使用 Fortran 單元 7(這里單元是文件的unit,fortran中每個文件對應一個唯一的unit號)將調試輸出寫入Abaqus/Standard 信息 (.msg) 文件,或者使用 Fortran 單元 6 將調試輸出寫入 Abaqus/Standard 數據 (.dat) 文件或 Abaqus/Explicit 日志 (.log) 文件;這些單元不應由你的子程序打開,因為它們已由 Abaqus 打開。Fortran 單元 15 到 18 或大于 100 的單元可用于讀取或寫入其他用戶指定的信息。使用其他 Fortran 單元可能會干擾 Abaqus 文件操作;你必須打開這些 Fortran 單元;由于使用了臨時目錄,因此 OPEN 語句中必須使用文件的完整路徑名。 (7)終止分析 當從用戶子程序中終止分析時,應使用實用例程 XIT (Abaqus/Standard) 或 XPLB_EXIT (Abaqus/Explicit) 而不是 stop 。這將確保與分析相關的所有文件都正確關閉(終止分析)。 文章來源: 力學混子愛AI
展開
150+!單片機編譯器KEIL的常見錯誤匯總(中英對照)
error 52:Invalid EXTRN definition 無效的EXTRN定義 error 53:Too many EXTRN definitions 太多的EXTRN定義 error 54:OF expected 缺OF error 55:INTERFACE expected 缺INTERFACE error 56:Invalid relocatable reference 無效的可重定位引用 error 57:THEN expected 缺THEN error 58:TO or DOWNTO expected 缺TO或DOWNTO error 59:Undefined forward 提前引用未經定義的說明 error 61:Invalid typecast 無效的類型轉換 error 62:Division by zero 被零除 error 63:Invalid file type 無效的文件類型 error 64:Cannot read or write variables of this type 不能讀寫此類型變量 error 65:Pointer variable expected 缺指針類型變量 error 66:String variable expected 缺字符串變量 error 67:String expression expected 缺字符串表達式 error 68:Circular unit reference 單元UNIT部件循環引用 error 69:Unit name mismatch 單元名不匹配 error 70:Unit version mismatch 單元版本不匹配 error 71:Internal stack overflow 內部堆棧溢出
展開
嵌入式系統 | Ansys SCADE在空客電傳飛控系統中的應用
以二進制形式分析程序堆棧的使用,計算實際內存使用量的上限。該靜態分析有助于證明沒有程序執行引起的堆棧溢出。當前Ansys公司SCADE Suite產品中含有該模塊。 Lesar Lesar是使用二元決策圖(BDD: Binary Decision Diagram)對基于Lustre語言模型進行模型檢查的工具,其算法用于枚舉可達狀態。 L4/-Tool/Lucifer/SCADE Designer Verifier L4是Prover Technology公司開發的可對SCADE模型進行形式化驗證的插件,可提供類似Lucifer的功能,但界面更加友好,可以與SCADE集成開發環境無縫連接。 -Tools是Prover Technology公司基于St?lmarck證據流程的的通用驗證工具。 L4、-Tools和Lucifer都是Prover Technology公司提供的針對SCADE模型進行形式化驗證的早期版本。只能處理整型數據類型。 SCADE Designer Verifier是當前Ansys公司SCADE Suite產品的標準形式化驗證模塊。 Caveat 由CEA開發的C代碼靜態分析工具,可用于驗證安全關鍵軟件。
展開
MCU最強科普(萬字總結,值得收藏)
關鍵之處在于我所做的程序,如何保證其沒有內存溢出錯誤?如果我進行的是遞歸運算,這樣的話,內存需求是很難自己計算的。 ②、單片機C語言在變量定義上是否會受到約束?比如浮點型數據的乘除運算,通過匯編還寫,代碼相當復雜,如果直接C語言來寫,豈不過份簡單? ③、單片機C語言生成的hex文件中,指令及數據的ROM的地址分布是否編譯器自動分配?可否用戶進行分配? 回答1:c語言寫的單片機程序,先由1個程序(好像是c51.exe)編譯,編譯完成后,變量的存儲空間大小已經安排好,只是還沒分配具體地址(地址浮動),接下來有另一個程序(好像是a51.exe)進行連接,連接以后,具體地址確定。 如果變量過多,編譯會提示數據段too large,要保證其沒有內存溢出錯誤,主要考慮堆棧是否溢出,要靠經驗 單片機c語言一般禁止遞歸,一般都避免用遞歸運算,單片機畢竟不是PC,會影響速度的,要遞歸的話,用DSP芯片更合適,總之,要會挑合適的芯片 回答2:變量的大小(位數)一般和芯片累加器的位數一樣,比如51常用8位的,因為它是8位單片機 單片機可以定義位變量,但是不可以定義位數組。用c語言寫只是看著簡單,實際生成的代碼量是最多的,用于控制的單片機幾乎不用浮點數運算,不僅慢還麻煩還占地方,如果是DSP芯片,本身有適合的硬件結構,會好很多。 回答3:一般是自動分配的,可以c語言和匯編語言混合編程,也可以用Keil C在線匯編,芯片與外部的數據交換都是通過端口進行的。
展開
MCU最強科普(萬字總結,值得收藏)
關鍵之處在于我所做的程序,如何保證其沒有內存溢出錯誤?如果我進行的是遞歸運算,這樣的話,內存需求是很難自己計算的。 ②、單片機C語言在變量定義上是否會受到約束?比如浮點型數據的乘除運算,通過匯編還寫,代碼相當復雜,如果直接C語言來寫,豈不過份簡單? ③、單片機C語言生成的hex文件中,指令及數據的ROM的地址分布是否編譯器自動分配?可否用戶進行分配? 回答1:c語言寫的單片機程序,先由1個程序(好像是c51.exe)編譯,編譯完成后,變量的存儲空間大小已經安排好,只是還沒分配具體地址(地址浮動),接下來有另一個程序(好像是a51.exe)進行連接,連接以后,具體地址確定。 如果變量過多,編譯會提示數據段too large,要保證其沒有內存溢出錯誤,主要考慮堆棧是否溢出,要靠經驗 單片機c語言一般禁止遞歸,一般都避免用遞歸運算,單片機畢竟不是PC,會影響速度的,要遞歸的話,用DSP芯片更合適,總之,要會挑合適的芯片 回答2:變量的大小(位數)一般和芯片累加器的位數一樣,比如51常用8位的,因為它是8位單片機 單片機可以定義位變量,但是不可以定義位數組。用c語言寫只是看著簡單,實際生成的代碼量是最多的,用于控制的單片機幾乎不用浮點數運算,不僅慢還麻煩還占地方,如果是DSP芯片,本身有適合的硬件結構,會好很多。 回答3:一般是自動分配的,可以c語言和匯編語言混合編程,也可以用Keil C在線匯編,芯片與外部的數據交換都是通過端口進行的。
展開
堆棧溢出圖2