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

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

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

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

Semaphore信號(hào)量概念及其介紹

冬至子 ? 來(lái)源:ITRelief ? 作者:Sachefgh Xu ? 2023-07-25 15:40 ? 次閱讀

信號(hào)量即Semaphore。信號(hào)量主要用于控制和保護(hù)任務(wù)對(duì)特定資源的訪問(wèn)。FreeRTOS的信號(hào)量分為二值信號(hào)量、計(jì)數(shù)型信號(hào)量和互斥信號(hào)量。其中互斥信號(hào)量即Mutex在CMSIS API中被獨(dú)立;本文主要講解二值信號(hào)量和計(jì)數(shù)型信號(hào)量。

在FreeRTOS中,二值信號(hào)量和計(jì)數(shù)信號(hào)量在創(chuàng)建方式和功能上沒(méi)有差異,兩者區(qū)別僅為二值信號(hào)量token數(shù)為1;而計(jì)數(shù)信號(hào)量token>1。

圖示為CMSIS-RTOS的信號(hào)量抽象原理圖。系統(tǒng)創(chuàng)建信號(hào)量,一并指定信號(hào)量?jī)?nèi)token(object)數(shù)量。線程(任務(wù))可進(jìn)行拿取/放入token的操作。

①放入token:線程可以向信號(hào)量中放入token。調(diào)用一次相應(yīng)函數(shù)即放入一個(gè)。若當(dāng)前信號(hào)量已滿則報(bào)錯(cuò)。

②拿取token:   線程向信號(hào)量中拿取token。和消息隊(duì)列一樣,取操作可以設(shè)置阻塞超時(shí)時(shí)間。當(dāng)消息量中無(wú)token時(shí),線程進(jìn)入**BLOCK**狀態(tài)等待消息量被放入token。**在此期間當(dāng)任務(wù)檢測(cè)到消息量放入token時(shí),將自動(dòng)由****BLOCK**態(tài)轉(zhuǎn)移為**READY**態(tài)。當(dāng)?shù)却臅r(shí)間超過(guò)了指定的阻塞時(shí)間,即使隊(duì)列中尚無(wú)數(shù)據(jù),任務(wù)也會(huì)自動(dòng)從阻塞態(tài)轉(zhuǎn)移為**READY**態(tài)。此時(shí)程序會(huì)返回**osErrorTimeout**錯(cuò)誤。若沒(méi)有設(shè)置**阻塞超時(shí)**且參數(shù)正確,返回**osErrorResource**錯(cuò)誤**。**
  • Semaphore APIs

①創(chuàng)建信號(hào)量

可以通過(guò)函數(shù) **osSemaphoreNew() **創(chuàng)建信號(hào)量。在創(chuàng)建時(shí),可以選擇信號(hào)量可容納token的數(shù)量、初始token數(shù); 并且可以傳入配置結(jié)構(gòu)體。當(dāng)創(chuàng)建失敗時(shí)返回NULL。

當(dāng)max_count為1時(shí),將創(chuàng)建二值信號(hào)量。

osSemaphoreId_t osSemaphoreNew (uint32_t max_count, uint32_t initial_count, const osSemaphoreAttr_t *attr);/*
@param:   max_count        -信號(hào)量可容納token的數(shù)量
          initial_count    -信號(hào)量初始時(shí)刻含有的token數(shù)量;initial_count<=max_count
          *attr            -配置結(jié)構(gòu)體
@retval    -信號(hào)量ID(句柄);若創(chuàng)建失敗返回NULL
*/

②獲取信號(hào)量中token 【可在中斷中使用】

※當(dāng)在中斷中使用該函數(shù)時(shí),阻塞延時(shí)時(shí)間timeout應(yīng)設(shè)置為0U,否則報(bào)Parameter錯(cuò)誤。

線程調(diào)用該函數(shù)時(shí),當(dāng)消息量中無(wú)token時(shí),線程進(jìn)入BLOCK狀態(tài)等待消息量被放入token。在此期間當(dāng)任務(wù)檢測(cè)到消息量放入token時(shí),將自動(dòng)由****BLOCK態(tài)轉(zhuǎn)移為READY態(tài)。當(dāng)?shù)却臅r(shí)間超過(guò)了指定的阻塞時(shí)間,即使隊(duì)列中尚無(wú)數(shù)據(jù),任務(wù)也會(huì)自動(dòng)從阻塞態(tài)轉(zhuǎn)移為READY態(tài)。此時(shí)程序會(huì)返回osErrorTimeout錯(cuò)誤。若沒(méi)有設(shè)置阻塞超時(shí)且參數(shù)正確,返回osErrorResource錯(cuò)誤**。**

osStatus_t osSemaphoreAcquire (osSemaphoreId_t semaphore_id, uint32_t timeout);/*  獲取一個(gè)token
@param:     semaphore_id    -傳入信號(hào)量ID(句柄)
            timeout         -阻塞延時(shí)時(shí)間
@retval:
         osOK: 操作成功
         osErrorTimeout: the token could not be obtained in the given time.
         osErrorResource: the token could not be obtained when no timeout was specified.
         osErrorParameter: the parameter semaphore_id is NULL or invalid.*/

