chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

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

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

3天內不再提示

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

黃工的嵌入式技術圈 ? 來源:黃工的嵌入式技術圈 ? 2020-03-24 13:59 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

Ⅰ、寫在前面

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

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

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

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

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

Ⅱ、本文要點

1.軟件工程源代碼下載

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

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

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

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

2.工程代碼實現(xiàn)功能效果

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

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

MDK-ARM下載、安裝與注冊

建立3個任務:

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

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

應用任務APP_Task2:發(fā)送信號量消息。

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

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

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

【實例類似于同學2給同學1發(fā)紅包,同學2每次發(fā)一元紅包,同學1每打開紅包一次,顯示(打?。┯囝~增加一元】

Ⅲ、源代碼分析

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

1.工程目錄結構

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


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

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

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

2.os_cfg系統(tǒng)配置

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

#define OS_SEM_EN 1u

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

3.兩任務底層代碼

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

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

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

4.“開始”任務

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

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

5.任務1應用代碼

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

6.任務2應用代碼

任務2應用代碼是實現(xiàn)發(fā)送信號量(給任務1)。每按鍵一次,就發(fā)送信號一次。按下按鍵狀態(tài)是LED2處于亮的狀態(tài)(提示按鍵已經(jīng)按下)。

Ⅳ、說明

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

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

更多關于UCOS的文章:

UCOS2_STM32移植詳細過程(匯總)

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

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

    關注

    2305

    文章

    11122

    瀏覽量

    371189
  • 源代碼
    +關注

    關注

    96

    文章

    2953

    瀏覽量

    69663
  • ucos2
    +關注

    關注

    0

    文章

    15

    瀏覽量

    3696
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    什么是嵌入式操作系統(tǒng)?

    定時器,不用自己配置定時器; 多任務通信:提供隊列(Queue)、信號量(Semaphore)、事件組(Event Group)等組件,解決任務間數(shù)據(jù)傳遞和同步問題; 示例:ta
    發(fā)表于 12-09 10:33

    RTOS 必學概念:任務、信號量、隊列次搞懂

    如果你剛接觸RTOS(實時操作系統(tǒng)),很可能會有這樣的困惑:“RTOS和裸機程序到底有什么區(qū)別?”“任務是線程嗎?為什么要分任務?”“信號量和互斥鎖有什么區(qū)別,不都是同步手段嗎?”“隊列是不是就是
    的頭像 發(fā)表于 11-17 10:53 ?196次閱讀
    RTOS 必學概念:<b class='flag-5'>任務</b>、<b class='flag-5'>信號量</b>、隊列<b class='flag-5'>一</b>次搞懂

    Linux進程通信(IPC)全解析:從管道到?Socket,篇講透

    ,Inter-Process Communication) 。 今天我們就來系統(tǒng)梳理?Linux?中最常用的?6?種?IPC?方式,從原理到實例,從流程到適用場景,幫你徹底搞懂進程如何?“對話”。 、管道
    的頭像 發(fā)表于 11-14 21:38 ?1.2w次閱讀
    Linux進程<b class='flag-5'>間</b><b class='flag-5'>通信</b>(IPC)全解析:從管道到?Socket,<b class='flag-5'>一</b>篇講透

    求助,關于RT-Thread 最新版本timer.c rt_timer_check函數(shù)問題求解

    ;gt;parameter);之前,是否要開啟系統(tǒng)中斷,V4.1.1版本保持關閉,v5.1.0版本開啟了中斷: v5.1.0 v4.1.1 我在某個串口任務實現(xiàn)當中,使用了信號量的機制,在串口接收
    發(fā)表于 09-25 07:00

    中斷發(fā)送信號量不能釋放等待信號量的線程是怎么回事?

    uint8_t comm_uart_cmd_buff[MSG_BUFF_LEN]; while (1) { /* 從串口讀取個字節(jié)的數(shù)據(jù),沒有讀到則等待接收信號量 */ if(rt_device_read
    發(fā)表于 09-10 06:28

    為什么無法接收到信號量?

    只有個解析線程負責接收信號量,永久等待的。有別的幾個線程收到數(shù)據(jù)之后會釋放信號量,設備剛開始運行是沒問題的,可是運行十幾個小時之后就無法接收到信號量了,有沒有大佬可以幫忙解決
    發(fā)表于 09-10 06:21

    【RA4L1-SENSOR】05 按鍵實現(xiàn)RTOS任務切換

    ; 配置任務、隊列和信號量 開發(fā)板實體按鍵接在了P000和P001上 在Pins--P0--P000,設置Symbolic Name為KEY1,模式是輸入模式。P001(KEY2)同理。 現(xiàn)在
    發(fā)表于 06-16 22:38

    STM32數(shù)字示波器源碼+數(shù)字信號處理教程、配套實例

    STM32數(shù)字示波器源碼+數(shù)字信號處理教程、配套實例 部分截圖:
    發(fā)表于 05-28 21:25

    【每周推薦】基于STM32開發(fā)項目實例下載(含PCB、原理圖、源碼等)

    1、手機APP遠程控制,智能家居監(jiān)測、智能控制系統(tǒng)(含源碼)手機APP遠程控制,智能家居監(jiān)測、智能控制系統(tǒng)(STM32L4、服務器、安卓源碼)項目實例下載!2、基于STM32藍牙控制小
    的頭像 發(fā)表于 05-27 08:05 ?977次閱讀
    【每周推薦】基于<b class='flag-5'>STM32</b>開發(fā)項目<b class='flag-5'>實例</b>下載(含PCB、原理圖、源碼等)

    每周推薦!基于STM32開發(fā)項目實例下載(含PCB、原理圖、源碼等)

    1、手機APP遠程控制,智能家居監(jiān)測、智能控制系統(tǒng)(含源碼) 手機APP遠程控制,智能家居監(jiān)測、智能控制系統(tǒng)(STM32L4、服務器、安卓源碼) 項目實例下載! 2、基于STM32
    發(fā)表于 05-26 14:01

    嵌入式開發(fā)避坑指南|FreeRTOS的5個\"反直覺\"小技巧

    同步分配堆棧內存 關鍵代碼段用portENTER_CRITICAL()保護,防止中斷搶占 案例:某工業(yè)控制系統(tǒng)因GPS任務搶占溫濕度任務,導致數(shù)據(jù)丟失 技巧3:信號量用錯會\"鎖死\"
    發(fā)表于 03-20 13:57

    FreeRTOS(V9.0)中創(chuàng)建信號量的函數(shù)都沒有被定義,因此用不了,怎么解決

    vSemaphoreCreateBinary()還是計數(shù)信號量的創(chuàng)建函數(shù)xSemaphoreCreateCounting()都沒有被定義過。我定要使用信號量,這怎么解決?
    發(fā)表于 03-13 09:30

    STM32雙核H7核如何通信?

    STM32雙核H7核通信的方法,主要是CM7和CM4之間如何進行數(shù)據(jù)傳遞
    發(fā)表于 03-12 07:34

    基于OpenHarmony標準系統(tǒng)的C++公共基礎類庫案例:Semaphore

    的公共資源變量;創(chuàng)建5個線程,每個線程做5次for循環(huán),for循環(huán)的內容是獲取無名信號量,并修改公共資源變量;(2)有名信號量使用方法定義1個有名信號量,1個供有名
    的頭像 發(fā)表于 02-10 18:08 ?635次閱讀
    基于OpenHarmony標準系統(tǒng)的C++公共基礎類庫案例:Semaphore

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

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