一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

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

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

3天內不再提示

韋東山freeRTOS系列教程之同步互斥與通信(4)

嵌入式Linux那些事 ? 2021-12-13 14:31 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

文章目錄

  • 系列教程總目錄
  • 概述
  • 4.1 同步與互斥的概念
  • 4.2 同步與互斥并不簡單
  • 4.3 各類方法的對比

需要獲取更好閱讀體驗的同學,請訪問我專門設立的站點查看,地址:http://rtos.100ask.net/

系列教程總目錄

本教程連載中,篇章會比較多,為方便同學們閱讀,點擊這里可以查看文章的 目錄列表,目錄列表頁面地址:https://blog.csdn.net/thisway_diy/article/details/121399484

概述

本章是概述性的內容。可以把多任務系統(tǒng)當做一個團隊,里面的每一個任務就相當于團隊里的一個人。團隊成員之間要協(xié)調工作進度(同步)、爭用會議室(互斥)、溝通(通信)。多任務系統(tǒng)中所涉及的概念,都可以在現(xiàn)實生活中找到例子。

各類RTOS都會涉及這些概念:任務通知(task notification)、隊列(queue)、事件組(event group)、信號量(semaphoe)、互斥量(mutex)等。我們先站在更高角度來講解這些概念。

4.1 同步與互斥的概念

一句話理解同步與互斥:我等你用完廁所,我再用廁所。

  • 什么叫同步?就是:哎哎哎,我正在用廁所,你等會。
  • 什么叫互斥?就是:哎哎哎,我正在用廁所,你不能進來。

同步與互斥經(jīng)常放在一起講,是因為它們之的關系很大,“互斥”操作可以使用“同步”來實現(xiàn)。我“等”你用完廁所,我再用廁所。這不就是用“同步”來實現(xiàn)“互斥”嗎?

再舉一個例子。在團隊活動里,同事A先寫完報表,經(jīng)理B才能拿去向領導匯報。經(jīng)理B必須等同事A完成報表,AB之間有依賴,B必須放慢腳步,被稱為同步。在團隊活動中,同事A已經(jīng)使用會議室了,經(jīng)理B也想使用,即使經(jīng)理B是領導,他也得等著,這就叫互斥。經(jīng)理B跟同事A說:你用完會議室就提醒我。這就是使用"同步"來實現(xiàn)"互斥"。

有時候看代碼更容易理解,偽代碼如下:

01 void  搶廁所(void)
02 {
03    if (有人在用) 我瞇一會;
04    用廁所;
05    喂,醒醒,有人要用廁所嗎;
06 }

假設有A、B兩人早起搶廁所,A先行一步占用了;B慢了一步,于是就瞇一會;當A用完后叫醒B,B也就愉快地上廁所了。
在這個過程中,A、B是互斥地訪問“廁所”,“廁所”被稱之為臨界資源。我們使用了“休眠-喚醒”的同步機制實現(xiàn)了“臨界資源”的“互斥訪問”。

同一時間只能有一個人使用的資源,被稱為臨界資源。比如任務A、B都要使用串口來打印,串口就是臨界資源。如果A、B同時使用串口,那么打印出來的信息就是A、B混雜,無法分辨。所以使用串口時,應該是這樣:A用完,B再用;B用完,A再用。

4.2 同步與互斥并不簡單

4.3 各類方法的對比

能實現(xiàn)同步、互斥的內核方法有:任務通知(task notification)、隊列(queue)、事件組(event group)、信號量(semaphoe)、互斥量(mutex)。

它們都有類似的操作方法:獲取/釋放、阻塞/喚醒、超時。比如:

  • A獲取資源,用完后A釋放資源
  • A獲取不到資源則阻塞,B釋放資源并把A喚醒
  • A獲取不到資源則阻塞,并定個鬧鐘;A要么超時返回,要么在這段時間內因為B釋放資源而被喚醒。

這些內核對象五花八門,記不住怎么辦?我也記不住,通過對比的方法來區(qū)分它們。

  • 能否傳信息?只能傳遞狀態(tài)?
  • 為眾生?只為你?
  • 我生產(chǎn),你們消費?
  • 我上鎖,只能由我開鎖
