<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 牛人業(yè)話(huà) > 如何用單個(gè)定時(shí)器統一地實(shí)現多種定時(shí)應用?

如何用單個(gè)定時(shí)器統一地實(shí)現多種定時(shí)應用?

作者:馬步 時(shí)間:2020-02-24 來(lái)源:電子產(chǎn)品世界 收藏

據說(shuō),在中國,當老板的一般都有這么一個(gè)心態(tài):花最少的錢(qián),辦最多的事!

本文引用地址:http://dyxdggzs.com/article/202002/410197.htm

客戶(hù)大爺不能慢待,因為開(kāi)源和節流不可偏廢。政府機關(guān)必須打點(diǎn),畢竟“有關(guān)部門(mén)”掌握著(zhù)生殺大權。于是,這“節流之道”便落在了員工的頭頂上。

只是,人心惟危,道心惟微,被教育多年的打工者都不想做活雷鋒。節流手段過(guò)于明顯的話(huà),無(wú)異于殺雞取卵。于是,老板們八仙過(guò)海,各顯神通。

有的呢,深入落實(shí)我黨的群眾路線(xiàn),和群眾們打成一片,很好地實(shí)現了“到群眾中去,讓人民服務(wù)”的目的。

有的呢,擺出一副義薄云天的架勢,和員工們勾肩搭背、稱(chēng)兄道弟,以“情”感人,成功地將老實(shí)厚道的員工們加薪的請求扼殺在了萌芽狀態(tài)。

有的呢,善用權謀,假惺惺地放權,讓手下人產(chǎn)生“主人翁”意識,同時(shí)搞制衡之道,效仿春秋二桃殺三士的故事,讓員工們爭相效忠,總之,靠著(zhù)厚黑之道,將風(fēng)箏背后的那根線(xiàn)牢牢地掌控在自己手中。

也許是深知惹毛工程師的慘痛下場(chǎng),電子類(lèi)公司的老板對待工程師們更有人性一些。在畫(huà)大餅、吊胡蘿卜一段時(shí)間后也會(huì )忍著(zhù)心痛犒賞犒賞大家伙。但是,開(kāi)公司畢竟不是請客吃飯,還得有錢(qián)賺。

于是,不能拿人開(kāi)刀的老板們就把目光放到了物料上面。

如果一件產(chǎn)品的物料成本能節省10塊,賣(mài)出去1萬(wàn)件便是10萬(wàn),10萬(wàn)件便是100萬(wàn)。數學(xué)運算算得賊溜的老板們就這樣對物料清單下手了。

在小公司里面,老板們親自參與硬件設計不算什么稀罕事。老板經(jīng)常赤膊上陣,對硬件元器件選型指手畫(huà)腳。

作為一名軟件工程師,好整以暇地在旁邊欣賞硬件工程師被老板虐得敢怒不敢言的畫(huà)風(fēng)固然很愜意,但是一旦老板的魔爪伸向這顆關(guān)鍵物料之時(shí),我輩也難以事不關(guān)己高高掛起了。

那一日,晴空萬(wàn)里,艷陽(yáng)高照,不才正沐浴在午后的陽(yáng)光中,品著(zhù)茶香,感嘆著(zhù)歲月靜好:“其香悠遠兮扶搖登宵,其味空靜兮潛藏于竅!”

不才搖著(zhù)頭,晃著(zhù)腦,感覺(jué)到歡快的自我就快要出竅,全然沒(méi)有發(fā)現悄悄來(lái)到面前的領(lǐng)導。

“咳咳”,一聲短促的咳嗽,帶著(zhù)熟悉的壓迫感將我從浮生若夢(mèng)中驚醒。不才趕緊從半躺的姿勢中坐起,差點(diǎn)閃著(zhù)媳婦所言“用進(jìn)廢退”的老腰。

