99精品伊人亚洲|最近国产中文炮友|九草在线视频支援|AV网站大全最新|美女黄片免费观看|国产精品资源视频|精彩无码视频一区|91大神在线后入|伊人终合在线播放|久草综合久久中文

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

    文章

    4900

    瀏覽量

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

    關(guān)注

    0

    文章

    53

    瀏覽量

    8566

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

    2nm良率大戰(zhàn)!臺(tái)積電傲視群雄,英特爾VS三星誰能贏到最后?

    (電子發(fā)燒友網(wǎng)報(bào)道 文/章鷹)7月16日,隨著英偉達(dá)H20芯片可以恢復(fù)在中國銷售,英偉達(dá)在16日的美國股市高開,股價(jià)升到170.7美元,市值一路上升到4.16萬億美元,再創(chuàng)歷史新高。同時(shí),這個(gè)消息也帶動(dòng)主要晶圓代工伙伴臺(tái)積電在今天股市高開,股價(jià)沖到237.71美元。明天臺(tái)積電將召開法說會(huì),展望全球半導(dǎo)體產(chǎn)業(yè)走向,2nm先進(jìn)制程的進(jìn)展也是頗受關(guān)注。 圖:臺(tái)積電 電子發(fā)燒友拍攝 2nm先進(jìn)制程到底有哪些先進(jìn)技術(shù)?客戶情況如何?三大晶圓代工龍頭企業(yè)的
    的頭像 發(fā)表于 07-17 00:33 ?397次閱讀
    2nm良率大戰(zhàn)!臺(tái)積電傲視群雄,英特爾VS三星誰能贏到最后?

    傳感器走向“AI on-chip”與低功耗集成化

    傳感器技術(shù)正向“AI on-chip”(片上人工智能)與低功耗集成化方向加速演進(jìn),這一趨勢(shì)由物聯(lián)網(wǎng)、自動(dòng)駕駛、工業(yè)4.0等場景需求驅(qū)動(dòng),同時(shí)受芯片工藝、算法優(yōu)化和材料創(chuàng)新的支撐。以下從技術(shù)驅(qū)動(dòng)、應(yīng)用落地、行業(yè)挑戰(zhàn)及未來趨勢(shì)四方面綜合分析: 一、AI on-chip的技術(shù)驅(qū)動(dòng)與創(chuàng)新 存算一體架構(gòu)突破瓶頸 馮·諾伊曼瓶頸的解決 :傳統(tǒng)架構(gòu)中數(shù)據(jù)在處理器與存儲(chǔ)器間頻繁搬運(yùn)導(dǎo)致高功耗和延遲。存內(nèi)計(jì)算(In-Memory Computing)通過直接在存儲(chǔ)器中嵌入計(jì)算單
    的頭像 發(fā)表于 07-16 20:41 ?196次閱讀

    AI智能時(shí)代重構(gòu)PCB價(jià)值的核心邏輯

    AI智能時(shí)代的PCB價(jià)值重構(gòu)研究 一、引言 (一)研究背景與意義 在AI技術(shù)驅(qū)動(dòng)下,全球電子信息產(chǎn)業(yè)加速變革,PCB(印制電路板)作為電子系統(tǒng)的物理載體,其價(jià)值正從基礎(chǔ)連接件向技術(shù)核心躍遷。AI服務(wù)器、智能汽車、AIPC等新興應(yīng)用對(duì)PCB的高層數(shù)、高頻材料、高可靠性提出嚴(yán)苛需求,推動(dòng)行業(yè)進(jìn)入"量價(jià)齊升"的產(chǎn)業(yè)升級(jí)周期。據(jù)Prismark預(yù)測,2025年全球PCB產(chǎn)值將達(dá)785.6億美元,其中AI相關(guān)PCB增速領(lǐng)跑全行業(yè)。 二、AI驅(qū)動(dòng)PCB價(jià)值重構(gòu)的核心邏輯 (一)需求端
    的頭像 發(fā)表于 07-16 18:55 ?302次閱讀

    ADBMS6834精度+擴(kuò)展性無對(duì)手 力壓群雄

    一、 ADBMS6834 簡介 *附件:adbms6834-6836-6837數(shù)據(jù)手冊(cè).pdf 產(chǎn)品全稱 :Analog Devices ADBMS6834 定位 :用于高壓多串電池系統(tǒng)的可堆疊式電池管理芯片 主要應(yīng)用場景: 電動(dòng)汽車(EV / HEV / PHEV) 儲(chǔ)能系統(tǒng)(ESS) 工業(yè)/電動(dòng)工具電池包 機(jī)器人、無人機(jī)、數(shù)據(jù)中心電源備份 二、 技術(shù)特性解讀 特性 說明 電芯監(jiān)測通道數(shù) 支持最多 18 串電芯 監(jiān)測 電壓測量精度 高達(dá)**±1.2mV(典型值)**,工業(yè)領(lǐng)先 通訊接口 isoSPI? (隔離串行接口),具備長距離、抗干擾能力 堆疊能力 支
    的頭像 發(fā)表于 07-16 18:53 ?247次閱讀

    黑芝麻智能三度亮相鏈博會(huì),全棧方案鏈動(dòng)產(chǎn)業(yè)未來

    7月16日,以"鏈接世界 共創(chuàng)未來"為主題的2025中國國際供應(yīng)鏈促進(jìn)博覽會(huì)在京隆重揭幕。智能汽車計(jì)算芯片引領(lǐng)者黑芝麻智能連續(xù)第三年亮相盛會(huì),于E2館智能汽車鏈B08展位展示智能汽車與機(jī)器人領(lǐng)域前沿技術(shù)突破,彰顯深化產(chǎn)業(yè)鏈協(xié)同的核心價(jià)值。 ? 安全智能底座方案,以武當(dāng)C1200家族芯片為核心,通過硬件級(jí)安全隔離、彈性算力擴(kuò)展和全生命周期兼容設(shè)計(jì),有效解決車企艙駕融合面臨的安全與成本難題,已獲多家國際頭部車企量產(chǎn)認(rèn)證。 ? 應(yīng)用成果領(lǐng)
    的頭像 發(fā)表于 07-16 18:40 ?188次閱讀
    黑芝麻智能三度亮相鏈博會(huì),全棧方案鏈動(dòng)產(chǎn)業(yè)未來

    黃仁勛用中文演講全文分享 中國人工智能模型世界一流 黃仁勛中文演講提了11家中國公司

    第三屆中國國際供應(yīng)鏈促進(jìn)博覽會(huì)于7月16日在北京開幕,英偉達(dá)首度參展。黃仁勛出席并在第三屆中國國際供應(yīng)鏈促進(jìn)博覽會(huì)開幕式上發(fā)表演講, 黃仁勛用中文演講 在第三屆中國國際供應(yīng)鏈促進(jìn)博覽會(huì)開幕式上黃仁勛用中文演講;這是黃仁勛中文演講首秀直言“緊張”,黃仁勛還罕見地?fù)Q下標(biāo)志性的皮衣,身著唐裝在開幕式上致辭。黃仁勛用中文表示,很高興來到中國,這是他第一次參加鏈博會(huì),鏈博會(huì)的規(guī)模非常大,氣氛也很熱烈,充分體現(xiàn)了中國
    的頭像 發(fā)表于 07-16 18:36 ?258次閱讀

    極低電容、塑料封裝硅 PIN 二極管 skyworksinc

    電子發(fā)燒友網(wǎng)為你提供()極低電容、塑料封裝硅 PIN 二極管相關(guān)產(chǎn)品參數(shù)、數(shù)據(jù)手冊(cè),更有極低電容、塑料封裝硅 PIN 二極管的引腳圖、接線圖、封裝手冊(cè)、中文資料、英文資料,極低電容、塑料封裝硅 PIN 二極管真值表,極低電容、塑料封裝硅 PIN 二極管管腳等資料,希望可以幫助到廣大的電子工程師們。
    發(fā)表于 07-16 18:34
    極低電容、塑料封裝硅 PIN 二極管 skyworksinc

    低電阻、低電容、塑料封裝 PIN 二極管 skyworksinc

    電子發(fā)燒友網(wǎng)為你提供()低電阻、低電容、塑料封裝 PIN 二極管相關(guān)產(chǎn)品參數(shù)、數(shù)據(jù)手冊(cè),更有低電阻、低電容、塑料封裝 PIN 二極管的引腳圖、接線圖、封裝手冊(cè)、中文資料、英文資料,低電阻、低電容、塑料封裝 PIN 二極管真值表,低電阻、低電容、塑料封裝 PIN 二極管管腳等資料,希望可以幫助到廣大的電子工程師們。
    發(fā)表于 07-16 18:34
    低電阻、低電容、塑料封裝 PIN 二極管 skyworksinc

    大信號(hào)開關(guān)塑料封裝 PIN 二極管 skyworksinc

    電子發(fā)燒友網(wǎng)為你提供()大信號(hào)開關(guān)塑料封裝 PIN 二極管相關(guān)產(chǎn)品參數(shù)、數(shù)據(jù)手冊(cè),更有大信號(hào)開關(guān)塑料封裝 PIN 二極管的引腳圖、接線圖、封裝手冊(cè)、中文資料、英文資料,大信號(hào)開關(guān)塑料封裝 PIN 二極管真值表,大信號(hào)開關(guān)塑料封裝 PIN 二極管管腳等資料,希望可以幫助到廣大的電子工程師們。
    發(fā)表于 07-16 18:33
    大信號(hào)開關(guān)塑料封裝 PIN 二極管 skyworksinc

    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

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

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

    【米爾-Xilinx XC7A100T FPGA開發(fā)板試用】+02.PCIE接口測試(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)容,話不多說,上貨。
    的頭像 發(fā)表于 11-06 09:19 ?878次閱讀
    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ī)制)),話不多說,上貨。
    的頭像 發(fā)表于 11-06 09:16 ?957次閱讀
    PCI-E TLP學(xué)習(xí)筆記(2)

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

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