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

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

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

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

completion是什么?怎么使用?

RTThread物聯(lián)網(wǎng)操作系統(tǒng) ? 來源:CSDN技術(shù)社區(qū) ? 作者:whj123999 ? 2021-03-18 13:33 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

1. completion 是什么

completion 直接翻譯過來是完成,所以我們可以稱 rt_completion 為 完成量。在 RT-Thread 的文檔中心 中講線程間同步時(shí),介紹了 信號(hào)量, 互斥量, 事件集 。 rt_completion 是一個(gè) 輕量級(jí)的二值信號(hào)量。

2. completion 怎么使用

completion 的使用非常簡單

定義一個(gè)完成量

1struct rt_completion completion;

初始化完成量

1rt_completion_init(&completion);

等待完成量

1rt_completion_wait(&completion);

釋放完成量

《br /》rt_completion_done(&completion);《br /》

3. completion 的實(shí)現(xiàn)

completion 的 API 非常少,可以通過簡單的代碼去分析

初始化完成量

1void rt_completion_init(struct rt_completion *completion)

2{

3 rt_base_t level;

4 RT_ASSERT(completion != RT_NULL);

5

6 level = rt_hw_interrupt_disable();

7 completion-》flag = RT_UNCOMPLETED;

8 rt_list_init(&completion-》suspended_list);

9 rt_hw_interrupt_enable(level);

10}

干了兩件事:

設(shè)置 flag 為 RT_UNCOMPLETED

初始化完成量的鏈表

2.等待完成量(以下代碼有刪減)

1rt_err_t rt_completion_wait(struct rt_completion *completion,

2 rt_int32_t timeout)

3{

4 result = RT_EOK;

5 thread = rt_thread_self();

6

7 level = rt_hw_interrupt_disable();

8 if (completion-》flag != RT_COMPLETED)

9 {

10 if (timeout == 0)

11 {

12

13 }

14 else

15 {

16 /* reset thread error number */

17 thread-》error = RT_EOK;

18

19 /* suspend thread */

20 rt_thread_suspend(thread);

21 /* add to suspended list */

22 rt_list_insert_before(&(completion-》suspended_list),

23 &(thread-》tlist));

24

25 /* current context checking */

26 RT_DEBUG_NOT_IN_INTERRUPT;

27

28 /* start timer */

29 if (timeout 》 0)

30 {

31 /* reset the timeout of thread timer and start it */

32 rt_timer_control(&(thread-》thread_timer),

33 RT_TIMER_CTRL_SET_TIME,

34 &timeout);

35 rt_timer_start(&(thread-》thread_timer));

36 }

37 /* enable interrupt */

38 rt_hw_interrupt_enable(level);

39

40 /* do schedule */

41 rt_schedule();

42

43 /* thread is waked up */

44 result = thread-》error;

45

46 level = rt_hw_interrupt_disable();

47 }

48 }

49 /* clean completed flag */

50 completion-》flag = RT_UNCOMPLETED;

51

52 return result;

53}

主要做了以下工作:

關(guān)中斷:rt_hw_interrupt_disable();

掛起當(dāng)前線程:rt_thread_suspend(thread);

把掛起狀態(tài)插入到線程的鏈表中:rt_list_insert_before

確保當(dāng)前函數(shù)執(zhí)行不是在中斷中:RT_DEBUG_NOT_IN_INTERRUPT;

設(shè)置并啟動(dòng)定時(shí)器:rt_timer_start(&(thread-》thread_timer));

開中斷:rt_hw_interrupt_enable(level);

開調(diào)度器:rt_schedule();

獲取當(dāng)前線程狀態(tài):result = thread-》error;

設(shè)置完成量的標(biāo)志位:completion-》flag = RT_UNCOMPLETED;

返回線程狀態(tài)

這樣就完成了線程的掛起。

3.完成完成量(以下代碼有刪減)

1 void rt_completion_done(struct rt_completion *completion)

2 {

3 level = rt_hw_interrupt_disable();

4 completion-》flag = RT_COMPLETED;

5

6 if (!rt_list_isempty(&(completion-》suspended_list)))

7 {

8 /* there is one thread in suspended list */

9 struct rt_thread *thread;

10

11 /* get thread entry */

12 thread = rt_list_entry(completion-》suspended_list.next,

13 struct rt_thread,

14 tlist);

15

16 /* resume it */

17 rt_thread_resume(thread);

18 rt_hw_interrupt_enable(level);

19

20 /* perform a schedule */

21 rt_schedule();

22 }

23 }

主要做了以下工作:

關(guān)中斷:rt_hw_interrupt_disable();

設(shè)置 flag 為 RT_COMPLETED

檢查鏈表不為空:rt_list_isempty

獲取到當(dāng)前等待完成量的句柄:rt_list_entry

啟動(dòng)被掛起的線程:rt_thread_resume(thread);

