在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

UCOS2_STM32_任務間信號量通信(一)_ 應用實例描述

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

Ⅰ、寫在前面

本文主要講述UCOS2基于STM32硬件平臺下,兩個任務之間利用信號量進行通信實現的方法,具體實現原理將在后面文章講述。

本文主要站在應用的角度來分析信號量通信,與芯片相關的底層這里不過多描述。本文雖然是STM32F1的芯片,但也適合其他芯片的學習(應用層)。

今天提供的工程代碼也適用于STM32其他系列芯片(下載我前面移植好的其他系列工程,替換bsp和app下面相關文件就行。 當然,里面LED、按鍵和串口驅動如果不是對應的引腳,請適當改一下)。

與本文相關的UCOS移植和內核的講述可以進入我微信公眾號“歷史消息”查看。

關于本文的更多詳情請往下看。

Ⅱ、本文要點

1.軟件工程源代碼下載

我將今天所講述內容源代碼經過測試無誤之后上傳至360云盤方便大家下載參考學習。

STM32其他系列也可以下載參考,請看“歷史消息”。

本文源代碼工程下載地址:

https://yunpan.cn/ck5RWT48WcpHj訪問密碼 9017

2.工程代碼實現功能效果

為了方便大家理解上面提供下載的軟件工程源代碼,這里先來講述一下軟件工程實現的功能和效果。

提供下載源代碼是由MDK-ARM V5軟件下運行,如果你沒有安裝MDK-ARM軟件可以參考我的另外一篇文章:

MDK-ARM下載、安裝與注冊

建立3個任務:

開始(主)任務AppTaskStart:主要開始初始化底層及相關代碼;

應用任務APP_Task1:接收信號量消息;

應用任務APP_Task2:發送信號量消息。

信號量事件EventSem_Key:主要用于任務1和任務2之間通信。

任務1接收到信號消息一次串口打印一次計數值(用于記錄按鍵按下次數);

任務2按鍵一次,發送信號量消息一次(按下狀態時LED2會亮);

【實例類似于同學2給同學1發紅包,同學2每次發一元紅包,同學1每打開紅包一次,顯示(打印)余額增加一元】

Ⅲ、源代碼分析

信號量作用和原理那些這里就不再過多用文字描述,我主要結合源代碼工程來描述信號量通信的原理。

1.工程目錄結構

打開下載的源代碼工程可以看見整個工程結構如下圖所示,為了方便理解,我命名的文件名應該算是比較貼合實際意義。


“bsp_task1”和“bsp_task2”:主要是倆任務的底層驅動代碼。如:初始化IO、USART等。我專門將其單獨設立在獨自的文件下,主要是方便理解,同樣也是為了規范代碼工程(建議大家寫代碼命名和文件命名都要按照常規要求來,方便自己理解)。

“app_task1”和“app_task2”:同樣的道理,這里主要是放置任務應用層的源代碼。如:實現按鍵檢測、串口打印數據、發送和接收信號量消息。

“global_variable”:主要是全局變量。由于信號量通信是介于兩個任務之間的一個信號量,因此完全屬于任務1,也不完全屬于任務2,是任務1和任務2共同的變量。因此歸類為全局變量中。

2.os_cfg系統配置

需要使用信號量相關的資源,就需要在“系統配置”中打開“信號量”功能:

#define OS_SEM_EN 1u

(本文主要就是使用了信號量“發送”和“接收”功能,關于信號量其他功能暫時沒有使用到。)

3.兩任務底層代碼

任務底層代碼和我們前面開發裸機程序一樣,就是初始化及與芯片底層相關的代碼。

【注意:LED、按鍵、USART等引腳不對應的就在這里修改】

下面是任務1和任務底層初始化代碼(應該很熟悉)

4.“開始”任務

“開始”任務代碼中包含的信息比較多,大概分為框圖中幾類,具體意思見后面注釋。

【注意:“開始”任務也是一個任務,因此它的任務就是LED1閃爍,以便提示系統在正常運行(1秒變化一次)】

5.任務1應用代碼

任務1應用代碼是實現接收(任務2發送的)信號量。當接收到信號量消息就串口打印數據,每接收一次信號量,計數值就增加一次。

6.任務2應用代碼

任務2應用代碼是實現發送信號量(給任務1)。每按鍵一次,就發送信號一次。按下按鍵狀態是LED2處于亮的狀態(提示按鍵已經按下)。

Ⅳ、說明

本文是偏向應用的代碼,關于信號量如何實現,比較底層的描述我會在后期講述一下。

以上總結僅供參考,若有不對之處,敬請諒解。

更多關于UCOS的文章:

UCOS2_STM32移植詳細過程(匯總)

UCOS2系統內核講述(五)_初始化TCB詳情

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • STM32
    +關注

    關注

    2270

    文章

    10910

    瀏覽量

    356615
  • 源代碼
    +關注

    關注

    96

    文章

    2946

    瀏覽量

    66811
  • ucos2
    +關注

    關注

    0

    文章

    15

    瀏覽量

    3563
