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

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

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

3天內不再提示

rt-thread 優化系列(一) 之 過多關中斷

出出 ? 來源:出出 ? 作者:出出 ? 2022-06-21 09:03 ? 次閱讀

前言

關于優化的話題永遠不過時,沒期限。
評價一個系統的好壞,并不僅僅是它有什么功能,能做到什么。在多大程度上,使用更少的資源,以更快的速度完成相同的工作,這是不可或缺的一個考察項。

rt-thread 值得優化的地方還很多。作為本系統優化系列開篇,先從關中斷聊起。

提出問題

論壇上曾經有很多人反應丟數據啊,終端輸入命令太快出現什么什么異常啦。
起初看到這些人反映的問題,第一反應是他們用法錯誤,代碼有隱藏 bug 導致程序運行不正常。但是,當多人在不同的應用場景開始反映相似問題的時候,我也心虛了。我開始嘗試著引導他們去做一些優化處理,試試能不能減輕問題的嚴重性。有時候可能只需要調整兩句代碼,但是結果是明顯的,前后效果是有差別的。雖然他們的應用場景不一樣,但是多數是要和中斷打交道的,經過多方排查以及懷疑,最終我把目標轉移到了關中斷操作上。

我把這種現象叫過關中斷,過度使用關中斷進而引起副作用。

一個小例子

以 rt_thread_resume 函數為例,某次提交更改之前是這樣的

   rt_timer_stop(&thread->thread_timer);
   /* enable interrupt */
   rt_hw_interrupt_enable(temp);

   /* insert to schedule ready list */
   rt_schedule_insert_thread(thread);

更改之后

   rt_timer_stop(&thread->thread_timer);
   /* insert to schedule ready list */
   rt_schedule_insert_thread(thread);

   /* enable interrupt */
   rt_hw_interrupt_enable(temp);

可以查到, rt_schedule_insert_thread 函數有它自己內部的關中斷處理,這里調整這兩句的操作是不是沒有必要了?
上面代碼執行的 rt_hw_interrupt_disable rt_hw_interrupt_enable 函數對數是一樣的,不同的是更改前分成兩部分,中間可以有開中斷的機會,但是更改后這個機會沒了,調整后最長關中斷時間延長了。
如果這里的調整是必要的,也可以查到所有調用 rt_schedule_insert_thread 函數的其它地方都是關中斷的。那么 rt_schedule_insert_thread 自己內部的關中斷操作是不是就多余了?

上面的 rt_timer_stop 執行位置也有延長關中斷時間的副作用。

其它可疑過關中斷

比如 rt_thread_suspend 函數,開頭關中斷是這樣的。

   /* disable interrupt */
   temp = rt_hw_interrupt_disable();
   if (stat == RT_THREAD_RUNNING)
   {
       /* not suspend running status thread on other core */
       RT_ASSERT(thread == rt_thread_self());
   }

其中,stat 的賦值沒放到中斷里,后面這個簡短的判斷就必須放進關中斷?

其它的還有 rt_ipc_list_resume_all stm32_pin_irq_enable ...

影響

論壇里已經有多次反應的問題和中斷有關,引起的后果不是丟失數據就是線程掛起和內核消息脫鉤。如下是部分問題鏈接。
https://club.rt-thread.org/ask/question/432195.html
https://club.rt-thread.org/ask/question/432183.html
https://club.rt-thread.org/ask/question/432083.html
https://club.rt-thread.org/ask/question/432048.html

結尾

接下來本優化系列計劃:軟定時器,消息機制;還有第三方組件部分,由于組件包太多,不可能把每一個都搞一遍,所以我會挑其中的一兩個。敬請期待。

> 本優化系列所有提到的更改已經提交到 gitee ,歡迎大家測試
審核編輯:湯梓紅

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

    關注

    5

    文章

    900

    瀏覽量

    41586
  • 優化
    +關注

    關注

    0

    文章

    220

    瀏覽量

    23933
  • RT-Thread
    +關注

    關注

    31

    文章

    1300

    瀏覽量

    40264
