Ⅰ、寫在前面
本文主要講述UCOS2基于STM32硬件平臺(tái)下,兩個(gè)任務(wù)之間利用信號(hào)量進(jìn)行通信實(shí)現(xiàn)的方法,具體實(shí)現(xiàn)原理將在后面文章講述。
本文主要站在應(yīng)用的角度來分析信號(hào)量通信,與芯片相關(guān)的底層這里不過多描述。本文雖然是STM32F1的芯片,但也適合其他芯片的學(xué)習(xí)(應(yīng)用層)。
今天提供的工程代碼也適用于STM32其他系列芯片(下載我前面移植好的其他系列工程,替換bsp和app下面相關(guān)文件就行。 當(dāng)然,里面LED、按鍵和串口驅(qū)動(dòng)如果不是對(duì)應(yīng)的引腳,請(qǐng)適當(dāng)改一下)。
與本文相關(guān)的UCOS移植和內(nèi)核的講述可以進(jìn)入我微信公眾號(hào)“歷史消息”查看。
關(guān)于本文的更多詳情請(qǐng)往下看。
Ⅱ、本文要點(diǎn)
1.軟件工程源代碼下載
我將今天所講述內(nèi)容源代碼經(jīng)過測試無誤之后上傳至360云盤方便大家下載參考學(xué)習(xí)。
STM32其他系列也可以下載參考,請(qǐng)看“歷史消息”。
本文源代碼工程下載地址:
https://yunpan.cn/ck5RWT48WcpHj訪問密碼 9017
2.工程代碼實(shí)現(xiàn)功能效果
為了方便大家理解上面提供下載的軟件工程源代碼,這里先來講述一下軟件工程實(shí)現(xiàn)的功能和效果。
提供下載源代碼是由MDK-ARM V5軟件下運(yùn)行,如果你沒有安裝MDK-ARM軟件可以參考我的另外一篇文章:
MDK-ARM下載、安裝與注冊(cè)
建立3個(gè)任務(wù):
開始(主)任務(wù)AppTaskStart:主要開始初始化底層及相關(guān)代碼;
應(yīng)用任務(wù)APP_Task1:接收信號(hào)量消息;
應(yīng)用任務(wù)APP_Task2:發(fā)送信號(hào)量消息。
信號(hào)量事件EventSem_Key:主要用于任務(wù)1和任務(wù)2之間通信。
任務(wù)1接收到信號(hào)消息一次串口打印一次計(jì)數(shù)值(用于記錄按鍵按下次數(shù));
任務(wù)2按鍵一次,發(fā)送信號(hào)量消息一次(按下狀態(tài)時(shí)LED2會(huì)亮);
【實(shí)例類似于同學(xué)2給同學(xué)1發(fā)紅包,同學(xué)2每次發(fā)一元紅包,同學(xué)1每打開紅包一次,顯示(打?。┯囝~增加一元】
Ⅲ、源代碼分析
信號(hào)量作用和原理那些這里就不再過多用文字描述,我主要結(jié)合源代碼工程來描述信號(hào)量通信的原理。
1.工程目錄結(jié)構(gòu)
打開下載的源代碼工程可以看見整個(gè)工程結(jié)構(gòu)如下圖所示,為了方便理解,我命名的文件名應(yīng)該算是比較貼合實(shí)際意義。
“bsp_task1”和“bsp_task2”:主要是倆任務(wù)的底層驅(qū)動(dòng)代碼。如:初始化IO、USART等。我專門將其單獨(dú)設(shè)立在獨(dú)自的文件下,主要是方便理解,同樣也是為了規(guī)范代碼工程(建議大家寫代碼命名和文件命名都要按照常規(guī)要求來,方便自己理解)。
“app_task1”和“app_task2”:同樣的道理,這里主要是放置任務(wù)應(yīng)用層的源代碼。如:實(shí)現(xiàn)按鍵檢測、串口打印數(shù)據(jù)、發(fā)送和接收信號(hào)量消息。
“global_variable”:主要是全局變量。由于信號(hào)量通信是介于兩個(gè)任務(wù)之間的一個(gè)信號(hào)量,因此完全屬于任務(wù)1,也不完全屬于任務(wù)2,是任務(wù)1和任務(wù)2共同的變量。因此歸類為全局變量中。
2.os_cfg系統(tǒng)配置
需要使用信號(hào)量相關(guān)的資源,就需要在“系統(tǒng)配置”中打開“信號(hào)量”功能:
#define OS_SEM_EN 1u
(本文主要就是使用了信號(hào)量“發(fā)送”和“接收”功能,關(guān)于信號(hào)量其他功能暫時(shí)沒有使用到。)
3.兩任務(wù)底層代碼
任務(wù)底層代碼和我們前面開發(fā)裸機(jī)程序一樣,就是初始化及與芯片底層相關(guān)的代碼。
【注意:LED、按鍵、USART等引腳不對(duì)應(yīng)的就在這里修改】
下面是任務(wù)1和任務(wù)底層初始化代碼(應(yīng)該很熟悉)
4.“開始”任務(wù)
“開始”任務(wù)代碼中包含的信息比較多,大概分為框圖中幾類,具體意思見后面注釋。
【注意:“開始”任務(wù)也是一個(gè)任務(wù),因此它的任務(wù)就是LED1閃爍,以便提示系統(tǒng)在正常運(yùn)行(1秒變化一次)】
5.任務(wù)1應(yīng)用代碼
任務(wù)1應(yīng)用代碼是實(shí)現(xiàn)接收(任務(wù)2發(fā)送的)信號(hào)量。當(dāng)接收到信號(hào)量消息就串口打印數(shù)據(jù),每接收一次信號(hào)量,計(jì)數(shù)值就增加一次。
6.任務(wù)2應(yīng)用代碼
任務(wù)2應(yīng)用代碼是實(shí)現(xiàn)發(fā)送信號(hào)量(給任務(wù)1)。每按鍵一次,就發(fā)送信號(hào)一次。按下按鍵狀態(tài)是LED2處于亮的狀態(tài)(提示按鍵已經(jīng)按下)。
Ⅳ、說明
本文是偏向應(yīng)用的代碼,關(guān)于信號(hào)量如何實(shí)現(xiàn),比較底層的描述我會(huì)在后期講述一下。
以上總結(jié)僅供參考,若有不對(duì)之處,敬請(qǐng)諒解。
更多關(guān)于UCOS的文章:
UCOS2_STM32移植詳細(xì)過程(匯總)
UCOS2系統(tǒng)內(nèi)核講述(五)_初始化TCB詳情
-
STM32
+關(guān)注
關(guān)注
2264文章
10854瀏覽量
354288 -
源代碼
+關(guān)注
關(guān)注
96文章
2943瀏覽量
66617 -
ucos2
+關(guān)注
關(guān)注
0文章
15瀏覽量
3550
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論