首頁 常見問題 幾個實用的嵌入式開發套路和技巧

幾個實用的嵌入式開發套路和技巧

Jul 31, 2023 pm 03:04 PM
嵌入式 嵌入式開發

開發高可靠性嵌入式系統的技術有許多種,從規範完善的開發週期到嚴格執行和系統檢查。

給大家介紹7個比較好操作且可以長久使用的技巧,它們對於確保系統更加可靠地運行並捕獲異常行為大有幫助
#技巧1-用已知值填入ROM
軟體開發人員往往都是非常樂觀的一群人,只要讓他們的程式碼忠實地長時間地運行就可以了,僅此而已。微控制器跳出應用程式空間並在非預想的程式碼空間中執行這種情況似乎是相當少有的。然而,這種情況發生的機會並不比緩存溢出或錯誤指標失去引用少。它確實會發生!發生這種情況後的系統行為將是不確定的,因為預設記憶體空間都是0xFF,或者由於記憶體區通常沒有寫過,其中的值可能只有上帝才知道。
不過有相當完整的linker或IDE技巧可以用來幫助辨識這樣的事件並從中復原系統。技巧就是使用FILL指令對未用ROM填滿已知的位元模式。要填充未使用的內存,有很多不同的可能組合可以使用,但如果是想建立更加可靠的系統,最明顯的選擇是在這些位置放置ISR fault handler。如果系統出了某些差錯,處理器開始執行程式空間以外的程式碼,就會觸發ISR,並在決定校正行動之前提供儲存處理器、暫存器和系統狀態的機會。
技巧2-檢查應用程式的CRC
#對嵌入式工程師來說一個很大的好處是,我們的IDE和工具鏈可以自動產生應用程式或記憶體空間校驗和(Checksum),從而根據這個校驗和驗證應用程式是否完好。有趣的是,在許多這些案例中,只有在將程式碼載入到裝置時,才會用到校驗和。
然而,如果CRC或校验和保持在内存中,那么验证应用程序在启动时(或甚至对长时间运行的系统定期验证)是否仍然完好是确保意外之事不会发生的极好途径。
现在一个编程过的应用程序发生改变的概率是很小的,但考虑每年交付的数十亿个微控制器以及可能恶劣的工作环境,应用程序崩溃的机会并不是零。更有可能的是,系统中的一个缺陷可能导致某一扇区发生闪存写入或闪存擦除,从而破坏应用程序的完整性。
技巧3——在启动时执行RAM检查
为了建立一个更加可靠和扎实的系统,确保系统硬件正常工作非常重要。毕竟硬件会发生故障。(幸运的是软件永远不会发生故障,软件只会做代码要它做的事,不管是正确的还是错误的)。在启动时验证RAM的内部或外部没有问题,是确保硬件可以如预期般运作的一个好方法。
有许多不同的方法可用于执行RAM检查,但常用的方法是写入一个已知的模式,然后等上一小段时间再回读。结果应该是所读就是所写。真相是,在大多数情况下 RAM检查是通过的,这也是我们想要的结果。但也有极小的可能性检查不通过,这时就为系统标示出硬件问题提供了极好的机会。
技巧4-使用堆疊監視器
#對許多的嵌入式開發者而言,堆疊似乎是一股相當神秘的力量。當奇怪的事情開始發生,工程師終於被難倒了,他們開始思考,也許堆疊中發生了什麼事。結果是盲目地調整堆疊的大小和位置等等。但該錯誤往往是與堆疊無關的,但怎能如此確定?畢竟,有多少工程師真的實際執行過最壞情況下的堆疊大小分析?
堆疊大小是在編譯時就靜態分配好的,但堆疊是以動態的方式使用的。隨著程式碼的執行,應用程式需要的變數、傳回的位址和其它資訊被不斷儲存在堆疊中。這種機制導致堆疊在其分配的記憶體中不斷增長。然而,這種增長有時會超出編譯時確定的容量極限,導致堆疊破壞相鄰記憶體區域的資料。
絕對確保堆疊正常工作的一種方法是實作堆疊監視器,將它作為系統「保健」程式碼的一部分(有多少工程師會這樣做?)。堆疊監視器會在堆疊和「其它」記憶體區域之間建立一個緩衝區域,並填入已知的位元模式。然後監視器會不斷的監視圖案是否有任何變化。如果該位元模式發生了改變,那就代表堆疊成長得太大了,即將要把系統推向黑暗地獄!此時監視器可以記錄事件的發生、系統狀態以及任何其它有用的數據,以供日後用於問題的診斷。
大多數即時作業系統(RTOS)或實作了記憶體保護單元(MPU)的微控制器系統中都提供有堆疊監視器。可怕的是,這些功能預設都是關閉狀態,或經常被開發人員有意關閉。在網路上快速搜尋可以發現,很多人建議關閉即時作業系統中的堆疊監視器以節省56位元組的快閃記憶體空間。等等,這可是得不償失的做法!
技巧5-使用MPU
##在過去,是很難在一個小而便宜的微控制器中找到記憶體保護單元(MPU)的,但這種情況已經開始改變。現在從高階到低階的微控制器都已經有MPU,而這些 MPU為嵌入式軟體開發人員提供了一個可以大幅提高其韌體(firmware)穩健性(robustness)的機會。
MPU 已逐漸與作業系統耦合,以便建立記憶體空間,其中的處理都分開,或任務可執行其程式碼,而不用擔心被stomped on。倘若真有事情發生,不受控制的處理會被取消,也會執行其他的保護措施。請留意帶有這種組件的微控制器,如果有,請多加利用它的這種特性。
技巧6-建立一個強大的看門狗系統
你經常會發現的一種總是最受喜愛的看門狗(watchdog)實作是,在看門狗被啟用之處(這是一個很好的開始),但也是可以用週期性定時器將該看門狗清零之處;定時器的啟用是完全與程式中出現的任何情況隔離的。
######使用看門狗的目的是協助確保如果出現錯誤,看門狗不會被清除,即當工作暫停,系統會被迫去執行硬體重設定( hardware reset),以便恢復。使用與系統活動獨立的定時器可以讓看門狗保持清零,即使系統已失效。
對應用程式任務如何整合到看門狗系統中,嵌入式開發人員需要仔細考慮和設計。例如,有種技術可能可以讓每個在一定時期內運行的任務標示它們可以成功地完成其任 務。在此事件中,看門狗不被清除,強制被重設。還有一些比較先進的技術,像是使用外部看門狗處理器,它可用於監控主處理器如何表現,反之亦然。
對一個可靠的系統而言,建立一個強大的看門狗系統是很重要的。由於有太多的技術,難以在這幾個段落中完全涵蓋,但針對此一議題,筆者未來還會發表相關的文章。
技巧7-避免易失記憶體分配
#不習慣在資源有限環境下工作的工程師,可能會試圖使用其程式語言言的特性,這種語言讓他們可以使用易失記憶體分配。畢竟,這是一種常在計算器系統中使用的技術,在計算器系統中,只有在有必要時,記憶體才會被分配。例如,以C開發時,工程師可能傾向於使用malloc來分配在堆(heap)上的空間。有一個操 作會執行,一旦完成,可以使用free將被分配的內存返回,以便堆的使用。
在資源受限的系統,這可 能是一場災難!使用易失記憶體分配的其中一個問題是,錯誤或不當的技術可能會導致記憶體洩漏或記憶體碎片。如果出現這些問題時,大多數的嵌入式系統並沒有資源或知識來監視堆或妥善地處理它。而當它們發生時,如果應用程式提出對空間的要求,但卻沒有所要求的空間可以使用,會發生什麼事呢?
使用揮發性記憶體分配所產生的問題是很複雜的,要妥善處理這些問題,可以說是個惡夢!一種替代的方法是,直接以靜態的方式,簡化記憶體的分配。例如,只要在 程式中簡單地建立一個大小為256位元組長的緩衝區,而不​​是經由malloc請求這樣大小的記憶體緩衝區。此一分配的記憶體可在整個應用程式的生命週期期 間保持,且不會有堆或記憶體碎片問題方面的顧慮。
結論