收藏 人收藏

    評論

    相關推薦

    使用任務通知提高RTOS應用的效率

    在實時嵌入式系統中,性能和資源效率是決定設計成敗的關鍵因素。傳統的實時操作系統(RTOS)提供了如隊列、信號量和事件組機制,實現任務之間的同步和通信。FreeRTOS/SAFERTOS還提供
    的頭像 發表于 12-27 14:54 ?249次閱讀

    信號的時域波形和頻譜的關系是什么

    信號的時域波形和頻譜的關系是個復雜而深入的話題,涉及到信號處理、系統分析、通信原理等多個領域。 引言 在
    的頭像 發表于 07-15 14:27 ?1042次閱讀

    信號的時域波形和頻譜的關系

    信號的時域波形和頻譜的關系是信號處理領域的核心內容之。本文將從信號的基本概念、時域和頻域的定義、傅里葉變換、時域波形與頻譜的關系、應用
    的頭像 發表于 06-03 09:33 ?1780次閱讀

    在做lwip+ucos+stm32的項目,ping不通是什么原因導致的?

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

    STM32F303 ucos ii任務調度都用什么?

    現在303上用ucos ii跑了兩個任務,個是顯示LCD,個是讀取FRAM。現在發現,若讀FRAM的優先級高,有時LCD會花屏閃,若顯
    發表于 05-14 06:16

    emwin發布信號量ucos的其他任務失敗的原因?

    { OSTaskSemPost( COM_TaskTCB, OS_OPT_POST_NONE, err); } break; 這個是emwin回調函數的部分代碼,下載之后直接進入硬件中斷,如果沒有任務等待這個信號
    發表于 05-11 07:20

    OSSemPend有時不成功的原因?

    過程中,發現正常運行段時間后,任務再也無法Pend成功。 哪位大俠遇見過這種情況,求指點迷津?。?! 信號量創建為: OSSemCreate( UsartOneDmaRecDoneSem, \"URT one dma rec
    發表于 05-11 07:09

    STM32F2使用CubeMX配置了FreeRTOS+HAL庫,,實時的定時器中斷函數被系統滴答時鐘中斷影響了怎么解決?

    最近在用STM32F2 系列 使用CubeMX 配置了FreeRTOS+HAL庫, 使用定時器6輸出個調制的信號方波, 兩個IO口實現,不是個IO口單純輸出的方波, 可是發現總是
    發表于 04-26 08:22

    關于FreeRTOS互斥的用法求解

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

    求助,關于FreeRTOS的相關疑問求解

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

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

    各位大哥,遇到個在FreeRTOS+LWIP使用信號量的問題。 項目工程是通過CubeMX生成的,使用FreeRTOS + LWIP。 簡化代碼,FreeRTOS初始化兩個任務
    發表于 04-19 07:33

    freertos串口接收數據后如何發送給任務?

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

    嵌入式實時操作系統——二值信號量

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

    STM32H747雙核的HSEM運行FreeRtos系統會卡死是怎么回事?

    SemaphoreGiveFromISR就正常。 3。懷疑是FreeRtos問題,有做了實驗,使用了按鍵中斷,中斷優先級和HSEM樣,都是6,在中斷可以里使用SemaphoreGiveFromISR或任務二值信號量,不會
    發表于 03-28 06:32

    基于嵌入式OS的LwIP協議棧

    設計通信協議棧程序,需要具備內存管理、任務管理、進程通信信號量、時鐘、定時處理等功能,從頭開始難度巨大,而且容易出錯。
    發表于 02-03 16:19 ?862次閱讀
    基于嵌入式OS的LwIP協議棧
    主站蜘蛛池模板: 2018天天干天天操| 白浆喷射| 91视频色| 亚洲欧美色图| 国产逼逼视频| 天天干天日| 手机看片1024日韩| 国产小视频免费观看| 3344在线| 亚洲卡一卡2卡三卡4卡国色| 欧美性猛交aa一级| 黄色欧美| 色中色软件| 亚洲精品中文字幕乱码三区一二| 屁股趴过来欠打高h| 亚洲色图欧美在线| 日韩美aaa特级毛片| 网友自拍区一区二区三区| 很黄很暴力 很污秽的小说| 在线播放亚洲视频| 中文字幕不卡在线播放| 午夜伦理片在线观看| 亚洲人成电影院| 日本免费高清| 黄色片啪啪| 午夜国产精品理论片久久影院| 久久午夜综合久久| 2021天天操| 亚洲无色| 免费爱爱网址| 新版天堂资源中文8在线| 亚洲黄色小说网站| 理论毛片| 亚洲精品中文字幕乱码三区一二| 亚洲精品成人a在线观看| 欧美日韩无| 欲色淫香| 天天操天天插| 黄色在线观看网址| 一级伦奸视频| 久久精品国产精品亚洲毛片|