首先硬實時系統不是硬實時操作系統,
硬實時系統描敘的是一個結果,而硬實時操作系統純粹是軟件。
硬實時系統本質是確定性,100%的確定性,任務在某個條件下開始,多長時間執行完,都必須100%確定,例如繼電器控制邏輯。
實際上沒有所謂的軟實時,軟實時的概念在不同的人和不同的環境,其意義不一樣,例如3D射擊游戲,它的實時就是人眼不能感到有明顯抖動,而在控制行業,軟實時系統要求是盡可能的達標,達不到標準也沒有太大關系(不會有設備損壞,人員安全,功能沒有完成),這樣說來,任何系統都可以是軟實時,軟實時本質就是幾率,例如,達到1us的響應有99%的,達到1ms的響應有99.9%的幾率,可以認為window也是軟實時系統。
硬實時操作系統的很多特點(搶占任務調度,優先級等),都是為了實現確定性而提供的實現手段,實時操作系統只是提供了一種方便實現實時系統的平臺可能性(裸機也可以達到)
而要保證系統硬實時,要
1)足夠強大的硬件平臺,也就是是輸入、處理、輸出都是確定性的,性能是滿足的
2)任務的劃分是合理的,要確保硬實時任務的確定性,例如最高硬實時任務是最高優先級
如果沒有上面2點,無論怎樣單片機還是操作系統都不能達到硬實時的效果。這里有一個優秀的51實時系統RTX51原理分析與移植大家可參考下:http://www.zg4o1577.cn/mcu/254.html
單片機裸機是否可以實現硬實時?
單片機裸機當然可以實現硬實時,而且單片機裸機是響應最快、最確定性、開發最簡單直接的硬實時系統開發平臺,單片機裸機的缺點是系統大了之后,會導致開發任務過大,任務間通訊工作量大,任務只能簡單的輪詢,沒有優先級概念,如果系統任務劃分簡單,沒有太多的外部依賴,完全可以采用單片機做硬實時系統。
何時使用實時操作系統?
系統復雜度比較大,有很多的任務,而且任務可能是不同的人在開發,任務間有較多的通訊,操作系統或者第三方提供很多的庫,不必從頭開發。
實時系統和嵌入式有關系么?
根本是不同的概念,實時系統著重在確定性,嵌入式著重在系統的體積
硬實時系統是否一定是通過軟件系統實現?
硬實時系統實現方式很多種,機械方式,繼電器方式,FPGA方式,單片機方式,操作系統方式,很多的實現方式運行時根本沒有軟件
系統的好壞,首先是總體設計,在基于了解業務的基礎上才能做出好的設計,如果,業務都不了解,就關注在實現手段上,就舍本逐末了。
如果了解了業務,可以比較好的劃分任務,例如,將人機交互任務放置在普通的PC機上,將控制任務或者對時間要求高的任務放置在下位機上(PCI板子或者通訊連接的外部板子),這樣即使是很搓的系統,其結果組合起來也是相當好的。
至于具體實時系統的實現,類型太多,對于大部分系統,只要了解即可,對于很核心的幾個系統,其類型分別為
硬件級別的FPGA
單片機級別的
強實時系統級別的,UCOS,VXWORKS,RTAI
弱實時系統級別的,wince
另外一個系統,肯定有實時的部分和非實時部分,所以實際系統并不一定要全部是實時的,如果上下位機或者雙內核系統,就比較符合實際的情況
即使在usos中,界面部分一般也是非實時任務
對于方案的選擇,其實大部分是在和工作量和復雜度做斗爭,
如果在PC機上,由于微軟和其他廠商提供的現成的東西,所以無需自底開發,除非,自己做了自己的板子,需要寫驅動。
而對于SOC,由于開發商提供的東西并不多,大部分都是都是數據手冊,然后開發工具基本就是編譯器和燒寫器,所以對其的開發基本要自底開始,首先要會底,然后才可以考慮操作系統、協議棧移植等問題。對于單片機提供商提供的api封裝,用戶最好自己驗證,可能有錯誤。
PC機擴展方式多種,PCI,USB,以太網等等,根據需要而定
window做實時控制缺點
包袱太重,系統任務基本是不能定制的,
這些任務可能會導致系統資源的消耗的不確定性
系統不能裁剪,大小不能定制
內核不開發,系統接口不開放,除了問題無法定位
雖然有缺點但還是可以通過一些方法來補救的,
方法詳見我的另一篇文章“如何提高window實時性能”
linux做實時控制基本沒有上面缺點,
但是相對ucos,這些操作系統還是包袱過重,做簡單控制要熟悉的上下文太多,工控機系統適合做大數據處理、復雜耦合處理、人機操作復雜、原型試驗性質、對體積不敏感的東西