####這些都只是一些可以讓開發人員開始建立更可靠嵌入式系統的方法。另外還有很多其他技術,例如利用良好的編碼標準、位元翻轉的監測、執行陣列和指針邊界檢查,及使用斷言等。所有這些技術都是讓設計者可以開發出可靠性更高嵌入式系統的秘訣##############################################################

以上是幾個實用的嵌入式開發套路和技巧的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

java和嵌入式哪個前景好 java和嵌入式哪個前景好 Oct 24, 2023 am 09:32 AM

Java和嵌入式系統都是電腦領域中非常重要的技術方向,它們各自具有不同的應用場景和發展前景。以下我將從就業市場、技術發展、產業需求和發展趨勢等方面來分析Java和嵌入式系統的前景。

利用C++實現嵌入式系統的遠端控制功能 利用C++實現嵌入式系統的遠端控制功能 Aug 25, 2023 pm 05:24 PM

利用C++實現嵌入式系統的遠端控制功能隨著物聯網的快速發展,嵌入式系統正成為我們日常生活中不可或缺的一部分。而對於嵌入式系統的開發者來說,如何實現遠端控制功能是一個重要的課題。利用C++程式語言,我們可以輕鬆實現嵌入式系統的遠端控制功能。本文將介紹如何使用C++編寫程式碼來實現此功能,以及給出一些範例程式碼。首先,我們需要準備一些硬體設備。作為一個嵌入式系統,

SPARKLE 撼與推出英特爾銳炫 Arc 嵌入式顯示卡,提供最長 5 年支援服務 SPARKLE 撼與推出英特爾銳炫 Arc 嵌入式顯示卡,提供最長 5 年支援服務 Apr 22, 2024 am 11:52 AM

