西門子plc嵌入式系統(tǒng)常用的技巧
雖然許多充滿希望和夢(mèng)想,但代碼的高可靠性的嵌入式系統(tǒng)工程師是不是一次性的過(guò)程。當(dāng)一個(gè)應(yīng)用程序被認(rèn)定為“成功”,他們往往感到放松,但僅僅是因?yàn)樵谑芸貤l件下運(yùn)行的軟件,并不意味著它將運(yùn)行明天或一年后。正常。從開(kāi)發(fā)到實(shí)施和嚴(yán)格的檢測(cè)系統(tǒng)良好的發(fā)展周期,有可用于開(kāi)發(fā)高可靠嵌入式系統(tǒng)的許多技術(shù)。
以下就是小編為大家介紹的7個(gè)技巧方法
技巧1——用已知值填充ROM 軟件進(jìn)行開(kāi)發(fā)工作人員管理往往是一個(gè)非常積極樂(lè)觀主義的人,只要讓學(xué)生他們的代碼忠實(shí)地運(yùn)行需要很長(zhǎng)一段時(shí)間,就是通過(guò)這樣。西門子plc控制器似乎已經(jīng)很少跳出應(yīng)用研究程序設(shè)計(jì)空間并在非預(yù)期的代碼空間中執(zhí)行它。但是,發(fā)生改變這種學(xué)習(xí)情況的可能性不小于緩沖區(qū)溢出或錯(cuò)誤指針丟失引用。確實(shí)發(fā)生了!發(fā)生對(duì)于這種教學(xué)情況后系統(tǒng)的行為影響將是未定義的,因?yàn)槲覀兡J(rèn)情況下內(nèi)存空間為0xFF,或者不能因?yàn)槿藗兺ǔ2粚懭雰?nèi)存區(qū)域,所以該值可能導(dǎo)致只有上帝知道。 但是,有相當(dāng)全面的鏈接器或IDE技巧可用于幫助識(shí)別此類風(fēng)險(xiǎn)事件并從中得到恢復(fù)。要填充未使用的內(nèi)存,可以有效使用存在許多國(guó)家不同的可能組合,但是中國(guó)如果要構(gòu)建更可靠的系統(tǒng),顯而易見(jiàn)的選擇是將ISR錯(cuò)誤及時(shí)處理技術(shù)程序放在解決這些重要位置。如果這個(gè)系統(tǒng)之間出現(xiàn)安全問(wèn)題能力并且處理器開(kāi)始在程序空間環(huán)境之外執(zhí)行代碼,它會(huì)觸發(fā)ISR并提供存儲(chǔ)處理器,寄存器和系統(tǒng)結(jié)構(gòu)狀態(tài)的機(jī)會(huì),然后再?zèng)Q定糾正操作。
技巧2——檢查CRC嵌入式工程師應(yīng)用程序的最大好處之一是,我們的IDE和工具鏈可以自動(dòng)生成應(yīng)用程序或內(nèi)存校驗(yàn)和(校驗(yàn)和),以驗(yàn)證基于此校驗(yàn)和的應(yīng)用程序是否完整。 有趣的是,在許多情況下,校驗(yàn)和只在程序代碼加載到設(shè)備時(shí)使用。 然而,如果將CRC或校驗(yàn)和保留在內(nèi)存中,則驗(yàn)證應(yīng)用程序在啟動(dòng)時(shí)(甚至對(duì)于長(zhǎng)時(shí)間運(yùn)行的系統(tǒng))仍然是確保不發(fā)生事故的極好方法。 編程應(yīng)用程序現(xiàn)在幾乎不可能改變,但考慮到每年交付數(shù)十億的西門子plc控制器和潛在的惡劣工作環(huán)境,應(yīng)用程序崩潰的可能性不是零。
技巧3——為了構(gòu)建一個(gè)更可靠的系統(tǒng),通過(guò)在啟動(dòng)時(shí)執(zhí)行內(nèi)存檢查來(lái)確保您的硬件工作正常是很重要的。 畢竟,硬件會(huì)失靈。 幸運(yùn)的是,軟件從來(lái)不會(huì)失敗,它只是執(zhí)行代碼來(lái)做它該做的事情,不管是對(duì)是錯(cuò)。 驗(yàn)證 ram 在啟動(dòng)時(shí)沒(méi)有內(nèi)部或外部問(wèn)題是確保硬件按預(yù)期運(yùn)行的好方法。 有許多不同的方法來(lái)執(zhí)行 ram 檢查,但通常的方法是寫入一個(gè)已知的模式,在讀回之前等待一小段時(shí)間。 結(jié)果應(yīng)該是你寫的東西。 事實(shí)上,在大多數(shù)情況下,內(nèi)存檢查已經(jīng)通過(guò),這正是我們想要的。 然而,有一個(gè)非常小的機(jī)會(huì),檢查不會(huì)通過(guò),這提供了一個(gè)極好的機(jī)會(huì),為系統(tǒng)指出一個(gè)硬件問(wèn)題。
技巧4--使用許多嵌入式開(kāi)發(fā)堆棧監(jiān)視器,堆似乎是一個(gè)非常神秘的力量。當(dāng)奇怪的事情開(kāi)始發(fā)生,工程師終于難倒,他們開(kāi)始想,也許正在發(fā)生的事情在堆棧中。其結(jié)果是,調(diào)整大小和盲堆的位置,等等。但這種錯(cuò)誤通常是無(wú)關(guān)的堆棧,但它怎么能這么肯定?畢竟,在惡劣的情況下,有多少工程師實(shí)際上是一個(gè)堆棧大小分析?當(dāng)執(zhí)行代碼,應(yīng)用程序,返回地址和存儲(chǔ)在堆棧中的其他信息所需的變量將會(huì)繼續(xù)。在堆棧這種機(jī)制導(dǎo)致生長(zhǎng)在它的內(nèi)存分配。然而,這種增長(zhǎng)可能超過(guò)容量限制在編譯時(shí)被確定,導(dǎo)致對(duì)堆中的相鄰數(shù)據(jù)存儲(chǔ)區(qū)域的損壞。 確保棧的正常運(yùn)行的一種方法是代碼的堆棧監(jiān)控系統(tǒng)“健康”部分實(shí)現(xiàn)(有多少工程師呢?)。監(jiān)視器堆以創(chuàng)建堆棧和“其他”的存儲(chǔ)區(qū),并填充已知的比特模式之間的緩沖區(qū)。然后,監(jiān)視器將繼續(xù)監(jiān)控模式,如果有任何變化。如果此位模式被改變,這意味著堆棧增長(zhǎng)太多,正要使系統(tǒng)進(jìn)入地獄的黑暗!在這一點(diǎn)上,監(jiān)視器可以記錄事件,系統(tǒng)狀態(tài)的發(fā)生,并為以后的任何其他有用的數(shù)據(jù)診斷問(wèn)題。提供了堆疊顯示器的西門子plc控制器系統(tǒng)最實(shí)時(shí)操作系統(tǒng)(RTOS)或在一個(gè)存儲(chǔ)器保護(hù)單元(MPU)。可怕的是,這些功能默認(rèn)關(guān)閉,或開(kāi)發(fā)商往往故意關(guān)閉。在網(wǎng)絡(luò)上快速搜索顯示,許多人建議在實(shí)時(shí)操作系統(tǒng)堆棧關(guān)閉顯示器以節(jié)省56個(gè)字節(jié)的閃存空間。等等,這是不值得的努力!
技巧5 - 使用MPU 過(guò)去,很難在小型廉價(jià)的西門子plc控制器中找到存儲(chǔ)器保護(hù)單元(MPU),但這已經(jīng)開(kāi)始發(fā)生變化,MPU現(xiàn)在可從高端到低端西門子plc控制器提供,這些MPU為嵌入式軟件開(kāi)發(fā)人員提供了大幅提高其固件穩(wěn)健性的機(jī)會(huì)。 MPU已經(jīng)逐漸耦合到操作系統(tǒng)以創(chuàng)建處理是獨(dú)立的存儲(chǔ)空間,或者任務(wù)可以執(zhí)行其代碼而不必?fù)?dān)心被踩踏。如果發(fā)生某些事情,將取消不受控制的處理,并實(shí)施其他保護(hù)措施。請(qǐng)注意帶有該組件的西門子plc控制器,如果有的話,請(qǐng)利用此功能。
技巧6 - 建立一個(gè)強(qiáng)大的看門狗系統(tǒng) 當(dāng)看門狗被啟用時(shí),您經(jīng)常會(huì)發(fā)現(xiàn)看門狗實(shí)現(xiàn)*(這是一個(gè)好的開(kāi)始),但它也可以通過(guò)周期性定時(shí)器來(lái)完成。看門狗被清除;啟用計(jì)時(shí)器與程序中發(fā)生的任何事情完全隔離。使用看門狗的目的是幫助確保如果發(fā)生錯(cuò)誤,看門狗將不會(huì)被清除,即當(dāng)工作暫停時(shí),系統(tǒng)將被強(qiáng)制執(zhí)行硬件復(fù)位以進(jìn)行恢復(fù)。即使系統(tǒng)出現(xiàn)故障,使用獨(dú)立于系統(tǒng)活動(dòng)的計(jì)時(shí)器也可以使監(jiān)視程序保持清晰。 嵌入式開(kāi)發(fā)人員需要仔細(xì)思考并設(shè)計(jì)應(yīng)用程序任務(wù)如何集成到監(jiān)視系統(tǒng)中。例如,有一種技術(shù)允許在特定時(shí)間段內(nèi)運(yùn)行的每個(gè)任務(wù)表明他們可以成功完成任務(wù)。在這種情況下,看門狗不會(huì)被清除并強(qiáng)制重置。 對(duì)于可靠的系統(tǒng),構(gòu)建強(qiáng)大的監(jiān)視系統(tǒng)非常重要。由于技術(shù)太多,很難在這些段落中完全覆蓋它們,但對(duì)于本主題,作者將在未來(lái)發(fā)表相關(guān)文章。
技巧7 - 避免易失存儲(chǔ)器分配 不習(xí)慣在資源受限環(huán)境中工作的工程師可能會(huì)嘗試使用其編程語(yǔ)言的功能,這允許他們使用易失性內(nèi)存分配,畢竟,這是一種常用于計(jì)算器系統(tǒng)的技術(shù),只在必要時(shí)才分配內(nèi)存。例如,在使用C開(kāi)發(fā)時(shí),工程師可能更喜歡使用malloc在堆上分配空間。有一個(gè)執(zhí)行的操作,一旦完成,你可以使用free來(lái)返回分配的內(nèi)存供堆使用。當(dāng)它們發(fā)生時(shí),如果應(yīng)用程序要求空間但沒(méi)有所請(qǐng)求的空間,會(huì)發(fā)生什么?使用易失性內(nèi)存分配引起的問(wèn)題非常復(fù)雜。妥善處理這些問(wèn)題是一場(chǎng)噩夢(mèng)!另一種方法是以靜態(tài)方式直接簡(jiǎn)化存儲(chǔ)器的分配。例如,不是簡(jiǎn)單地在程序中創(chuàng)建256字節(jié)長(zhǎng)的緩沖區(qū),而是通過(guò)malloc請(qǐng)求這個(gè)大小的內(nèi)存緩沖區(qū)。可以在應(yīng)用程序的整個(gè)生命周期內(nèi)維護(hù)此分配的內(nèi)存,而無(wú)需考慮堆或內(nèi)存碎片問(wèn)題。
結(jié)論:這些只是開(kāi)發(fā)人員可以開(kāi)始構(gòu)建更可靠的嵌入式系統(tǒng)的一些方法,所有這些技術(shù)都使設(shè)計(jì)人員能夠開(kāi)發(fā)出更可靠的嵌入式系統(tǒng)的秘密。
標(biāo)題:西門子plc嵌入式系統(tǒng)常用的技巧 地址:http://m.easyfrms.com/ask/3046.html