新聞中心

EEPW首頁 > 牛人業(yè)話 > 頻繁中斷狂轟亂炸,操作系統(tǒng)很難招架

頻繁中斷狂轟亂炸,操作系統(tǒng)很難招架

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

3

本文引用地址:http://m.butianyuan.cn/article/201812/396004.htm

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

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

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

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

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

4

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

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

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

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

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

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

ucos本來在系統(tǒng)的各個任務之間調度得好好的,偶爾來了個中斷,就存一下任務上下文,執(zhí)行以下上文所述的操作,只要中斷次數(shù)有限,系統(tǒng)還是可以正常穩(wěn)定運行的??墒牵坏┲袛喾浅nl繁,以至于中斷時間間隔和ucos存儲任務上下文、執(zhí)行中斷服務程序、恢復任務上下文的時間很接近的話,顯然,ucos就基本上干不了有用的事情了,它會把幾乎所有時間消耗在存儲、恢復任務上下文這些“輔助性”的操作上。

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

5

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

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

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

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

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




關鍵詞: 汽車 遙控

評論


相關推薦

技術專區(qū)

關閉