日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

px4原生源码学习二--实时操作系统篇

發布時間:2024/4/18 windows 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 px4原生源码学习二--实时操作系统篇 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
/**************************************************************************************************************

??po上我使用到的硬件和開發環境

? px4硬件:某寶銷量最高的pixhawk套件(主機,gps+指南針,數傳,pwm轉pmm,安全開關,蜂鳴器,電源轉換接頭)

? 遙控器:某國產神器

? 開發環境:虛擬機vm12+ubuntu14

?ps:此文章只針對純代碼分析,關于那些個飛機類型啦,硬件什么的我就不多說了,這個得自己去親身體驗才行,切不可貿然飛行,這個還是很危險的!!!!!

?還有就是什么Git,Linux,make什么的也不會多說,畢竟只是工具屬性。

?獲得更好支持可以訪問http//:px4.io 我知道的大部分來自這個網站。

? **************************************************************************************************************/


??? 為什么我要談到實時操作系統?首先據我所知,國內除了軟件工程專業和計算機專業,其它專業應該很少會開操作系統這門課程,對于廣大的自控和電子專業的學生來說,其實這非常不利的!!!!如果你只是開發一個簡簡單單的單片機程序,不用考慮以后對于程序的升級與修改,那么你簡簡單單寫個main函數的while循環其實沒什么不好。但你要遇到那種開發周期長,系統復雜的產品或者項目,那最好是基于實時操作系統開發,因為這對于代碼重用和添加新功能或者新設備來說會方便挺很多,代碼的編寫程度也會簡單很多。像早期的apm飛控也是基于板子的main函數,導致其代碼復雜,冗余,后面直接被棄,因為可能每添加一個功能或者設備,代碼就可能要重構。我們要講的px4飛控其實也是基于一個叫做Nuttx的實時操作系統的(在此提醒各位拿到代碼找main函數的同志們,不要白費力氣,你找不到的,因為確實系統不是main函數啟動的!!!,后面我會專門講一下px4是如何啟動的),其實我沒猜錯的話大疆飛控用的應該是在國內外很出名的開源實時操作系統μC/OS。所以要更好理解px4,就一定要有操作系統概念。下面我就基于兩點談談:第一:什么是實時操作系統,第二:px4的實時操作系統Nuttx



?????首先談談操作系統,說到操作系統,大家首先會想到windows,linux或者Mac os,亦或者手機的一些操作系統。沒錯這些都是操作系統,但這些操作系統和今天要談的實時操作系統有一些基本的概念和理論都是一樣的,但他們又有一些不同。

?? 相同點:所以操作系統無非由以下四大部分組成(熟記這四個模塊):

?????????????????? 1.任務調度

?????????????????? 2.內存管理

?????????????????? 3.文件系統

?????????????????? 4.?I/O

???? 對于主流的操作系統而言,這四個缺一不可!!,而對于一些非常簡單的實時操作系統可能會沒有3和4。

???? px4所使用的的Nuttx這四個模塊都有。

???? 什么是任務調度(很多課本上會說進程管理,但后面操作系統發展出了線程,這個說法其實不嚴謹)?

???? 想想你日常使用的手機,有各式各樣的APP,其實每個APP都可以把它抽象為一個簡單的task(任務),你在各個APP之間切換自如,包括有一些后臺運行的APP,假設你手機是單核的,一次只能運行一個task,那手機是怎么實現后臺運行多個APP的呢?這個就得歸功于操作系統的任務調度功能,由于大部分的APP都不會涉及到太多的計算,所以這些APP真正使用CPU的時間少之又少,大部分時間是在等待輸入和輸出操作的,這個時候就可以把他們掛起,讓別的task使用CPU了,由于這個切換很快,你感覺不到,所以你就感覺事實上有多個程序在同時運行。

????簡單點說任務調度就是一個程序,這個程序決定其他程序什么時候使用CPU,什么時候掛起。