“馬步君,看看我手里這個(gè)板子?!鳖I(lǐng)導帶著(zhù)看似神秘莫測、其實(shí)沒(méi)有什么意義的微笑,把一個(gè)電路板遞給了我。

不消說(shuō),來(lái)任務(wù)了!從天堂掉落人間的我心中一個(gè)咯噔,看著(zhù)手里的電路板,內心蕩漾個(gè)不停:“這板子看著(zhù)不算復雜,這等小活一般是不會(huì )安排給我的,莫非領(lǐng)導開(kāi)恩?”

這邊廂,不才心中火光電閃,轉個(gè)不停,那邊廂,領(lǐng)導打開(kāi)了話(huà)匣子,講起了原委。

原來(lái),這是別的公司給我司一個(gè)客戶(hù)批量供貨的產(chǎn)品,現在客戶(hù)要求對產(chǎn)品進(jìn)行升級,希望在硬件電路基本不改動(dòng)的情況下,添加一些功能,客戶(hù)為了保證供貨安全,把我司列入了備胎供應商之列。

具體情況交代完之后,領(lǐng)導把不知從哪里搞來(lái)的原產(chǎn)品電路圖發(fā)給了我,讓我評估一下不改電路、完全抄板的情況下,能不能實(shí)現產(chǎn)品升級。

“我真傻,真的,”事后,我經(jīng)常抬起帥氣逼人的眼睛來(lái),祥林嫂似對同事說(shuō)?!拔覇沃涝谠O計新產(chǎn)品的時(shí)候為了控制成本,領(lǐng)導會(huì )插手的選型;我不知道升級別人產(chǎn)品的時(shí)候也會(huì )這樣?!?/p>

當我把“不需要改電路,只需要換一下引腳兼容、資源更豐富一點(diǎn)的”的結論告訴領(lǐng)導時(shí),領(lǐng)導及時(shí)地制止了我的“無(wú)理要求”。

“客戶(hù)是把產(chǎn)品升級了,但是產(chǎn)品的價(jià)格基本未動(dòng),加的功能也不算太多,MCU就不要換了吧。想想辦法,能省一塊是一塊嘛!”

看著(zhù)領(lǐng)導那副欠揍的笑臉,我據理力爭,“天之道,損有余而補不足......”

“別吊書(shū)袋子了,硬件資源不夠,軟件功底來(lái)湊。所以才把這么艱巨的任務(wù)交給你嘛!”

得,認命吧!

資源受限,編程自然處處是挑戰。具體到這個(gè)產(chǎn)品上,我發(fā)現挑戰最大的一點(diǎn)便是:定時(shí)應用特別多,MCU的又特別地少。

硬件的數量遠遠少于定時(shí)應用的數量,顯然無(wú)法為每一個(gè)定時(shí)應用單獨分配一個(gè)硬件。本來(lái)一個(gè)蘿卜一個(gè)坑最好辦,現在資源不夠怎么辦?

不才就不賣(mài)關(guān)子了,方案當然是用軟件的有余彌補硬件的不足了。

為了各個(gè)定時(shí)應用的起點(diǎn)相同、步調一致,同時(shí)為了編程的統一,最好的方式便是在單個(gè)硬件定時(shí)器的基礎上模擬實(shí)現多個(gè)軟件定時(shí)器,以前臺硬件定時(shí)器中斷服務(wù)程序和后臺軟件定時(shí)器管理程序相結合,實(shí)現單次定時(shí)、多次定時(shí)和循環(huán)定時(shí)應用。

不才不屑藏私,下面就把具體的方案設計給各位看官們分享出來(lái)。

先跟大家建立這么一個(gè)概念:

程序設計=數據結構+運算

具體到這里,數據結構便是“軟件定時(shí)器”,運算便是中斷服務(wù)程序(ISR)和定時(shí)管理程序。

