国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

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

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

3天內不再提示

completion是什么?怎么使用?

RTThread物聯網操作系統 ? 來源:CSDN技術社區 ? 作者:whj123999 ? 2021-03-18 13:33 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

1. completion 是什么

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

2. completion 怎么使用

completion 的使用非常簡單

定義一個完成量

1struct rt_completion completion;

初始化完成量

1rt_completion_init(&completion);

等待完成量

1rt_completion_wait(&completion);

釋放完成量

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

3. completion 的實現

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}

干了兩件事:

設置 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}

主要做了以下工作:

關中斷:rt_hw_interrupt_disable();

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

把掛起狀態插入到線程的鏈表中:rt_list_insert_before

確保當前函數執行不是在中斷中:RT_DEBUG_NOT_IN_INTERRUPT;

設置并啟動定時器:rt_timer_start(&(thread-》thread_timer));

開中斷:rt_hw_interrupt_enable(level);

開調度器:rt_schedule();

獲取當前線程狀態:result = thread-》error;

設置完成量的標志位:completion-》flag = RT_UNCOMPLETED;

返回線程狀態

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

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 }

主要做了以下工作:

關中斷:rt_hw_interrupt_disable();

設置 flag 為 RT_COMPLETED

檢查鏈表不為空:rt_list_isempty

獲取到當前等待完成量的句柄:rt_list_entry

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

開中斷:rt_hw_interrupt_enable(level);

開調度:rt_schedule();

4. completion 與信號量的對比

completion API 個數少,資源占用少,只能釋放獲取,不支持多次釋放

semaphore API 個數多,資源占用較多,使用靈活,可以嘗試獲取,可以多次釋放,

5. completion 如何加入工程

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

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

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 代碼
    +關注

    關注

    30

    文章

    4968

    瀏覽量

    73961
  • 信號量
    +關注

    關注

    0

    文章

    53

    瀏覽量

    8769

原文標題:RT-Thread隱藏的寶藏之completion