內核對象 生產(chǎn)者 消費者 數(shù)據(jù)/狀態(tài) 說明
隊列 ALL ALL 數(shù)據(jù):若干個數(shù)據(jù)
誰都可以往隊列里扔數(shù)據(jù),
誰都可以從隊列里讀數(shù)據(jù)
用來傳遞數(shù)據(jù),
發(fā)送者、接收者無限制,
一個數(shù)據(jù)只能喚醒一個接收者
事件組 ALL ALL 多個位:或、與
誰都可以設置(生產(chǎn))多個位,
誰都可以等待某個位、若干個位
用來傳遞事件,
可以是N個事件,
發(fā)送者、接受者無限制,
可以喚醒多個接收者:像廣播
信號量 ALL ALL 數(shù)量:0~n
誰都可以增加一個數(shù)量,
誰都可消耗一個數(shù)量
用來維持資源的個數(shù),
生產(chǎn)者、消費者無限制,
1個資源只能喚醒1個接收者
任務通知 ALL 只有我 數(shù)據(jù)、狀態(tài)都可以傳輸,
使用任務通知時,
必須指定接受者
N對1的關系:
發(fā)送者無限制,
接收者只能是這個任務
互斥量 只能A開鎖 A上鎖 位:0、1
我上鎖:1變?yōu)?,
只能由我開鎖:0變?yōu)?
就像一個空廁所,
誰使用誰上鎖,
也只能由他開鎖

使用圖形對比如下:

  • 隊列:
    • 里面可以放任意數(shù)據(jù),可以放多個數(shù)據(jù)
    • 任務、ISR都可以放入數(shù)據(jù);任務、ISR都可以從中讀出數(shù)據(jù)
  • 事件組:
    • 一個事件用一bit表示,1表示事件發(fā)生了,0表示事件沒發(fā)生
    • 可以用來表示事件、事件的組合發(fā)生了,不能傳遞數(shù)據(jù)
    • 有廣播效果:事件或事件的組合發(fā)生了,等待它的多個任務都會被喚醒
  • 信號量:
    • 核心是"計數(shù)值"
    • 任務、ISR釋放信號量時讓計數(shù)值加1
    • 任務、ISR獲得信號量時,讓計數(shù)值減1
  • 任務通知:
    • 核心是任務的TCB里的數(shù)值
    • 會被覆蓋
    • 發(fā)通知給誰?必須指定接收任務
    • 只能由接收任務本身獲取該通知
  • 互斥量:
    • 數(shù)值只有0或1
    • 誰獲得互斥量,就必須由誰釋放同一個互斥量
