国偷自产一区二区免费视频,美女免费视频一区,九九热线视频只有这里最精品,欧美日韩一区成人

 
?微信公眾號
手機版
??新浪微博
會員登錄
關于我們  |   商務合作  |  友情鏈接   |  意見反饋  |  人才招聘
北京云翼同創科技有限公司 深圳高博特文化發展有限公司   版權所有,并保留所有權利 ? 2018 京ICP備16044150號-1                       

跨界 · 融合 · 服務 · 創新



雙擊此處添加文字
政策法規
首頁  >  政策法規  >  詳情 
無人機飛控 操作系統如何滿足實時且高度可剪裁配置、可擴展
來源:尖兵之翼 | 作者:高博特 | 發布時間: 2023-10-09 | 4152 次瀏覽 | 分享到:
主流飛控的嵌入式實時內核依據軟件架構、接口標準兼容性等劃分為兩大類:類Unix如NuttX等,微內核類如FreeRTOS和uCOSii等……

 


操作系統向下進行硬件資源管理,向上提供任務調度和通信接口。當前Ubuntu(一款Linux發行版)+ROS(Robot Operating System)已經成為機器人運行環境的事實標準,而對于無人機飛控,我們期望操作系統是實時的且高度可剪裁配置、可擴展。主流飛控的嵌入式實時內核依據軟件架構、接口標準兼容性等劃分為兩大類:類Unix如NuttX等,微內核類如FreeRTOS和uCOSii等。其中實時主要是指具備高優先級任務搶占低優先級任務的能力,調度延遲以系統時鐘量級來計。上述兩類操作系統都滿足實時要求,類Unix、微核本質是調度器,由一些線性數據結構實現對任務線程的管理;而ROS本質是多進程Socket通信中間件。

 一、類Unix操作系統 

PC端Unix操作系統啟動之后呈現出進程樹和文件系統樹,進程樹表達所有進程之間都具有親緣關系,而文件系統樹表達文件系統路徑之間的掛載關系。

NuttX是類Unix嵌入式實時操作系統,因為處理器架構不同,又限于資源壓力,相比于Linux,它對機制實現做了一些簡化。麻雀雖小,五臟俱全,NuttX支持8bit到64bit微處理器環境,支持POSIX/ANSI標準的任務控制、命名管道,計數信號量,信號,互斥量以及文件系統等機制,下面是NuttX架構圖: 

NuttX架構圖首先, NuttX支持用戶線程和內核線程,而不具有Linux意義下的進程概念。取而代之的是NuttX線程組,包括一個主任務線程和由主線程創建的pthreads,線程組線程彼此共享資源如環境變量、文件描述符、文件流、sockets等。另外,在NuttX上有task的概念,task是一種特殊的pthread,和pthread資源共享程度相比,task有一定獨立度。對于線程/任務控制,NuttX提供了VxWorks與POSIX風格的API,實現最大程度兼容性。對于內核線程,他們相比于用戶態有內核資源訪問權限。

默認情況下,NuttX按照優先級調度,高優任務在阻塞之前獨占CPU,同優先級任務按下來先調度順序執行,NuttX任務或線程可以通過選項配置round-robin或sporadic方式調度。

除了線程與任務之外,NuttX還有一種任務執行方案,work queue:work queue是一系列需要執行的工作加入到隊列中,由一些線程來消費執行。NuttX支持三種類型work queue,包括高優內核work queue:一般用于處理中斷句柄中的延遲任務,也可用于驅動底層處理工作,因為這些任務通常是高優快速運行的;還有低優內核work queue:低優先級工作隊列更適合于處理面向應用層的工作,比如文件系統清理,內存垃圾回收,異步IO操作等;還有用戶模式work queue:同樣面向應用層,但是訪問內核資源需要系統調用增加開銷,用戶自行結合實際情況選取。

在任務同步、通信,資源互斥保護方面,NuttX支持命名管道,計數信號量,信號,共享內存等。父子關系的線程或任務之間可以用waitpid等同步,非父子關系可以用其他如命名管道等方式做同步,PX4中的uORB就是基于命名管道實現的,命名管道支持POSIX標準文件系統操作,如下介紹:

NuttX符合“一切皆文件”的哲學,接口上對外暴露Open、Close、Read、Write、Ioctl以及Poll。如設備驅動,又如命名管道。NuttX偽根文件系統是全內存的,其他或真實文件系統可以掛載到根下。NuttX設備驅動包括字符設備驅動,如常見串口驅動,模數驅動,PWM驅動,CAN驅動,正交編碼器,定時器驅動,RTC驅動,FOC(Field Oriented Control)控制交流電機驅動等。除了最常見的字符設備驅動之外,還有字符設備驅動,它們以塊為單位讀寫訪問,以及一些特殊設備驅動:SYSLOG,RAM LOG等。PX4中傳感器驅動是對字符設備的進一步開發,放在PX4-Autopilotsrcdrivers路徑中,讀者可以自行查看調用關系。

 二、微內核 

與類Unix相比,微核的調度、通信等機制都是獨立實現,不遵守接口標準,因此更輕量。相比于裸機編程,使用微內核,業務被模塊化可以使架構更清楚,開發者對調度和通信的實現無需過多關注。微內核代表產品包括FreeRTOS、uCOSii,以及國產RT-thread,我們以FreeRTOS為例介紹一下:

FreeRTOS支持消息隊列,用于任務間通信,本質是一段對各個任務可見的共享內存。也支持二值信號量(或互斥信號量)做資源互斥保護以及多值信號量做同步,他們的本質也是共享內存空間以及有PV語義的接口。

對中斷的響應和處理也是嵌入式編程需要關注的一個特性,在FreeRTOS中,中斷事件可以與常規task進行通信和同步。此外,微核支持臨界區來關閉調度和中斷,臨界區邏輯需要盡可能短小,以保證實時性。

內存管理方面,與NuttX一樣,對于沒有MMU的STM32F4處理器, TCB(Task Control Block)與各自的棧鏈表形式保存在扁平內存中,內存布局可以類比下圖:

主站蜘蛛池模板: 泗水县| 武胜县| 涞水县| 泸西县| 山东省| 区。| 丹棱县| 天峻县| 德昌县| 同德县| 凉山| 舟山市| 贵港市| 荔浦县| 连南| 丹寨县| 孝义市| 怀仁县| 宁河县| 上高县| 鹿泉市| 芦山县| 宁晋县| 百色市| 板桥市| 阳江市| 尼勒克县| 德阳市| 留坝县| 长兴县| 凤山县| 桃园市| 保德县| 萍乡市| 湘潭县| 济源市| 麻栗坡县| 银川市| 汝州市| 新丰县| 满城县|