RTOS簡介
1.1 背景
在大型計算機的世界里,操作系統(tǒng)(OS operating systems)已經(jīng)存在了相當(dāng)長的一段時間。最基本的操作系統(tǒng)可以追溯到20世紀(jì)50年代。到20世紀(jì)70年代中期,操作系統(tǒng)的概念、結(jié)構(gòu)、功能和界面已經(jīng)非常成熟。
微型系統(tǒng)大約在 1970年出現(xiàn)。在基于微處理器的設(shè)備中迅速應(yīng)用操作系統(tǒng)似乎是合乎邏輯的。然而到直到20世紀(jì)80年代中期,幾乎沒有任何此類應(yīng)用采用了可稱為正式設(shè)計的實時操作系統(tǒng)。誠然,CP/M 于 1975年發(fā)布,后來由英特爾公司投入芯片。但它對實時領(lǐng)域的影響甚微;它的天然歸宿是臺式機。
有兩個因素影響了實時操作系統(tǒng)的普及,一是機器的限制,另一個是圍繞微型機的設(shè)計文化。早期的微型機在計算能力、運行速度和內(nèi)存容量方面都相當(dāng)有限。試圖在此基礎(chǔ)上建立操作系統(tǒng)結(jié)構(gòu)是相當(dāng)困難的。此外,大多數(shù)嵌入式系統(tǒng)編程人員幾乎沒有操作系統(tǒng)方面的背景知識。
如今,情況大為不同?,F(xiàn)代嵌入式設(shè)計的主力是 16/32位復(fù)雜微控制器。這些微控制器成本低、性能高,集成了大量片上存儲器和外設(shè)功能。市場上還有許多商用實時操作系統(tǒng)。但是,能做什么并不意味著就應(yīng)該做什么,究竟為什么要在下一次設(shè)計中選擇使用 RTOS呢?首先,我們需要考慮更基本的問題:我們應(yīng)該如何解決嵌入式系統(tǒng)中的軟件設(shè)計問題。這就是本章的重點。它為實用的設(shè)計技術(shù)奠定了基礎(chǔ),并確切地說明了 RTOS 如何與之相匹配。
1.2 生產(chǎn)高質(zhì)量的軟件
乍一看,本章一開始就談軟件質(zhì)量似乎有些奇怪。這似乎與操作系統(tǒng)關(guān)系不大。事實上并非如此,我們可以從中學(xué)到一些寶貴的經(jīng)驗。
如果讓你定義 "高質(zhì)量 "軟件的含義,你會怎么說?怎么樣?
- 正確地完成工作("功能 "正確性)。
- 正確的時間完成任務(wù)("時間 "正確性)。
- 行為應(yīng)該是可預(yù)測的。
- 行為應(yīng)該是一致的。
- 代碼不應(yīng)難以維護(低復(fù)雜性)。
- 代碼的正確性可以分析(靜態(tài)分析)。
- 代碼行為可分析(覆蓋率分析)。
- 運行時性能應(yīng)可預(yù)測。
- 內(nèi)存需求應(yīng)可預(yù)測。
- 如果需要,可以證明代碼符合相關(guān)標(biāo)準(zhǔn)。
當(dāng)然,您也可以根據(jù)自己的特殊要求對上述原則進行擴展。
請考慮將這些原則應(yīng)用到下面這個相對簡單的小型實時系統(tǒng)中。
這里的要求是通過改變液體流速來控制液體溫度。具體做法如下
- 使用溫度傳感器測量液體溫度。
- 將其與所需的溫度值進行比較,然后
- 生成控制信號,以設(shè)定控制冷卻劑流量的執(zhí)行器的位置。
軟件必須執(zhí)行
- 數(shù)據(jù)采集
- 信號線性化和縮放
- 控制計算
- 執(zhí)行器驅(qū)動。
這是核反應(yīng)堆控制系統(tǒng)中的安全關(guān)鍵 SIL 4(安全完整性等級Safety Integrity Leve 4)子系統(tǒng)。因此,禁止使用中斷。
沒有唯一的代碼解決方案,但會采用以下形式:
我們所看到的是一個 "應(yīng)用級"代碼示例,在這里是一個單獨的順序程序單元。還請注意,低層次的細節(jié)并不為我們所知。
底層操作主要涉及系統(tǒng)硬件和相關(guān)活動。即使使用高級語言,程序員也必須具備機器硬件和功能方面的專業(yè)知識。這就凸顯了與傳統(tǒng)微機編程相關(guān)的問題:實現(xiàn)良好設(shè)計所需的硬件/軟件專業(yè)知識。即使是這個簡單的例子,程序員也需要相當(dāng)程度的硬件和軟件技能。
1.3 軟件建模
制作運行程序有幾個不同的階段。
首先是軟件設(shè)計,形成設(shè)計或邏輯模型。然后以源代碼的形式實現(xiàn),即物理模型。源代碼經(jīng)過編譯、鏈接和定位("構(gòu)建")后得到目標(biāo)代碼,即部署模型。最后,將目標(biāo)代碼加載到處理器上并執(zhí)行,這就是運行時模型。請注意,在許多現(xiàn)代集成開發(fā)環(huán)境(IDE)中,編譯和下載都是作為一項活動來處理的。
在這里,我們主要關(guān)注的是代碼和運行時模型。我們暫時將設(shè)計模型放在一邊,集中精力處理其他兩個模型。
如果使用現(xiàn)代工具集,開發(fā)和處理這些工作非常簡單。然而,無法自動化的是將源代碼結(jié)構(gòu)分配到源代碼組件。程序員需要做出這些關(guān)鍵決定,我們將在處理設(shè)計模型時再次討論這個話題。
代碼模型為我們提供了軟件的靜態(tài)視圖。相比之下,運行時模型是代碼、數(shù)據(jù)和處理器的組合。它被定義為一個軟件流程,在嵌入式領(lǐng)域也被稱為任務(wù)(這一術(shù)語存在爭議,稍后會有更多論述)。簡單地說,一個任務(wù)代表一個順序程序的執(zhí)行。
我們暫且將運行時模型稱為任務(wù)模型。
代碼模型的更改可能(通常會)影響任務(wù)分配模型。因此,開發(fā)人員必須充分理解并記錄它們之間的關(guān)系。
1.4 時間和定時的重要性
三代飛機有一個三軸自動穩(wěn)定系統(tǒng)。從根本上說,現(xiàn)實世界中需要完成的工作是相同的
每種飛機所采用的技術(shù)卻大相徑庭?;谖⑻幚砥鞯南到y(tǒng)與其他兩種系統(tǒng)的本質(zhì)區(qū)別在于:離散操作與連續(xù)操作。
在連續(xù)("模擬")電子系統(tǒng)中,如果需要,所有操作都可以同時進行("并發(fā)")。不僅如此,處理過程也是瞬時完成的。但這在以處理器為基礎(chǔ)的系統(tǒng)中是不可能實現(xiàn)的,因為這些系統(tǒng)從根本上說是離散運行的:
- 處理器一次只能做一件事(順序機器),而且
- 操作需要時間--事情不會立即發(fā)生。
這兩個因素讓我們在設(shè)計工作中倍感焦慮。因此,如果您在不了解系統(tǒng)時序需求的情況下就開始開發(fā),那么您就要做好準(zhǔn)備,迎接令人討厭的意外。
有鑒于此,讓我們重溫一下之前的設(shè)計練習(xí),可以看出任務(wù)代碼
- 以連續(xù)循環(huán)的方式執(zhí)行。
- 在每個循環(huán)中完成工作("run-to-completion"語義)。
- 有完成工作的截止日期 (Td)。
- 完成工作需要時間(任務(wù)執(zhí)行時間 - Te task execution time)。
- 以固定間隔或周期重復(fù)("周期性 "運行 - Tp periodic)。
- 在空閑期間不做任何事情(空閑時間 Ts spare)。
- 需要定時機制來控制周期時間(這里我們最有可能使用硬件定時器來跟蹤)。
在這個特殊的設(shè)計中,Tp和Td是系統(tǒng)要求,Te取決于我們的代碼解決方案,而Ts則是我們最終得到的結(jié)果。例如,假設(shè)Tp為100毫秒,Te為5毫秒,則 Ts值為95毫秒。由此可見,處理器每100毫秒執(zhí)行代碼 5毫秒,利用率(U Utilization)為 5%。
這些數(shù)字對設(shè)計有何影響?首先,在嵌入式系統(tǒng)中,任務(wù)在每次啟動時都要運行到完成點。其次實用的系統(tǒng)必須有一些空閑時間。第三,代碼能在一段時間內(nèi)執(zhí)行并不意味著其性能是可以接受的。輸入到輸出的處理延遲("延遲" latency)可能會導(dǎo)致整個系統(tǒng)的行為出現(xiàn)問題。
參考資料
- 軟件測試精品書籍文檔下載持續(xù)更新 https://github.com/china-testing/python-testing-examples 請點贊,謝謝!
- 本文涉及的python測試開發(fā)庫 謝謝點贊! https://github.com/china-testing/python_cn_resouce
- python精品書籍下載 https://github.com/china-testing/python_cn_resouce/blob/main/python_good_books.md
1.5 處理多個工作
上例中的代碼結(jié)構(gòu)可以讓我們構(gòu)建出最好的軟件。但是,如圖所示,它只包含一個程序單元中的一個定義明確的作業(yè)。那么,這種方法的擴展性如何呢?例如,在處理多個作業(yè)時,是否有可能達到單作業(yè)設(shè)計的質(zhì)量?這取決于具體情況,我們很快就會看到。
假設(shè)我們被要求為基于微處理器的雙軸搖攝和俯仰攝像機穩(wěn)定器系統(tǒng)制作軟件。因此,總體工作或功能 "穩(wěn)定圖像 "由兩個子工作組成:
假設(shè)各軸的時序要求如下:
- 搖鏡頭:25赫茲采樣率(每秒25次,Tp=40毫秒)。
- 傾斜50Hz采樣率(Tp=20ms)。
現(xiàn)在我們不僅要運行代碼單元,還要以不同的速率運行它們。這就需要一些總體協(xié)調(diào)軟件:一種執(zhí)行控制 "引擎"。
每個代碼單元都以 C 語言函數(shù)的形式實現(xiàn),例如
-
代碼單元 1(函數(shù) 1):RunPanStabilizer();
-
代碼單元 2(函數(shù) 2):RunTiltStabilizer();
請注意,這樣寫是為了清晰,而不是為了提高效率。文章來源:http://www.zghlxwxcb.cn/news/detail-590238.html
我們在這里看到的是合理設(shè)計方法的基礎(chǔ)。然而,它仍然只是基礎(chǔ),有很大的缺陷。文章來源地址http://www.zghlxwxcb.cn/news/detail-590238.html
到了這里,關(guān)于物聯(lián)網(wǎng)實時操作系統(tǒng)1RTOS簡介(上)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!