本站4月22日消息,SPARKLE撼與科技宣布推出英特爾銳炫Arc嵌入式顯示卡,包含PCIe版的A310E、A380E及MXM版的A350E、A370E顯示卡,承諾最長5年支援服務。 SPARKLE英特爾銳炫ArcA380E顯示卡IA30GC-TN4E此顯示卡TBP(本站注:TotalBoardPower)為75W,採用雙槽單風扇設計、6GBGDDR6顯存,提供1個HDMI與3個DisplayPort接口,5年支援服務。 SPARKLE英特爾銳炫ArcA380E半高顯示卡IA30GBL-TN4E這款半高顯示卡T

追尋首創28cm超薄設計!嵌入式掃拖機器人空間大師Master系列發布 追尋首創28cm超薄設計!嵌入式掃拖機器人空間大師Master系列發布 Oct 21, 2023 pm 05:17 PM

由於掃地機智能性和清潔性能的技術革新,掃拖一體機器人近幾年越發成為全球家裝標配的重點新電器,其在家居裝飾中的前置化、嵌入式趨勢也更加明顯。為促進產業進步及幫助廣大消費者解決對於嵌入及水電改造等核心痛點,作為全球智能清潔家電領導品牌的追尋科技於近日帶來全新解題思路,革新性地重磅推出高度僅為28cm的超薄基地台嵌入式掃拖一體機器人-太空大師Master系列(下文簡稱「追尋太空大師Master系列」),此款產品結合五大追覓首創技術優勢及前沿的嵌入式設計理念,實現領先於全業界的升級躍遷,進而幫助更多家庭真

Go 語言的限制:不適用於嵌入式開發 Go 語言的限制:不適用於嵌入式開發 Apr 08, 2024 pm 01:24 PM

Go語言不適用於嵌入式開發,原因如下:內存消耗高:Go的垃圾收集器需要額外內存,不適合內存有限的嵌入式設備。即時性差:垃圾收集器和並發模型可能引入不可接受的延遲,不適合時間敏感的嵌入式系統。程式碼大小大:Go產生的二進位檔案比其他語言(如C或C++)大,對於受限裝置來說不可行。

安地國際 Aetina 推出銳炫 Arc A380E 嵌入式顯示卡:單槽半高設計、50W 功耗 安地國際 Aetina 推出銳炫 Arc A380E 嵌入式顯示卡:單槽半高設計、50W 功耗 Apr 26, 2024 am 08:04 AM

本站4月25日消息,AIoT設備廠商安提國際Aetina今日推出單槽半高設計的英特爾銳炫ArcA380E嵌入式顯示卡,型號為IA380E-QUFL,提供五年產品長期供貨承諾。這款顯示卡採用英特爾ArcA380E核心,具有8個Xe核心與128個英特爾XMX核心,基礎頻率2000MHz、加速頻率2250MHz,擁有4.096TFLOPS算力,支援硬體光線追蹤;視覺計算及人工智慧推理。此顯示卡採用半高單槽設計,耗電量僅50W,可直接從PCIe插槽取電,無需外

Arduino 回應嵌入式系統 Mbed 終止支援影響:已找到替代方案,年底前發布首個測試版 Arduino 回應嵌入式系統 Mbed 終止支援影響:已找到替代方案,年底前發布首個測試版 Jul 26, 2024 am 11:32 AM

本站7月26日消息,Arm公司於7月9日發佈公告,宣布將於2026年7月終止支援開源嵌入式作業系統MbedOS,後續不再繼續維護,屆時Mbed網站將被存檔,並且將無法透過線上工具建立專案。這則消息在嵌入式開發社群引起廣泛討論,影響Arm支援的專案(如micro:bit、Arduino和RaspberryPi)。 Arduino公司於7月24日發布博文,表示幾年前就開始尋找替代解決方案,因此於2023年加入Zephyr項目,並成為該項目銀牌成員,並在ZephyrOS中找到了一個很好的替代品。 Ardu

華碩研揚推出 PICO-RAP4 Pico-ITX 嵌入式單板計算機:雙網口,最高酷睿 i7-1370PE 處理器 華碩研揚推出 PICO-RAP4 Pico-ITX 嵌入式單板計算機:雙網口,最高酷睿 i7-1370PE 處理器 Jun 25, 2024 am 11:05 AM

本站6 月25 日消息,華碩旗下子公司研揚科技(AAEON)最新推出了PICO-RAP4 ,是其Pico-ITX 嵌入式單板計算機系列的最新成員,可以滿足機器人、醫療成像設備等高級計算應用需求。 Pico-RAP4 採用了英特爾 U300E 系列處理器,最高支援英特爾酷睿 i7-1370PE 處理器。這款處理器採用混合 CPU 架構,擁有 6 個 P 核心和 8 個 E 核心,共有 20 個執行緒。這樣的架構可以有效率地處理與目標用途相關的嚴苛任務,為您提供高速順暢的體驗。 以下是 Pico-