標籤:

一天精通無人機第 23 講 中級篇系列:創建並運行多進程程序

歡迎關注公眾號:編程外星人

一、基於Linux的進程創建

我們已經在上一節中學習了進程的運行原理,在本節中我們來一起來學習如何在實際編程中創建一個可運行的進程。首先我們來編寫一個普通的程序,打開一個文本編譯器並在其中輸入如下內容:

之後將其保存為main.c並使用gcc進行編譯:

這樣就在當前目錄下生成了一個叫做main的可執行程序。注意此時的程序還只是一個普通的可執行文件,在操作系統沒有執行它之前,它只做為一個普通的文件存放在了計算機的外部存儲器上(硬碟),當我們執行了./main之後,操作系統會將main文件的內容載入內存,並為其分配PCB和任務ID號,並為其分配相關數據段內存和代碼段內存,最後操作系統使處理器開始執行此程序的代碼段程序,於是此可執行文件就成為了一個正在運行的進程。

我們再通過一個簡單的操作來測試一下操作系統對可執行程序並行執行過程,我們可以打開兩個可執行的終端窗口,並先後執行兩次./main可執行文件:

我們可以清楚的看到,同一個可執行文件main被執行了兩次,操作系統為其創建了兩個進程,它們的運行過程在操作系統的調度下, 它們在並行的執行程序內容,它們的ID號分為27278和27336:

二、飛控程序創建進程

接下來我們來編寫一個PX4飛控程序的進程,我們首先要在PX4架構中創建一個模塊,創建模塊的過程與創建驅動程序的過程一致。在這裡我們在modules中創建一個更通用的模塊:

1.在cmake/configs/nuttx_px4fmu-v3_default.cmake中加添一個測試模塊process_test:

2.在src/modules中創建一個process_test文件夾,並在其中創建一個CMakeList.txt文件,其內容如下:

3.在src/modules/process_test中創建一個process_test.c文件,並在其中加入以下內容:

之後編譯並運行飛控程序,在nsh shell / console 調試串口中即可進入nsh命令窗口,輸入process_test即可查看到程序的運行結果。

三、後台運行進程

此程序在運行時即佔用nsh shell(本身也是一個進程)的輸入輸出,所以在process_test運行過程中nsh>界面中不能再輸入任何內容的命令,所以我們需要使程序在後台運行在運行過程中不影響nsh shell的正常運行,所以我們需要在process_test_main()函數中加入px4的進程創建函數:

我們再來重新修改一下程序:

重新編譯程序並運行process_test程序在運行過程中即可做為一個單獨進程運行在nsh的後台中,事實上PX4的所有進程都是以這種方式運行的,飛控啟動時所運行的進程都定義在ROMFS/px4fmu_common/init.d/rcS中。

歡迎關注公眾號:編程外星人


推薦閱讀:

TAG:Linux | 編程 |