收藏 人收藏

    評論

    相關推薦

    RT-Thread記錄(、版本開發環境及配合CubeMX)

    RT-Thread 學習記錄的第篇文章,RT-Thread記錄(RT-Thread 版本、RT-T
    的頭像 發表于 06-20 00:28 ?5300次閱讀
    <b class='flag-5'>RT-Thread</b>記錄(<b class='flag-5'>一</b>、版本開發環境及配合CubeMX)

    RT-Thread記錄(九、RTT中斷處理與階段小結)

    RT-Thread 內核部分最后個點 中斷管理,順帶著對前面所學知識做個小結。
    的頭像 發表于 06-24 10:25 ?6305次閱讀
    <b class='flag-5'>RT-Thread</b>記錄(九、RTT<b class='flag-5'>中斷</b>處理與階段小結)

    rt-thread 優化系列(二) 同步和消息關中斷分析

    書接前文,上篇優化聊的是關中斷操作,在很多地方過保護,導致關中斷時間太久,可能引起其它中斷不能及時響應。今天特意說說線程間同步和通信,分析
    的頭像 發表于 06-21 09:47 ?3985次閱讀

    【原創精選】RT-Thread征文精選技術文章合集

    優化系列(零) SysTick 優化分析rt-thread 優化系列
    發表于 07-26 14:56

    RT-Thread編程指南

    RT-Thread編程指南——RT-Thread開發組(2015-03-31)。RT-Thread做為國內有較大影響力的開源實時操作系統,本文是RT-Thread實時操作系統的編程指南
    發表于 11-26 16:06 ?0次下載

    RT-Thread學習筆記系列OTA升級(1)

    RT-Thread學習筆記系列OTA升級前言硬件介紹和Bootloader配置需求與功能設計功能實現過程前言做個產品,首先是需要設計后期可升級更新功能,否則沒有升級功能則每次出現問
    發表于 12-14 18:50 ?1次下載
    <b class='flag-5'>RT-Thread</b>學習筆記<b class='flag-5'>系列</b><b class='flag-5'>之</b>OTA升級(1)

    RT-Thread學習筆記 RT-Thread的架構概述

    RT-Thread 簡介 作為名 RTOS 的初學者,也許你對 RT-Thread 還比較陌生。然而,隨著你的深入接觸,你會逐漸發現 RT-Thread 的魅力和它相較于其他同類型
    的頭像 發表于 07-09 11:27 ?4577次閱讀
    <b class='flag-5'>RT-Thread</b>學習筆記 <b class='flag-5'>RT-Thread</b>的架構概述

    RT-Thread文檔_RT-Thread 簡介

    RT-Thread文檔_RT-Thread 簡介
    發表于 02-22 18:22 ?5次下載
    <b class='flag-5'>RT-Thread</b>文檔_<b class='flag-5'>RT-Thread</b> 簡介

    RT-Thread文檔_RT-Thread 潘多拉 STM32L475 上手指南

    RT-Thread文檔_RT-Thread 潘多拉 STM32L475 上手指南
    發表于 02-22 18:23 ?9次下載
    <b class='flag-5'>RT-Thread</b>文檔_<b class='flag-5'>RT-Thread</b> 潘多拉 STM32L475 上手指南

    RT-Thread文檔_中斷管理

    RT-Thread文檔_中斷管理
    發表于 02-22 18:30 ?1次下載
    <b class='flag-5'>RT-Thread</b>文檔_<b class='flag-5'>中斷</b>管理

    RT-Thread文檔_RT-Thread SMP 介紹與移植

    RT-Thread文檔_RT-Thread SMP 介紹與移植
    發表于 02-22 18:31 ?9次下載
    <b class='flag-5'>RT-Thread</b>文檔_<b class='flag-5'>RT-Thread</b> SMP 介紹與移植

    基于RT-Thread Studio學習

    前期準備:從官網下載 RT-Thread Studio,弄個賬號登陸,開啟rt-thread學習之旅。
    的頭像 發表于 05-15 11:00 ?4051次閱讀
    基于<b class='flag-5'>RT-Thread</b> Studio學習

    RT-Thread入門學習筆記-熟悉全局中斷的操作

    RT-Thread中,全局中斷的操作很多,大家都知道全局中斷的【disable】與【enable】
    的頭像 發表于 06-07 14:58 ?2233次閱讀
    <b class='flag-5'>RT-Thread</b>入門學習筆記-熟悉全局<b class='flag-5'>中斷</b>的操作

    基于 RT-Thread 的 RoboMaster 電控框架(

    。但也正是因為這些優點的覆蓋面較廣,很多初學者會覺得無從下手,但只要步入 RT-Thread 的大門,你就發現她的美好。這系列文檔將作為本人基于 RT-Thread 開發 RoboMaster 電控框架
    的頭像 發表于 09-19 19:55 ?799次閱讀

    RT-Thread v5.0.2 發布

    一系列令人激動的變化和改進。 以下是些亮點和關鍵變更: ?內核改進: ●?新增了AMP支持。 ●?新增了消息隊列的消息優先級。 ●?新增了rt_hw_interrupt_is_disabled API ,用于檢測是否關閉了
    的頭像 發表于 10-10 18:45 ?1531次閱讀
    <b class='flag-5'>RT-Thread</b> v5.0.2 發布
    主站蜘蛛池模板: 国产精品一区二区三区四区五区 | 我把美女日出白浆| bt天堂在线最新版www| 操狠狠| 亚洲第一区视频在线观看| 天天爱天天做天天爽夜夜揉| 日韩第十页| www.av日韩| 91大神精品长腿在线观看网站| 91av免费观看| 黄网站色视频免费看无下截| 伊人久久综合网站| 四虎.com| 久久婷婷激情综合色综合也去 | 她也啪97在线视频| 欧美日韩一区二区不卡| 可以免费看的黄色片| 国产成人mv在线观看入口视频 | 六月婷婷视频| www亚洲一区| 奇米影视五月天| 午夜aa| 国产成人精品曰本亚洲78| 天堂视频在线视频观看2018| 免费看三级黄色片| www在线观看| 欧美黄色录像视频| 一区视频在线| 亚洲29p| 久久国产精品免费网站| 亚洲精品九色在线网站| 成人黄色三级| 久久婷婷人人澡人人爱91| 色综合久久久高清综合久久久| 六月婷婷久久| 午夜影院免费观看视频| 操爽视频| 在线天堂中文新版有限公司| 欧美天堂视频| 永久免费看| 免费高清视频免费观看|