軟件定時(shí)器是“結構體”形式,根據定時(shí)應用的特點(diǎn)及分類(lèi),設計一種涵蓋單次定時(shí)、多次定時(shí)和循環(huán)定時(shí)三種類(lèi)型定時(shí)的軟件定時(shí)器節點(diǎn)的數據結構,使用一個(gè)靜態(tài)分配的軟件定時(shí)器節點(diǎn)數組來(lái)定義所有的定時(shí)任務(wù)。

這個(gè)結構體有以下幾個(gè)成員變量:軟件定時(shí)器ID、激活狀態(tài)、定時(shí)次數、超時(shí)次數, 循環(huán)標識,定時(shí)值, 計時(shí)值, 回調函數,這些成員變量的意義大多數可以“顧名思義”,這里便不贅述了。

下面開(kāi)始叨ISR和定時(shí)管理程序。

ISR和定時(shí)管理程序是靠一個(gè)叫“相對計時(shí)時(shí)間”(記為T(mén)imer_ticked)的信使扭結在一起的,它表示未被軟件定時(shí)器計時(shí)的時(shí)間。

MCU上電初始化時(shí),設置硬件定時(shí)器的中斷周期為T(mén)并使能中斷,硬件定時(shí)器以T為時(shí)間間隔,觸發(fā)MCU執行ISR。在ISR中,累加相對計時(shí)時(shí)間的數值,累加值為T(mén),即Timer_ticked += T。

定時(shí)器管理程序完成對軟件定時(shí)器節點(diǎn)數組的操作后,清零相對計時(shí)時(shí)間,所以,只要程序設計地合理,Timer_ticked不會(huì )很大,超過(guò)20ms基本可以確定您的程序設計有毛病了。

總之,通過(guò)相對計時(shí)時(shí)間,保證了所有軟件定時(shí)器節點(diǎn)的同步計時(shí)和準確計時(shí)。

ISR當然簡(jiǎn)單,接下來(lái)便是稍微復雜一些的定時(shí)管理程序了。

定時(shí)管理程序是管理所有定時(shí)應用的,每個(gè)定時(shí)應用對應上述結構體數組里的一個(gè)成員,可以以“節點(diǎn)”來(lái)稱(chēng)呼它。

定時(shí)管理程序是在后臺循環(huán)執行的,它每次都會(huì )檢查所有定時(shí)器節點(diǎn)的狀態(tài),如果該定時(shí)器節點(diǎn)處于空閑狀態(tài),它就跳過(guò)它不做處理,如果處于激活狀態(tài),它就增加該定時(shí)器節點(diǎn)的計時(shí)值(累加值為T(mén)imer_ticked)。

然后判斷計時(shí)值是否超過(guò)了所設定的定時(shí)值。如果沒(méi)超過(guò),那就跳過(guò)它不做處理,如果超過(guò)了,先調用它的定時(shí)回調函數,然后判斷該節點(diǎn)是否為循環(huán)定時(shí)器。

如果不是循環(huán)定時(shí),跳過(guò)它不做處理,如果是,則需要重啟本定時(shí)器節點(diǎn)。

按照這種方法處理完所有定時(shí)器節點(diǎn)之后,便可以退出本次定時(shí)管理程序了。

講到這里,各位看官應該看明白了吧.

小米手機物美價(jià)廉,沒(méi)來(lái)由地擔上了“低價(jià)誤國”的罵名。國外的MCU廠(chǎng)商倒是雞賊得很,一分錢(qián)一分貨,資源豐富一點(diǎn),價(jià)格就漲上去了,赤果果的資本家嘴臉。

所以,在成本的約束以及領(lǐng)導的威嚴下,在一個(gè)資源受限的MCU上搗鼓代碼成了嵌入式軟件工程師日常工作的常態(tài)。不過(guò),不要抱怨,也不用憂(yōu)慮和焦心,辦法總比困難多。

總的原則就是:硬件不夠,軟件來(lái)湊。

比如對于多個(gè)定時(shí)應用,單定時(shí)器就足夠!



關(guān)鍵詞: MCU 定時(shí)器

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>