新聞中心

        EEPW首頁 > 牛人業話 > 頻繁中斷狂轟亂炸,操作系統很難招架

        頻繁中斷狂轟亂炸,操作系統很難招架

        作者:光華居士 時間:2018-12-25 來源:電子產品世界 收藏

        3

        本文引用地址:http://www.104case.com/article/201812/396004.htm

        春困秋乏夏打盹,睡不醒的冬三月。灑家一面克制著午飯后不斷襲來的陣陣睡意,一面添加著接收程序,不過是從裸機下挪到操作系統的框架下,應該問題不大。筆者復制、粘貼、修改,一頓操作猛如虎,掃視一番信心鼓,便開始志得意滿地調試起來。

        按了一下器,嗯?仿真器怎么好像和電腦斷開連接了?哎,天殺的windows!肯定是windows恰好把仿真器的驅動程序給搞死了。筆者重新把仿真器插拔了一番,繼續下載程序、運行、調試。按下器,嗯?沒反應,把程序停下來,嗯?停不下來!不死心地重啟了電腦,重新來過,原來,確乎是一按遙控器就貌似死了機了。

        一絲陰影從灑家心頭掠過,盤旋在腦中的困意也一瞬間消失的無影無蹤。不消說,碰上事了!

        夏天,最是一個容易上火焦躁的時節,在烈日的威逼下,干渴的大地冒著騰騰的熱氣,不住地無聲喘息。白楊樹兀自矗立在似火的驕陽里,慢慢扇動著被曬得快要冒煙的綠葉,顯出一副無精打采的樣子。知了不停地求饒,可是熾熱的太陽全然不聽它的禱告。鳥兒忍受著饑腸轆轆,也不愿意出來覓食。頂著日頭匆匆趕路的俊男靚女們,揮汗如雨,被汗水一遍遍刷過的臉上早已沒有了香水的氣息。

        時間不多了,快要提交樣機了,卻碰上這等大問題,盡管身處空調房,灑家依然心中發涼,倍感不爽。

        4

        灑家揉了揉已然刻上了幾條皺紋的額頭,站起身,茫然環顧,有的同事正在熱火朝天地打游戲,有的同事看著小說,有的同事叉著腰、扎煞著胳膊,嘮著閑嗑,看我站起身來,隨即送來帶著笑意的目光。哎,多么和諧的場景啊!

        佛家有謂,因果不欺,自作自受,白話就是,誰的福誰享,誰的罪誰受。他們玩他們的,灑家干灑家的! 

        那么,好端端的,程序怎么就死了機呢?看調試器的反應,倒像是跑不動了一樣,既如此,統計一下系統負載率吧,ucos正好提供了這項功能。

        果不其然,一按遙控器,系統負載率就蹭蹭蹭地摸高到了100%,屢試不爽,本來系統負載率在百分之二三十之間,只要按下遙控,系統立馬死給你看。

        筆者工作多年,身經百戰,掰著腳趾頭掐指一算,肯定是遙控接收中斷太頻繁了,導致ucos把大量的時間用在系統調度上,以至于根本就沒有了空閑時間,為何如此,且聽灑家娓娓道來。

        系統被ucos劃分成多個任務,這些任務平時處于“等待”某些信號的狀態,信號一來,便進入“就緒”狀態,倘若沒有更高優先級的任務,處于就緒態的任務就得到了MCU的計算資源,進入任務執行程序,執行完后,便再次回到等待狀態。倘若來了中斷,ucos便中斷當前任務,存儲系統上下文、任務上下文,執行中斷服務程序,然后判斷是否存在被中斷服務程序推入就緒態、優先級高于被中斷任務的任務,如果有,進入新任務,如果沒有,恢復被中斷任務的上下文繼續執行。

        ucos本來在系統的各個任務之間調度得好好的,偶爾來了個中斷,就存一下任務上下文,執行以下上文所述的操作,只要中斷次數有限,系統還是可以正常穩定運行的。可是,一旦中斷非常頻繁,以至于中斷時間間隔和ucos存儲任務上下文、執行中斷服務程序、恢復任務上下文的時間很接近的話,顯然,ucos就基本上干不了有用的事情了,它會把幾乎所有時間消耗在存儲、恢復任務上下文這些“輔助性”的操作上。

        遙控報文是一連串射頻信號,每個上升沿都會觸發中斷,對于ucos和所選用MCU的主頻來說,遙控報文的頻繁中斷簡直就是狂轟亂炸,搞得操作系統很難招架。

        5

        行文至此,腦力敏捷的讀者可能會搶答說,既然如此,那就不用ucos了,解決方法很簡單,把操作系統去掉,再換成裸機形式不就可以了嗎?

        對此,我只想套用一下《賣拐》里本山大叔對腦袋大、脖子粗的伙夫范偉的一句評語:恭喜你,都會搶答了!

        我們都聽說過一個大致類似的典故,說有一個家伙想學鋼琴,打聽學費幾何,老師問清楚這個家伙有一點基礎之后,就故作高深地說,如果沒學過,學費1萬,如果學過,學費2萬。不等學員把詫異的眼睛睜圓,老師悠悠地自問自答,為什么需要多交費?原因無他,只是需要多花時間把你的錯誤習慣改過來而已。

        筆者在ucos的框架下已經寫了那么多程序,你提議讓我去掉ucos,然后改寫那些依賴于ucos的任務、信號、消息機制的諸多代碼?時日無多,徒奈其何,哪里有那么多的時間呢?最好是不僅能去掉ucos,把ucos切割開,同時盡量把其它相關代碼的修改量降到最低,不改那些依賴它的任務、信號機制的代碼!

        “怎么辦?最簡單也最困難,飯要粒粒分開,還要沾著蛋,嘿,蛋炒飯。”




        關鍵詞: 汽車 遙控

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 兴山县| 吴川市| 资源县| 子洲县| 胶州市| 萨迦县| 西丰县| 姜堰市| 江陵县| 郑州市| 祁阳县| 阜康市| 新巴尔虎左旗| 五常市| 呼和浩特市| 全椒县| 鄂伦春自治旗| 桐柏县| 永嘉县| 尚义县| 潼关县| 老河口市| 若尔盖县| 兖州市| 太仆寺旗| 织金县| 江山市| 伊春市| 台东县| 通城县| 安图县| 长沙市| 贺兰县| 原阳县| 兴安县| 三台县| 定西市| 河间市| 五常市| 饶河县| 卓资县|