timeout參數(shù):

==  0U     //不設(shè)置阻塞超時(shí)時(shí)間
 ==  osWaitForever  //任務(wù)將一直阻塞直到空隊(duì)列被寫入/滿隊(duì)列被取出數(shù)據(jù)
 ==  Ticks   //設(shè)置具體等待時(shí)間,單位為RTOS心跳數(shù)(Ticks)

③ 向信號(hào)量放入一個(gè)token 【可在中斷中使用】

當(dāng)信號(hào)量溢出時(shí),函數(shù)返回**osErrorResource **。

osStatus_t osSemaphoreRelease (osSemaphoreId_t semaphore_id);/*放入一個(gè)token
@param:     semaphore_id    -傳入信號(hào)量ID(句柄)
@retval:
    osOK: the token has been released and the count incremented.
    osErrorResource: the token could not be released (maximum token count has been reached).
    osErrorParameter: the parameter semaphore_id is NULL or invalid.
*/

④獲取狀態(tài)

uint32_t osSemaphoreGetCount (osSemaphoreId_t semaphore_id);/*獲取信號(hào)量中token數(shù)
*/

⑤清理(刪除)信號(hào)量

osStatus_t osSemaphoreDelete (osSemaphoreId_t semaphore_id);/*
@retval:  
    osOK: the semaphore object has been deleted.
    osErrorParameter: the parameter semaphore_id is NULL or invalid.
    osErrorResource: the semaphore is in an invalid state.
    osErrorISR: osSemaphoreDelete cannot be called from interrupt service routines.
*/
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • CMSIS
    +關(guān)注

    關(guān)注

    0

    文章

    41

    瀏覽量

    12239
  • FreeRTOS
    +關(guān)注

    關(guān)注

    12

    文章

    492

    瀏覽量

    63839
  • 延時(shí)器
    +關(guān)注

    關(guān)注

    1

    文章

    36

    瀏覽量

    15426
  • 串口中斷
    +關(guān)注

    關(guān)注

    0

    文章

    67

    瀏覽量

    14262
