程式設計師的第一課
相信絕大多數的程式設計師對“hello world”非常有感覺,這是大多數程式設計師的第一課;那麼對於一個硬體工程師來說,說起硬體使用的第一課就是“點燈”,或者是跑馬燈。在上一篇筆記中,我們已經讓RT-Thread系統成功在板卡上面執行起來了,那麼作為嵌入式系統開發的第一課,這一篇我們就來寫RT-Thread上面的第一個應用“hello world”和“點燈”吧。
認識系統應用介面層竟然我們運用到了嵌入式系統來進行開發,那麼我們就需要先熟悉好系統為我們準備好的應用介面層,這樣能夠大大的提高我們應用的可移植性,例如在STM32上面寫好的應用,如果嚴格使用系統介面層來開發,那麼基本得以直接執行在NXP或其他微控制器執行的嵌入式系統上面。我們把該應用單獨編寫成為一個檔案,那麼在不同的平臺上面使用應用就把這個檔案新增進去,就像手機安裝APP一樣的方便快捷。
手機APP
首先我們來拆分應用需求,第一個是“hello world”,我們需要建立一個任務,然後在這個任務裡面通過串列埠來迴圈列印“hello world”這個字串,然後我們再建立一個任務,在這個裡面實現迴圈“點燈”,那麼我們首先要來了解的就是如何通過系統的任務函式來建立任務。
在RT-Thread文件中心中的執行緒管理這一節中有系統關於執行緒介面函式使用的詳細介紹,我在這裡就簡單明了的說一下好了,我們在前面提到的兩個任務,在RT-Thread系統中被稱之為執行緒,也就是我們需要建立兩個執行緒實現這兩個任務的功能就可以。所以我們要實現需求,只需要用到一個函式就可以,那就是建立執行緒函式rt_thread_create(),具體的函式入下圖所示
我們可以看到這個函式裡面有幾個引數,他們的具體作用如下
函式引數說明
了解到這裡,我們就可以來建立我們的兩個任務了,為了讓大家更加貼近系統函式,我們後面就把任務稱之為執行緒,首先我們需要先定義下一執行緒名稱,執行緒的優先順序和執行緒堆疊大小(使用的記憶體)
下面我們就需要建立兩個執行緒的函式,我們需要實現的功能就分別在這兩個執行緒裡面實現
準備好執行緒相關的函式可引數,我們就可以使用前面提到的rt_thread_create()這個函式來建立我們需要的兩個執行緒
可以看到,我們新建立的一個函式,在這個函式裡面呼叫了rt_thread_create()這個函式來建立我們的執行緒,只要記憶體充足,一般都是能夠建立成功,這時候我們上面寫的兩個執行緒執行函式就會被加入到RT-Thread系統排程器中管理,進行排程。
充實執行緒內容很多朋友應該發現了,上面我們建立的兩個執行緒函式是一個空的函式,裡面什麼都沒有,自然也實現不了我們需要的功能,那我們現在要做的就是線上程裡面加入我們需要實現的功能。現在有需要回到我們的需求當中去分析,第一個“hello world”應用中,就是需要使用串列埠來定時列印“hello world”,那麼我們就需要用到RT-Thread當中的UART裝置,而第二個“點燈”應用呢,則是需要使用到微控制器的IO口,也就是需要用到RT-Thread當中的PIN裝置。
我們走老路數,先來認識一下RT-Thread關於UART裝置和PIN裝置的介面函式,首先是UART裝置的相關函式
下面是PIN裝置相關函式
根據我們“hello world”應用,我們需要用到的函式其實只要三個就可以了rt_device_find(),rt_device_open(),rt_device_write(),我們換成大白話就是,首先要找到裝置,然後開啟裝置,接著往裝置裡面寫入資料就完成我們需求
我們知道了要使用的介面函式,下面我們就來了解下這三個函式如何使用
了解函式如何使用,那麼我們就來實操一下,根據函式的需求,我們要先來下裝置名稱和串列埠裝置的控制代碼,這裡需要注意的是,裝置名稱要對應上系統上已經註冊的裝置名字,如果你的裝置在系統註冊的名字是uart3,那麼名稱就應該是uart3。
補充完成後的“hello world”應用的執行緒執行函式
“hello world”應用執行緒
完成了“hello world”應用,我們就再接再厲來完成“點燈”應用吧,根據“點燈”應用需求,我們需要用到的函式rt_pin_mode(),rt_pin_write(),這兩個函式,也就是設定好PIN的工作模式,然後往這個裝置寫資料,只不過這個資料是1或這0。
我們知道了要使用的介面函式,下面我們就來了解下這兩個函式如何使用
這裡需要說明下,RT-Thread系統驅動層是根據微控制器引腳的編號來定義PIN的編號,所以這裡的編號直接引用微控制器引腳編號就好了,例如,微控制器1號腳,那麼PIN的編號就是1。為了方便閱讀,我們還是先來頂一下引腳編號的名字
補充完成後的“點燈”應用執行緒執行函式
互動問答:你覺得RT-Thread系統應用層的使用是否方便,上手難度如何?