開中斷:rt_hw_interrupt_enable(level);

開調(diào)度:rt_schedule();

4. completion 與信號(hào)量的對(duì)比

completion API 個(gè)數(shù)少,資源占用少,只能釋放獲取,不支持多次釋放

semaphore API 個(gè)數(shù)多,資源占用較多,使用靈活,可以嘗試獲取,可以多次釋放,

5. completion 如何加入工程

標(biāo)準(zhǔn)版 RT-Thread 中的 completion 源碼在 “ t-threadcomponentsdriverssrccompletion.c”在你要使用的文件中#include completion.h直接就可以使用。

Nano 版 RT-Thread 直接拷貝completion.c 和 completion.h 添加到工程就可以使用
編輯:lyn

聲明:本文內(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)投訴
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4965

    瀏覽量

    73868
  • 信號(hào)量
    +關(guān)注

    關(guān)注

    0

    文章

    53

    瀏覽量

    8764

原文標(biāo)題:RT-Thread隱藏的寶藏之completion

文章出處:【微信號(hào):RTThread,微信公眾號(hào):RTThread物聯(lián)網(wǎng)操作系統(tǒng)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

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

掃碼添加小助手

加入工程師交流群

    評(píng)論

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

    MMBZxxVCL - Q1 雙通道 ESD 保護(hù)器件:設(shè)計(jì)與應(yīng)用指南

    MMBZxxVCL - Q1 雙通道 ESD 保護(hù)器件:設(shè)計(jì)與應(yīng)用指南 在電子設(shè)備的設(shè)計(jì)中,靜電放電(ESD)和浪涌保護(hù)是至關(guān)重要的環(huán)節(jié)。今天,我們就來深入了解一下德州儀器(TI)推出的 MMBZxxVCL - Q1 雙通道 ESD 保護(hù)器件,看看它在實(shí)際應(yīng)用中能為我們帶來哪些優(yōu)勢。 文件下載: mmbz27val-q1.pdf 1. 器件特性 1.1 ESD 和浪涌保護(hù)能力 MMBZxxVCL - Q1 具備出色的 ESD 和浪涌保護(hù)能力。在 IEC 61000 - 4 - 2 標(biāo)準(zhǔn)下,它能承受 ±30kV 的接觸放電和 ±30kV 的空氣間隙放電;在 IEC 61643 - 321 浪涌保
    的頭像 發(fā)表于 02-25 09:40 ?6次閱讀

    電子工程師必備:TSDxx系列單向TVS二極管深度解析

    電子工程師必備:TSDxx系列單向TVS二極管深度解析 在電子設(shè)備的設(shè)計(jì)領(lǐng)域,靜電放電(ESD)和浪涌等瞬態(tài)干擾始終是工程師們需要重點(diǎn)攻克的難題。德州儀器(TI)推出的TSDxx(包括TSD03、TSD05、TSD12、TSD15、TSD18、TSD24、TSD36)系列單向TVS保護(hù)二極管,以其卓越的性能,成為了應(yīng)對(duì)這些干擾的得力助手。下面我將詳細(xì)解讀這個(gè)系列二極管的特點(diǎn)、應(yīng)用及相關(guān)參數(shù)。 文件下載: tsd15.pdf 一、產(chǎn)品特點(diǎn)突出 強(qiáng)大的防護(hù)能力 : 在ESD保護(hù)方面,它完全符合IEC 61000
    的頭像 發(fā)表于 02-25 09:40 ?10次閱讀

    汽車應(yīng)用中的雙通道齊納二極管MMBZxxVAL - Q1:特性、應(yīng)用與設(shè)計(jì)要點(diǎn)

    汽車應(yīng)用中的雙通道齊納二極管MMBZxxVAL - Q1:特性、應(yīng)用與設(shè)計(jì)要點(diǎn) 引言 在汽車和工業(yè)領(lǐng)域,對(duì)于電子設(shè)備的過壓保護(hù)需求日益增長。德州儀器(TI)的MMBZxxVAL - Q1系列雙通道齊納二極管,為這些應(yīng)用場景提供了可靠的解決方案。本文將詳細(xì)介紹MMBZxxVAL - Q1的特性、應(yīng)用、規(guī)格參數(shù)以及相關(guān)設(shè)計(jì)要點(diǎn)。 文件下載: mmbz15val-q1.pdf 產(chǎn)品特性 強(qiáng)大的ESD和浪涌保護(hù)能力 MMBZxxVAL - Q1具備出色的靜電放電(ESD)和浪涌保護(hù)性能。在IEC 61000 - 4 - 2標(biāo)準(zhǔn)下,它能承受±30
    的頭像 發(fā)表于 02-25 09:40 ?10次閱讀

    深入解析MMBZ15VAL與MMBZ27VAL雙溝道齊納二極管

    深入解析MMBZ15VAL與MMBZ27VAL雙溝道齊納二極管 在電子設(shè)備的設(shè)計(jì)中,如何有效保護(hù)電路免受靜電放電(ESD)和浪涌的損害,是工程師們一直關(guān)注的重點(diǎn)。今天,我們就來深入探討一下德州儀器(Texas Instruments)推出的MMBZ15VAL與MMBZ27VAL雙溝道齊納二極管,看看它們?cè)陔娐繁Wo(hù)方面有哪些獨(dú)特的優(yōu)勢。 文件下載: mmbz15val.pdf 1. 核心特性:多重防護(hù),性能卓越 ESD與浪涌保護(hù) MMBZxxVAL系列二極管在ESD和浪涌保護(hù)方面表現(xiàn)出色。依據(jù)IEC 61000 - 4 - 2標(biāo)準(zhǔn),它能夠承受±
    的頭像 發(fā)表于 02-25 09:40 ?11次閱讀

    汽車應(yīng)用新寵:TSDxx - Q1單向TVS二極管解析

    汽車應(yīng)用新寵:TSDxx - Q1單向TVS二極管解析 在汽車電子領(lǐng)域,靜電放電(ESD)和浪涌等瞬態(tài)現(xiàn)象猶如隱藏的“殺手”,隨時(shí)可能對(duì)電子設(shè)備造成損害。為了有效應(yīng)對(duì)這些挑戰(zhàn),德州儀器(TI)推出了TSD12 - Q1、TSD15 - Q1、TSD18 - Q1、TSD24 - Q1和TSD36 - Q1系列單向瞬態(tài)電壓抑制(TVS)二極管。今天,我們就來深入探討這些二極管的特性、應(yīng)用應(yīng)用及相關(guān)技術(shù)細(xì)節(jié)。 文件下載: tsd24-q1.pdf 卓越特性 強(qiáng)大的ESD和浪涌保護(hù)能力 這些二極管具備出色的ESD和浪涌保護(hù)性能。
    的頭像 發(fā)表于 02-25 09:35 ?12次閱讀

    OPi RK3588/RK3588S系列產(chǎn)品全面適配Openclaw,智能體“人人可及”時(shí)代正式開啟

    bot? │Do this later ◇Install shell completion script? │Yes 模型配置,這里以Qwen為例。 orangepi@orangepi5plus
    發(fā)表于 02-10 17:43

    OPi 6Plus全面適配OpenClaw

    this later ◇Install shell completion script? │Yes 模型配置,這里以Qwen為例。 orangepi@orangepi6plus:~$ openclaw
    發(fā)表于 02-06 20:00

    【原創(chuàng)】【RA4M2-SENSOR開發(fā)板評(píng)測】低功耗+USB綜合測試

    for write completion *@param[in]None *@retvalFSP_SUCCESSUpon success *@retvalany other
    發(fā)表于 11-29 19:25

    Xilinx高性能NVMe Host控制器IP+PCIe 3.0軟核控制器IP,純邏輯實(shí)現(xiàn),AXI4和AXI4-Stream DMA接口,支持PCIe 3.0和4.0

    、SMART、Error Information、Device Self-test、Create/Delete IO Submission/Completion Queue、Set Features
    發(fā)表于 11-14 22:40

    JLINK燒錄很慢,需要30多S是為什么?

    map ‘a(chǎn)fter startup completion point’ is active J-Link>q Script processing completed.
    發(fā)表于 11-12 07:51

    通過scons生成RT-Thread Studio工程,編譯報(bào)rtconfig_preinc.h告警怎么解決?

    /components/drivers/pin/pin.c\" arm-none-eabi-gcc \"../rt-thread/components/drivers/ipc/completion
    發(fā)表于 09-29 09:01

    rt-thread 在mdk5中使用v6編譯器編譯出錯(cuò)怎么解決?

    completion.c... ArmClang: error: unsupported option \'--c99\' compiling dataqueue.c... ArmClang: error
    發(fā)表于 09-24 07:22

    新版Rtthread 中使用dist 導(dǎo)出的bsp工程包 編譯報(bào)錯(cuò)怎么解決?

    compiling completion_comm.c... compiling pipe.c... compiling completion_up.c... compiling
    發(fā)表于 09-12 08:08

    rt_can_write內(nèi)_can_int_tx死循環(huán)是怎么回事?

    ;sem)); continue; } can->status.sndchange = 1; rt_completion_wait(&(tx_tosnd->
    發(fā)表于 09-11 07:04

    NVMe協(xié)議簡要分析

    Completion Queue,CQ)機(jī)制。SQ用于存放提交命令,而CQ則用于存放完成信息。隊(duì)列狀態(tài)信息通過門鈴寄存器(Door Bell,DB)來檢測。這兩個(gè)隊(duì)列采用了環(huán)形隊(duì)列結(jié)構(gòu),隊(duì)列可以映射
    發(fā)表于 05-15 00:34