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

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

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

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

completion是什么?怎么使用?

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

掃碼添加小助手

加入工程師交流群

1. completion 是什么

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

2. completion 怎么使用

completion 的使用非常簡(jiǎn)單

定義一個(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 非常少,可以通過(guò)簡(jiǎn)單的代碼去分析

初始化完成量

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)前線(xiàn)程:rt_thread_suspend(thread);

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

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

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

開(kāi)中斷:rt_hw_interrupt_enable(level);

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

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

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

返回線(xiàn)程狀態(tài)

這樣就完成了線(xiàn)程的掛起。

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)被掛起的線(xiàn)程:rt_thread_resume(thread);

開(kāi)中斷:rt_hw_interrupt_enable(level);

開(kāi)調(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)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(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)投訴
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4899

    瀏覽量

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

    關(guān)注

    0

    文章

    53

    瀏覽量

    8557

原文標(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)推薦

    中科創(chuàng)達(dá)推出基于高通Wear 5100+MCU打造的TurboX AI眼鏡

    2025年7月10日,中科創(chuàng)達(dá),作為全球智能操作系統(tǒng)及端側(cè)智能產(chǎn)品與技術(shù)的領(lǐng)航者,宣布正式向全球市場(chǎng)推出其基于高通Wear 5100+MCU打造的TurboX AI眼鏡。這一創(chuàng)新力作憑借前沿的 “雙芯分布式架構(gòu)”,在技術(shù)上實(shí)現(xiàn)重大突破,不僅帶來(lái)了強(qiáng)勁的續(xù)航能力、迅捷的響應(yīng)速度和極致輕盈的機(jī)身重量,更是在上市之際,憑借卓越的創(chuàng)新實(shí)力,成功斬獲物聯(lián)網(wǎng)智庫(kù)頒發(fā)的 “產(chǎn)品創(chuàng)新獎(jiǎng)”。這兩大振奮人心的消息一經(jīng)發(fā)布,即刻在智能穿戴行業(yè)掀起熱議,為AI眼鏡領(lǐng)
    的頭像 發(fā)表于 07-10 19:04 ?186次閱讀
    中科創(chuàng)達(dá)推出基于高通Wear 5100+MCU打造的TurboX AI眼鏡

    施耐德電氣與奇安信共建技術(shù)本地化創(chuàng)新中心

    ?在施耐德電氣技術(shù)本地化創(chuàng)新日上 ; 施耐德電氣與奇安信集團(tuán)宣布成立 施耐德電氣(中國(guó))技術(shù)本地化創(chuàng)新中心。 該中心將提供 針對(duì)國(guó)產(chǎn)基礎(chǔ)軟硬件的深度適配服務(wù),以信息技術(shù)共創(chuàng)和生態(tài)協(xié)同為核心 ,更好地滿(mǎn)足中國(guó)市場(chǎng)數(shù)字經(jīng)濟(jì)的快速發(fā)展需求。 施耐德電氣與奇安信集團(tuán)正式簽署了戰(zhàn)略合作協(xié)議,并攜手生態(tài)伙伴共同推進(jìn)技術(shù)本地化創(chuàng)新生態(tài)建設(shè)。 施耐德電氣全球執(zhí)行副總裁、首席數(shù)字官Peter Weckesser , 奇安信科技集團(tuán)股份有限公司董事長(zhǎng)齊
    的頭像 發(fā)表于 07-10 19:01 ?118次閱讀
    施耐德電氣與奇安信共建技術(shù)本地化創(chuàng)新中心

    A股國(guó)產(chǎn)力傳感器龍頭柯力傳感投資北京一家觸覺(jué)傳感器公司“他山科技”

    近日,柯力傳感與北京他山科技有限公司(以下簡(jiǎn)稱(chēng)“他山科技”)正式簽署投資協(xié)議,完成了對(duì)他山科技的戰(zhàn)略投資。這是柯力繼投資猿聲科技之后,在觸覺(jué)傳感器及電子皮膚領(lǐng)域投資的又一重要戰(zhàn)略舉措,進(jìn)一步強(qiáng)化了公司在機(jī)器人及智能傳感領(lǐng)域的技術(shù)布局和產(chǎn)業(yè)協(xié)同能力。 他山科技成立于2017年,是人工智能觸覺(jué)傳感芯片及應(yīng)用解決方案研發(fā)商,也是觸覺(jué)傳感器賽道的領(lǐng)軍者。核心團(tuán)隊(duì)由清華大學(xué)、曼徹斯特大學(xué)等全球資深研發(fā)團(tuán)隊(duì)共同創(chuàng)建。
    的頭像 發(fā)表于 07-10 18:58 ?88次閱讀
    A股國(guó)產(chǎn)力傳感器龍頭柯力傳感投資北京一家觸覺(jué)傳感器公司“他山科技”

    Molex推出家庭能源存儲(chǔ)解決方案

    ? 家庭里用能源的方式,正在發(fā)生一種根本性的轉(zhuǎn)變。能源供應(yīng)商和消費(fèi)者之間曾經(jīng)存在的被動(dòng)關(guān)系,已轉(zhuǎn)變?yōu)榱擞煞恐髯龀龅闹鲃?dòng)決策。能源的獲取、存儲(chǔ)和分配方式、時(shí)間及地點(diǎn)現(xiàn)在由家庭能源管理系統(tǒng)控制,這些系統(tǒng)的可靠性對(duì)于用戶(hù)的采用決策至關(guān)重要。 ? 家庭能源管理轉(zhuǎn)型 與儲(chǔ)能核心價(jià)值 家庭能源模式正從被動(dòng)消費(fèi)轉(zhuǎn)向主動(dòng)管理。 房主通過(guò)能源管理系統(tǒng)自主控制能源獲取、存儲(chǔ)與分配,系統(tǒng)可靠性成為用戶(hù)決策關(guān)鍵。可再生能源技術(shù)助力家
    的頭像 發(fā)表于 07-10 18:57 ?152次閱讀
    Molex推出家庭能源存儲(chǔ)解決方案

    在 Film Frame 和 Waffle Pack 上提供的 Hypersudden 調(diào)諧變?nèi)萜?skyworksinc

    電子發(fā)燒友網(wǎng)為你提供()在 Film Frame 和 Waffle Pack 上提供的 Hypersudden 調(diào)諧變?nèi)萜飨嚓P(guān)產(chǎn)品參數(shù)、數(shù)據(jù)手冊(cè),更有在 Film Frame 和 Waffle Pack 上提供的 Hypersudden 調(diào)諧變?nèi)萜鞯囊_圖、接線(xiàn)圖、封裝手冊(cè)、中文資料、英文資料,在 Film Frame 和 Waffle Pack 上提供的 Hypersudden 調(diào)諧變?nèi)萜髡嬷当?,?Film Frame 和 Waffle Pack 上提供的 Hypersudden 調(diào)諧變?nèi)萜鞴苣_等資料,希望可以幫助到廣大的電子工程師們。
    發(fā)表于 07-10 18:32
    在 Film Frame 和 Waffle Pack 上提供的 Hypersudden 調(diào)諧變?nèi)萜?skyworksinc

    Hyperabrupt Junction Tuning 變?nèi)荻O管 skyworksinc

    電子發(fā)燒友網(wǎng)為你提供()Hyperabrupt Junction Tuning 變?nèi)荻O管相關(guān)產(chǎn)品參數(shù)、數(shù)據(jù)手冊(cè),更有Hyperabrupt Junction Tuning 變?nèi)荻O管的引腳圖、接線(xiàn)圖、封裝手冊(cè)、中文資料、英文資料,Hyperabrupt Junction Tuning 變?nèi)荻O管真值表,Hyperabrupt Junction Tuning 變?nèi)荻O管管腳等資料,希望可以幫助到廣大的電子工程師們。
    發(fā)表于 07-10 18:32
    Hyperabrupt Junction Tuning 變?nèi)荻O管 skyworksinc

    塑料封裝的 Abrupt Junction 調(diào)諧變?nèi)荻O管 skyworksinc

    電子發(fā)燒友網(wǎng)為你提供()塑料封裝的 Abrupt Junction 調(diào)諧變?nèi)荻O管相關(guān)產(chǎn)品參數(shù)、數(shù)據(jù)手冊(cè),更有塑料封裝的 Abrupt Junction 調(diào)諧變?nèi)荻O管的引腳圖、接線(xiàn)圖、封裝手冊(cè)、中文資料、英文資料,塑料封裝的 Abrupt Junction 調(diào)諧變?nèi)荻O管真值表,塑料封裝的 Abrupt Junction 調(diào)諧變?nèi)荻O管管腳等資料,希望可以幫助到廣大的電子工程師們。
    發(fā)表于 07-10 18:30
    塑料封裝的 Abrupt Junction 調(diào)諧變?nèi)荻O管 skyworksinc

    突變結(jié)變?nèi)荻O管陶瓷封裝 skyworksinc

    電子發(fā)燒友網(wǎng)為你提供()突變結(jié)變?nèi)荻O管陶瓷封裝相關(guān)產(chǎn)品參數(shù)、數(shù)據(jù)手冊(cè),更有突變結(jié)變?nèi)荻O管陶瓷封裝的引腳圖、接線(xiàn)圖、封裝手冊(cè)、中文資料、英文資料,突變結(jié)變?nèi)荻O管陶瓷封裝真值表,突變結(jié)變?nèi)荻O管陶瓷封裝管腳等資料,希望可以幫助到廣大的電子工程師們。
    發(fā)表于 07-10 18:29
    突變結(jié)變?nèi)荻O管陶瓷封裝 skyworksinc

    輸電線(xiàn)路三跨線(xiàn)路圖像視頻監(jiān)測(cè)裝置:“全景攝像頭”

    輸電線(xiàn)路作為電網(wǎng)的重要組成部分,其安全穩(wěn)定運(yùn)行直接關(guān)系到電力供應(yīng)的可靠性。尤其是在“三跨”區(qū)域——即線(xiàn)路跨越鐵路、公路和水域等特殊地理環(huán)境的地段,環(huán)境復(fù)雜、監(jiān)控難度大、風(fēng)險(xiǎn)也更高,成為電網(wǎng)運(yùn)維的重點(diǎn)和難點(diǎn)。傳統(tǒng)的人工巡檢方式存在人員不足、成本高、盲區(qū)多、巡檢周期長(zhǎng)等問(wèn)題,難以滿(mǎn)足現(xiàn)代電網(wǎng)對(duì)高效、智能化運(yùn)維的需求。 一、背景與應(yīng)用需求 隨著電網(wǎng)規(guī)模的不斷擴(kuò)大,輸電線(xiàn)路覆蓋范圍廣,環(huán)境復(fù)雜,尤其是“三跨”
    的頭像 發(fā)表于 07-10 18:25 ?56次閱讀

    NVMe協(xié)議簡(jiǎn)要分析

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

    使用Dockerfile搭建潤(rùn)和WS63E的開(kāi)發(fā)環(huán)境

    ; \\\\\\\\ && [ -s \"$NVM_DIR/bash_completion\" ] &&
    發(fā)表于 11-18 02:59

    【米爾-Xilinx XC7A100T FPGA開(kāi)發(fā)板試用】+02.PCIE接口測(cè)試(zmj)

    : Completion Timeout: Range B, TimeoutDis-, LTR-, OBFF Not Supported DevCtl2: Completion Timeout: 50us
    發(fā)表于 11-12 16:05

    PCI-E TLP學(xué)習(xí)筆記(3)

    和應(yīng)答處理機(jī)制(Request Handling Rules、Completion Handling)、virtual channel(vc)Mechanism虛擬通道機(jī)制(TC/VC映射、Flow Control)、Data Integrity數(shù)據(jù)完整性等內(nèi)容,話(huà)不多說(shuō),上貨。
    的頭像 發(fā)表于 11-06 09:19 ?870次閱讀
    PCI-E TLP學(xué)習(xí)筆記(3)

    PCI-E TLP學(xué)習(xí)筆記(2)

    ,configuration,message request、completetion(Memory Request Package、I/O Request 包、Configuration Request包、Message、Completion Rules(應(yīng)答機(jī)制)),話(huà)不多說(shuō),上貨。
    的頭像 發(fā)表于 11-06 09:16 ?932次閱讀
    PCI-E TLP學(xué)習(xí)筆記(2)

    completion CAN驅(qū)動(dòng)的completion會(huì)失效的原因?

    CAN配置自動(dòng)重發(fā)。completion_wait 設(shè)置1秒超時(shí)。 2.接收方打開(kāi)CAN準(zhǔn)備接收,發(fā)送方準(zhǔn)備發(fā)送。 3.發(fā)送方開(kāi)始發(fā)送,接收方正常接收。此時(shí),將接收方CAN接收關(guān)閉。然后再打開(kāi)。此時(shí)CAN completion就會(huì)失效。
    發(fā)表于 09-27 08:21