收藏 人收藏

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    FreeRTOS信號(hào)量使用教程

    信號(hào)量是操作系統(tǒng)中重要的一部分,信號(hào)量一般用來(lái)進(jìn)行資源管理和任務(wù)同步, FreeRTOS中信號(hào)量又分為二值信號(hào)量、 計(jì)數(shù)型信號(hào)量、互斥
    的頭像 發(fā)表于 12-19 09:22 ?3769次閱讀
    FreeRTOS<b class='flag-5'>信號(hào)量</b>使用教程

    轉(zhuǎn):freeRTOS信號(hào)量學(xué)習(xí)

    kv46上移植的demo有官方提供的信號(hào)量的例程,推薦大家下載最新版的v9.0.0源碼學(xué)習(xí),新更新的特性和內(nèi)容在源碼包里都有提及,研究例程是最好的學(xué)習(xí)方法。這里只是給大家簡(jiǎn)單介紹使用方法,更加詳細(xì)的內(nèi)容還需自己仔細(xì)閱讀源碼和官方參考資料。
    發(fā)表于 08-12 18:29

    第14章 信號(hào)量

    。14.1 信號(hào)量14.2 信號(hào)量API函數(shù)14.3 實(shí)驗(yàn)例程說(shuō)明(任務(wù)間通信)14.4 實(shí)驗(yàn)例程說(shuō)明(中斷方式通信)14.5總結(jié)14.1 信號(hào)量14.1.1信號(hào)量
    發(fā)表于 10-05 09:26

    第15章 互斥信號(hào)量

    15.1 互斥信號(hào)量15.1.1互斥信號(hào)量概念及其作用 互斥信號(hào)量就是信號(hào)量的一種特殊形式,也就是信號(hào)
    發(fā)表于 10-06 16:40

    信號(hào)量–使用許可的概念

    永磁同步電機(jī) 除了基于每個(gè)Java對(duì)象具有的鎖定位的通用同步外,您還可以使用Java中更復(fù)雜的同步器,例如: 信號(hào)量–使用許可的概念表示一個(gè)位置中允許的最大線程數(shù)。 當(dāng)使用值1時(shí),其行為類似于同步
    發(fā)表于 08-27 06:04

    信號(hào)量semphere概述

    APItx_semaphore_createtx_semaphore_deletetx_semaphore_gettx_semaphore_puttx_semaphore_put_notifysemaphore_demo概述ThreadX提供32位計(jì)數(shù)信號(hào)量,范圍在0到4
    發(fā)表于 02-22 07:29

    新手請(qǐng)教信號(hào)量概念問(wèn)題

    請(qǐng)教信號(hào)量概念問(wèn)題. 我準(zhǔn)備用信號(hào)量來(lái)編寫一個(gè)ARM程序,但我沒(méi)有完全理解信號(hào)量概念.例如:現(xiàn)在有 4 個(gè)任務(wù):TASK1,TASK2,
    發(fā)表于 02-27 11:15

    信號(hào)量機(jī)制怎么理解

    信號(hào)量Semaphore),有時(shí)被稱為信號(hào)燈,是在多線程環(huán)境下使用的一種設(shè)施,是可以用來(lái)保證兩個(gè)或多個(gè)關(guān)鍵代碼段不被并發(fā)調(diào)用。在進(jìn)入一個(gè)關(guān)鍵代碼段之前,線程必須獲取一個(gè)信號(hào)量;一旦該
    發(fā)表于 11-14 09:23 ?2.6w次閱讀
    <b class='flag-5'>信號(hào)量</b>機(jī)制怎么理解

    你了解Linux 各類信號(hào)量

    內(nèi)核信號(hào)量與用戶信號(hào)量,用戶信號(hào)量分為POXIS信號(hào)量和SYSTEMV信號(hào)量,POXIS信號(hào)量
    發(fā)表于 05-04 17:19 ?2651次閱讀
    你了解Linux 各類<b class='flag-5'>信號(hào)量</b>?

    Linux IPC System V 信號(hào)量

    () //創(chuàng)建/獲取信號(hào)量集 semctl() //初始化信號(hào)量集 semop() //操作信號(hào)量
    發(fā)表于 04-02 14:46 ?412次閱讀

    詳解互斥信號(hào)量概念和運(yùn)行

    1 、互 斥 信 號(hào) 1.1 互斥信號(hào)量概念及其作用 互斥信號(hào)量的主要作用是對(duì)資源實(shí)現(xiàn)互斥訪問(wèn),使用二值信號(hào)量也可以實(shí)現(xiàn)互斥訪問(wèn)的功能
    的頭像 發(fā)表于 10-22 11:57 ?1.2w次閱讀
    詳解互斥<b class='flag-5'>信號(hào)量</b>的<b class='flag-5'>概念</b>和運(yùn)行

    Linux信號(hào)量(2):POSIX 信號(hào)量

    上一章,講述了 SYSTEM V 信號(hào)量,主要運(yùn)行于進(jìn)程之間,本章主要介紹 POSIX 信號(hào)量:有名信號(hào)量、無(wú)名信號(hào)量。 POSIX
    的頭像 發(fā)表于 10-29 17:34 ?905次閱讀

    淺談鴻蒙內(nèi)核源碼的信號(hào)量運(yùn)作原理

    基本概念 信號(hào)量Semaphore) 是一種實(shí)現(xiàn)任務(wù)間通信的機(jī)制,可以實(shí)現(xiàn)任務(wù)間同步或共享資源的互斥訪問(wèn)。 一個(gè)信號(hào)量的數(shù)據(jù)結(jié)構(gòu)中,通常有一個(gè)計(jì)數(shù)值,用于對(duì)有效資源數(shù)的計(jì)數(shù),表示剩下
    的頭像 發(fā)表于 04-24 10:44 ?1725次閱讀

    FreeRTOS 隊(duì)列 信號(hào)量 互斥

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

    ThreadX(六)------信號(hào)量semaphore

    APItx_semaphore_createtx_semaphore_deletetx_semaphore_gettx_semaphore_puttx_semaphore_put_notifysemaphore_demo概述ThreadX提供32位計(jì)數(shù)信號(hào)量,范圍在0到4
    發(fā)表于 12-28 19:26 ?7次下載
    ThreadX(六)------<b class='flag-5'>信號(hào)量</b><b class='flag-5'>semaphore</b>
    主站蜘蛛池模板: 欧美成人天天综合在线视色 | 1024成人 | 欧美人与动另类在线 | 久久久久99精品成人片三人毛片 | 黑色丝袜在丝袜福利国产 | 成人国产一区 | 一级特黄国产高清毛片97看片 | 久久电影www成人网 久久电影福利 | 免费看啪啪的网站 | 久久性生活 | 日本欧美一区二区三区视频 | 夜夜夜夜操 | 成年午夜一级毛片视频 | 91大神精品在线观看 | 夜夜草天天干 | 亚洲产国偷v产偷v自拍色戒 | 色一欲一性一乱一区二区三区 | 日日干夜夜操视频 | 成年网站在线观看 | 久久综合狠狠综合久久综合88 | 性生i活一级一片 | 午夜影院免费观看 | 久久精品国产亚洲5555 | 久久国产精品视频 | 日本视频一区二区三区 | 一区二区三区无码高清视频 | 日本不卡视频一区二区 | 超级极品白嫩美女在线 | 黄视频免费观看 | 国产精品成人四虎免费视频 | 精品一区二区影院在线 | 好爽毛片一区二区三区四 | 天堂视频网 | 天天摸天天插 | 老湿影院免费体验区 | 波多野结衣在线视频免费观看 | 年下系列高h文 | 久久精品乱子伦观看 | 中文字幕一区二区三区永久 | 国产大片黄在线看免费 | 一区在线观看视频 |