文章出處:【微信號:RTThread,微信公眾號:RTThread物聯網操作系統】歡迎添加關注!文章轉載請注明出處。

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

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    湖北發布傳感器產業發展行動方案 劍指2030年帶動5000億應用規模

    3月2日,《加快“世界光谷”傳感器產業集群融合發展行動方案(2026—2030年)》正式發布,明確提出到2030年帶動傳感器應用行業規模突破5000億元,打造國內一流傳感器產業基地。該方案聚焦技術研發、企業培育、場景應用和產業生態四大維度,計劃通過五大行動18項重點任務推動產業跨越式發展。 《加快“世界光谷”傳感器產業集群融合發展行動方案(2026-2030年)》發布會現場 根據方案部署,湖北將組建光谷智能傳感技術創新研究院,圍繞材料、工藝
    的頭像 發表于 03-06 18:11 ?120次閱讀
    湖北發布傳感器產業發展行動方案 劍指2030年帶動5000億應用規模

    四方光電:2025年營收突破10億元

    近日,四方光電股份有限公司(688665)公布2025年度業績快報公告,報告期內,公司營業收入102,690.83萬元,同比增長17.61%;歸屬于母公司所有者的凈利潤13,165.56萬元,同比增加16.76%。 2025年度主要財務數據和指標 報告期的經營情況、財務狀況? 報告期內,公司營業收入102,690.83萬元,同比增長17.61%;歸屬于母公司所有者的凈利潤13,165.56萬元,同比增加16.76%。報告期末,公司總資產174,490.47萬元,比期初增長12.31%;歸屬于母公司的所有者權益115,407.84萬元,比期初
    的頭像 發表于 03-06 18:09 ?120次閱讀
    四方光電:2025年營收突破10億元

    TI AM62L經典再進化!高能效,低功耗全新發布

    眾所周知,TI經典工業MPU AM335x曾引領行業風潮,而2023年TI發布64位MPU通用工業處理器平臺AM62x,為AM335x用戶提供了無縫升級路徑,實現更高性能的功能需求。AM62L作為AM62x家族的降本之作,在性能和資源上做了裁剪,成本上做了優化,延續AM62x的經典基因,以更低門檻推進低功耗、高能效的工業處理器普及,助力開發者以高效方案應對多樣化的需求。 米爾與TI再聯手,推出基于TI-AM62L處理器的MYC-YM62LX核心板及開發板,為泛工業場景賦能。核心板提供512MB/1GB DDR4、512MB NAND Flash /8GB eMMC等多個型號供選擇。?下面詳細介紹這款核心板的優勢。 Ti AM62LX處理器專為成本敏感、功耗受限的嵌入式工業應用設計。配備雙核Cortex-A53@1.25GHz,2路千兆以太網接口、3個CAN FD接口、2個USB2.0、3個SDIO3.0接口、8個UART接口,5個I2C,4個SPI,1個16bit GPMC,1個24-bit RGB/MIPI DSI分辨率1920x1080@60fps。 應用場景豐富 面向工業HMI、PLC控制器、充電樁、醫療器械、運動控制器、物聯網網關等泛工業場景 配套開發板 搭載2路千兆網口,1路MIPI DSI 接口,1路音頻輸入輸出接口,1路USB OTG TYPE-C接口,1路USB HOST TYPE-A接口,1路Micro SD接口、1路帶隔離的CAN由鳳凰端子引出、2路RS485由鳳凰端子引出、1路RS232 鳳凰端子引出,4路ADC接口由排針引出,GPMC接口由2*20 PIN排針引出。 核心板型號配置: 開發板型號配置:
    發表于 03-06 17:44

    三安光電攜手知名機構推動Micro LED光互連技術突破,為AI數據中心開啟低功耗傳輸新紀元

    廈門2026年3月6日 /美通社/ -- 隨著生成式人工智能的迅猛發展,數據中心對高速、高效數據傳輸的需求呈指數級增長。面對日益嚴峻的能耗挑戰,三安光電前瞻布局,聯合清華大學、中國移動在 Micro LED光電器件與高速光通信領域取得重大突破,成功將Micro LED技術拓展應用到數據中心光互連場景,為構建下一代綠色、高效的信息傳輸網絡提供了創新性的中國方案。 強強聯合,攻克高速光通訊關鍵技術 在此次產學研深度融合的合作中,三方圍繞 ?Micro LED 在
    的頭像 發表于 03-06 17:44 ?160次閱讀

    江波龍將亮相2026德國紐倫堡嵌入式展,以集成AI Storage賦能車載與具身智能創新

    近日,國內知名半導體存儲品牌企業江波龍將亮相于3月10日–12日舉辦的2026德國紐倫堡嵌入式展(Embedded World)。本次展會期間,江波龍將圍繞“AI Storage for Embedded World”核心主題,集中展示其在AI集成存儲領域的創新能力、商業模式優勢及全鏈條技術實力,重點呈現車規級存儲、AI Robot存儲等核心解決方案,為全球嵌入式產業發展提供新方向。 汽車電子與自動駕駛是展會核心展區,備受行業關注。而在市場與技術趨勢推動下,車規級存儲正迎來由AI產業
    的頭像 發表于 03-06 17:42 ?238次閱讀
    江波龍將亮相2026德國紐倫堡嵌入式展,以集成AI Storage賦能車載與具身智能創新

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

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

    OPi 6Plus全面適配OpenClaw

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

    【原創】【RA4M2-SENSOR開發板評測】低功耗+USB綜合測試

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

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

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

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

    map ‘after startup completion point’ is active J-Link>q Script processing completed.
    發表于 11-12 07:51

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

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

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

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

    新版Rtthread 中使用dist 導出的bsp工程包 編譯報錯怎么解決?

    compiling completion_comm.c... compiling pipe.c... compiling completion_up.c... compiling
    發表于 09-12 08:08

    rt_can_write內_can_int_tx死循環是怎么回事?

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

    NVMe協議簡要分析

    Completion Queue,CQ)機制。SQ用于存放提交命令,而CQ則用于存放完成信息。隊列狀態信息通過門鈴寄存器(Door Bell,DB)來檢測。這兩個隊列采用了環形隊列結構,隊列可以映射
    發表于 05-15 00:34