在這里插入圖片描述
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 通信
    +關注

    關注

    18

    文章

    6205

    瀏覽量

    137753
  • RTOS
    +關注

    關注

    24

    文章

    849

    瀏覽量

    121113
  • FreeRTOS
    +關注

    關注

    12

    文章

    492

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    東山freeRTOS系列程之信號量(6)

    文章目錄 系列教程總目錄 概述 6.1 信號量的特性 6.1.1 信號量的常規(guī)操作 6.1.2 信號量跟隊列的對比 6.1.3 兩種信號量的對比 6.2 信號量函數(shù) 6.2.1 創(chuàng)建 6.2.2
    的頭像 發(fā)表于 12-13 14:35 ?5608次閱讀
    <b class='flag-5'>韋</b><b class='flag-5'>東山</b><b class='flag-5'>freeRTOS</b><b class='flag-5'>系列</b>教<b class='flag-5'>程之</b>信號量(6)

    東山freeRTOS系列程之隊列(queue)(5)

    文章目錄 系列教程總目錄 概述 5.1 隊列的特性 5.1.1 常規(guī)操作 5.1.2 傳輸數(shù)據(jù)的兩種方法 5.1.3 隊列的阻塞訪問 5.2 隊列函數(shù) 5.2.1 創(chuàng)建 5.2.2 復位 5.2.3
    的頭像 發(fā)表于 12-13 14:33 ?6281次閱讀
    <b class='flag-5'>韋</b><b class='flag-5'>東山</b><b class='flag-5'>freeRTOS</b><b class='flag-5'>系列</b>教<b class='flag-5'>程之</b>隊列(queue)(5)

    東山freeRTOS系列程之互斥量(mutex)(7)

    文章目錄 系列教程總目錄 概述 7.1 互斥量的使用場合 7.2 互斥量函數(shù) 7.2.1 創(chuàng)建 7.2.2 其他函數(shù) 7.3 示例15: 互斥量基本使用 7.4 示例16: 誰上鎖就由
    的頭像 發(fā)表于 12-13 14:38 ?8093次閱讀
    <b class='flag-5'>韋</b><b class='flag-5'>東山</b><b class='flag-5'>freeRTOS</b><b class='flag-5'>系列</b>教<b class='flag-5'>程之</b><b class='flag-5'>互斥</b>量(mutex)(7)

    基于FreeRTOS的STM32F103系統(tǒng)—隊列

    FreeRTOS中,隊列是實現(xiàn)任務之間同步、互斥通信的一種重要方法(其他的實現(xiàn)方法有:任務通知、事件組、信號量、互斥量)。
    的頭像 發(fā)表于 11-10 11:37 ?1430次閱讀
    基于<b class='flag-5'>FreeRTOS</b>的STM32F103系統(tǒng)—隊列

    東山linux視頻

    東山linux視頻主要內容包括:uboot、裸機、文件系統(tǒng)、驅動初步,又需要的可以下載看看東山的視頻還是很不錯的,可惜沒有找到后兩期的。【整理】
    發(fā)表于 12-21 23:49

    轉:第23章 FreeRTOS互斥信號量

    。 FreeRTOS互斥信號量的源碼實現(xiàn)是基于消息隊列實現(xiàn)的。本章教程配套的例子含Cortex-M3內核的STM32F103和Cortex-M4內核的STM32F407以及F429。23.1
    發(fā)表于 09-06 14:58

    多線程同步互斥有幾種實現(xiàn)方法

    線程同步是指線程之間所具有的一種制約關系,一個線程的執(zhí)行依賴另一個線程的消息,當它沒有得到另一個線程的消息時應等待,直到消息到達時才被喚醒。線程互斥是指對于共享的進程系統(tǒng)資源,在各單個線程訪問時的排
    發(fā)表于 08-05 06:06

    同步互斥通信相關資料下載

    慕課電子科技大學.嵌入式系統(tǒng).第八章.同步互斥通信.異步信號和管道0 目錄8 同步互斥通信8
    發(fā)表于 12-22 06:37

    東山freeRTOS系列教程:入門文檔教程+進階視頻教程

    文章目錄 學前知識普及 初級文檔教程 進階視頻教程 進階一:FreeRTOS的內部機制 進階二:深入理解FreeRTOS隊列之隊列實戰(zhàn) 進階三:RTOS商業(yè)產(chǎn)品案例源碼講解 學前知識普及 對于
    發(fā)表于 11-29 16:36 ?2596次閱讀
    <b class='flag-5'>韋</b><b class='flag-5'>東山</b><b class='flag-5'>freeRTOS</b><b class='flag-5'>系列</b>教程:入門文檔教程+進階視頻教程

    東山freeRTOS程之FreeRTOS概述與體驗(1)

    文章目錄 教程目錄 1.1 FreeRTOS目錄結構 1.1 FreeRTOS目錄結構 1.2 核心文件 1.3 移植時涉及的文件 1.4 頭文件相關 1.4.1 頭文件目錄 1.4.2 頭文件
    發(fā)表于 11-29 16:56 ?2437次閱讀
    <b class='flag-5'>韋</b><b class='flag-5'>東山</b><b class='flag-5'>freeRTOS</b>教<b class='flag-5'>程之</b><b class='flag-5'>FreeRTOS</b>概述與體驗(1)

    東山freeRTOS系列程之內存管理(2)

    文章目錄 教程目錄 2.1 為什么要自己實現(xiàn)內存管理 2.2 FreeRTOS的5種內存管理方法 2.2.1 Heap_1 2.2.2 Heap_2 2.2.3 Heap_3 2.2.4
    發(fā)表于 11-29 16:58 ?1236次閱讀
    <b class='flag-5'>韋</b><b class='flag-5'>東山</b><b class='flag-5'>freeRTOS</b><b class='flag-5'>系列</b>教<b class='flag-5'>程之</b>內存管理(2)

    東山freeRTOS系列程之任務管理(3)

    文章目錄 系列教程總目錄 概述 3.1 基本概念 3.2 任務創(chuàng)建與刪除 3.2.1 什么是任務 3.2.2 創(chuàng)建任務 3.2.3 示例1: 創(chuàng)建任務 3.2.4 示例2: 使用任務參數(shù) 3.2.5
    發(fā)表于 11-29 17:00 ?1398次閱讀
    <b class='flag-5'>韋</b><b class='flag-5'>東山</b><b class='flag-5'>freeRTOS</b><b class='flag-5'>系列</b>教<b class='flag-5'>程之</b>任務管理(3)

    東山嵌入式Linux學習——012 按鍵中斷

    東山嵌入式Linux學習——012 按鍵中斷
    發(fā)表于 12-04 17:36 ?10次下載
    <b class='flag-5'>韋</b><b class='flag-5'>東山</b>嵌入式Linux學習——012 按鍵中斷

    FreeRTOS 隊列 信號量 互斥

    文章目錄前言Queue 隊列semaphore 信號量Mutex 互斥量微信公眾號前言FreeRTOS STM32CubeMX配置 內存管理 任務管理上節(jié)介紹了用STM32CubeMX生成帶
    發(fā)表于 12-09 09:51 ?0次下載
    <b class='flag-5'>FreeRTOS</b> 隊列 信號量 <b class='flag-5'>互斥</b>量

    FreeRTOS的二值信號量

    FreeRTOS中的信號量是一種任務間通信的方式,信號量包括:二值信號量、互斥信號量、計數(shù)信號量,本次實驗只使用二值信號量。信號量用于任務間的同步,
    的頭像 發(fā)表于 02-10 15:07 ?1772次閱讀