0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

UCOS2_STM32_任務(wù)間信號(hào)量通信(一)_ 應(yīng)用實(shí)例描述

黃工的嵌入式技術(shù)圈 ? 來源:黃工的嵌入式技術(shù)圈 ? 2020-03-24 13:59 ? 次閱讀

Ⅰ、寫在前面

本文主要講述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詳情

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • STM32
    +關(guān)注

    關(guān)注

    2264

    文章

    10854

    瀏覽量

    354288
  • 源代碼
    +關(guān)注

    關(guān)注

    96

    文章

    2943

    瀏覽量

    66617
  • ucos2
    +關(guān)注

    關(guān)注

    0

    文章

    15

    瀏覽量

    3550
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    信號(hào)的時(shí)域波形和頻譜的關(guān)系是什么

    信號(hào)的時(shí)域波形和頻譜的關(guān)系是個(gè)復(fù)雜而深入的話題,涉及到信號(hào)處理、系統(tǒng)分析、通信原理等多個(gè)領(lǐng)域。 引言 在
    的頭像 發(fā)表于 07-15 14:27 ?686次閱讀

    信號(hào)的時(shí)域波形和頻譜的關(guān)系

    信號(hào)的時(shí)域波形和頻譜的關(guān)系是信號(hào)處理領(lǐng)域的核心內(nèi)容之。本文將從信號(hào)的基本概念、時(shí)域和頻域的定義、傅里葉變換、時(shí)域波形與頻譜的關(guān)系、應(yīng)用
    的頭像 發(fā)表于 06-03 09:33 ?1202次閱讀

    在做lwip+ucos+stm32的項(xiàng)目,ping不通是什么原因?qū)е碌模?/a>

    ethernetif_input發(fā)信號(hào)量,tcp_thread完成發(fā)送任務(wù)?,F(xiàn)在的ethernetif代碼修改了,參考了焦海波的指南和freertos的例子,但是ping不通;
    發(fā)表于 05-16 06:28

    STM32F303 ucos ii任務(wù)調(diào)度都用什么?

    現(xiàn)在303上用ucos ii跑了兩個(gè)任務(wù),個(gè)是顯示LCD,個(gè)是讀取FRAM?,F(xiàn)在發(fā)現(xiàn),若讀FRAM的優(yōu)先級(jí)高,有時(shí)LCD會(huì)花屏閃,若顯
    發(fā)表于 05-14 06:16

    emwin發(fā)布信號(hào)量ucos的其他任務(wù)失敗的原因?

    { OSTaskSemPost( COM_TaskTCB, OS_OPT_POST_NONE, err); } break; 這個(gè)是emwin回調(diào)函數(shù)的部分代碼,下載之后直接進(jìn)入硬件中斷,如果沒有任務(wù)等待這個(gè)信號(hào)
    發(fā)表于 05-11 07:20

    OSSemPend有時(shí)不成功的原因?

    過程中,發(fā)現(xiàn)正常運(yùn)行段時(shí)間后,任務(wù)再也無法Pend成功。 哪位大俠遇見過這種情況,求指點(diǎn)迷津!?。? 信號(hào)量創(chuàng)建為: OSSemCreate( UsartOneDmaRecDoneSem, \"URT one dma rec
    發(fā)表于 05-11 07:09

    關(guān)于FreeRTOS互斥的用法求解

    對(duì)于串口發(fā)送,我們都普遍用中斷方式發(fā)送, 可是在配合互斥的時(shí)候會(huì)遇到些問題, 互斥的使用 必須在同個(gè)任務(wù)中 占用和釋放, 我目前的做法是用二值
    發(fā)表于 04-24 08:03

    求助,關(guān)于FreeRTOS的相關(guān)疑問求解

    1.最近在學(xué)習(xí)FreeRTOS(stm32下),雖然好像知道了隊(duì)列和信號(hào)量是用來做任務(wù)之間的通信的,但是不太理解為什么要用這些東西,我覺得好像用rtos的隊(duì)列和
    發(fā)表于 04-24 07:08

    STM32F107+CubeMX+FreeRTOS+LWIP連接成功后,信號(hào)量無法使用怎么解決?

    各位大哥,遇到個(gè)在FreeRTOS+LWIP使用信號(hào)量的問題。 項(xiàng)目工程是通過CubeMX生成的,使用FreeRTOS + LWIP。 簡化代碼,F(xiàn)reeRTOS初始化兩個(gè)任務(wù),個(gè)
    發(fā)表于 04-19 07:33

    freertos串口接收數(shù)據(jù)后如何發(fā)送給任務(wù)?

    最大長度? 如果用二值信號(hào)量,是不是就等于是中斷程序接收完后發(fā)送信號(hào)量通知任務(wù)處理數(shù)組?這樣的話,在任務(wù)處理過程中,串口又接收到新的數(shù)據(jù)怎么辦? 其他還有什么辦法呢?
    發(fā)表于 04-18 06:36

    嵌入式實(shí)時(shí)操作系統(tǒng)——二值信號(hào)量

    當(dāng)用戶需要使用停車資源時(shí),它靠近屏障并按下請(qǐng)求按鈕,在信號(hào)量術(shù)語中,該行為被定義為信號(hào)等待(wait)操作。由于資源處于空閑狀態(tài),故服務(wù)員抬起屏障并回答可以通過, 用戶隨即進(jìn)入保護(hù)區(qū)域,然后屏障關(guān)閉。
    發(fā)表于 04-09 14:44 ?601次閱讀
    嵌入式實(shí)時(shí)操作系統(tǒng)——二值<b class='flag-5'>信號(hào)量</b>

    STM32H747雙核的HSEM運(yùn)行FreeRtos系統(tǒng)會(huì)卡死是怎么回事?

    SemaphoreGiveFromISR就正常。 3。懷疑是FreeRtos問題,有做了實(shí)驗(yàn),使用了按鍵中斷,中斷優(yōu)先級(jí)和HSEM樣,都是6,在中斷可以里使用SemaphoreGiveFromISR或任務(wù)二值信號(hào)量,不會(huì)
    發(fā)表于 03-28 06:32

    基于嵌入式OS的LwIP協(xié)議棧

    設(shè)計(jì)通信協(xié)議棧程序,需要具備內(nèi)存管理、任務(wù)管理、進(jìn)程通信信號(hào)量、時(shí)鐘、定時(shí)處理等功能,從頭開始難度巨大,而且容易出錯(cuò)。
    發(fā)表于 02-03 16:19 ?751次閱讀
    基于嵌入式OS的LwIP協(xié)議棧

    stm32移植ucos iii教程

    μC/OS-III是個(gè)實(shí)時(shí)操作系統(tǒng),廣泛應(yīng)用于嵌入式系統(tǒng)開發(fā)中。在STM32系列微控制器上移植μC/OS-III可以充分發(fā)揮其實(shí)時(shí)性和多任務(wù)處理能力。本篇文章將為您提供個(gè)詳實(shí)、細(xì)致
    的頭像 發(fā)表于 01-02 16:29 ?1319次閱讀

    FreeRTOS信號(hào)量的使用與實(shí)例

    在嵌入式系統(tǒng)中,任務(wù)管理是個(gè)重要的部分,它涉及到任務(wù)之間的通信和同步,信號(hào)量,隊(duì)列,互斥鎖和事件標(biāo)志組等概念。本文將以 FreeRTOS
    的頭像 發(fā)表于 12-12 15:25 ?2256次閱讀