????上面的說法就引出了一個問題,如果同時有兩個task都要求使用CPU呢?怎么辦!誰先用?這就引進了另外一個概念:優先級。誰優先級高誰用CPU。而這個就是實時操作系統同普通操作系統的區別。實時操作系統有嚴密的等級制度和相應制度即:高優先級task搶低優先級task (即使這個task在用CPU)CPU對于高優先級的程序,要求系統有快速的反映時間(這是衡量一個實時操作系統好壞的主要標準)。

????什么是內存管理

??? 程序要運行首先要干嘛?要把它從ROM(可理解為硬盤)里面加載到RAM(可理解為內存)里面。如果單片機就跑一個程序,整個內存都是你的,你想怎么用就怎么用。可是引入操作系統后,要對多個task進行調度,就得把他們全部加載到內存中,可是畢竟單片機或者mcu的內存有限(即使電腦的也有限),這就引出了內存管理。

???簡單點說內存管理也是一個程序,這個程序決定誰駐留在內存,誰離開內存。

????
??什么是文件系統?

??在ROM里面保存的東西,如果是少量的東西,你可以隨便保存。可是當你有幾十個g種子的時候,你也直接用單片機的方式一個一個寫到flash里面!!!你雜亂無章的保存會導致后面查找,刪除,修改變得非常麻煩,使用我們要用文件系統來幫我們管理這些個文件,而我們只要對文件系統進行操作就能對文件操作了。

??簡單點說文件系統是一個程序,它幫我們管理我們的文件,使我們操作文件更方便。

? 什么是I/O?

???CPU不能獨立的存在,它得和周圍的設備通信,內存也好,flash也罷,這些都可以通歸為I/O設備。對于px4來說I/O設備就更多了,什么gps,陀螺儀,加速計,氣壓計,空速計,pmm輸入等等,還在一直加呢!我們自己寫個main數,也可以讀出這些設備的數據,但在操作系統中,對這些設備進行操作就不是那么簡單了。由于I/O算的上計算機組件當中最復雜的東西了,你不能簡簡單單把它歸類為某個程序。Unix系統對I/O設備有個很好的抽象:文件。Unix系統中把所有東西都抽象成文件,I/O設備是一種特殊的文件。因為事實上我們并不關心你I/O設備是什么,我們只想要其中的數據,文件可以存取數據,傳感器數據不斷更新,我就不斷更新這個文件內容,其他程序想要里面的數據可以去讀這個文件就行。

???不同系統對于I/O管理的理念大不相同,我無法把它抽象為一個程序或者文件,后面我會針對Nuttx的I/O談談。


??px4的實時操作系統Nuttx
???
??? 首先說說px4和Nuttx的淵源:PX4是一個軟、硬件開源項目(遵守BSD協議),目的在于為學術、愛好和工業團體提供一款低成本高性能的高端的自駕儀。這個項目源于?ETH Zurich (蘇黎世聯邦理工大學)的計算機視覺與幾何實驗室的PIXHAWK項目、并得到了自主系統實驗室和?自動控制實驗室的支持。而Nuttx也是蘇黎世聯邦理工大學
的一個開源項目(這個學校在計算機方面可能算的上是歐洲最強的了,那個提出最短路徑算法和信號量的教授就是這個學校的)。所以他們兩個就走到了一起。

? 下面背下書:NuttX 是一個實時操作系統(RTOS),強調標準兼容和小型封裝,具有從8位到32位微控制器環境的高度可擴展性。NuttX 主要遵循? Posix 和 ANSI 標準,對于在這些標準下不支持的功能,或者不適用于深度嵌入環境的功能(如 fork()),采用來自 Unix 和常見 RTOS (如 VxWorks)的額外的標準 API。


?? 下面一篇文章我將著重講解一下Nuttx系統的使用。

總結

以上是生活随笔為你收集整理的px4原生源码学习二--实时操作系统篇的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。