131 1300 0010
其他
當(dāng)前位置: 首頁>> 元件技術(shù)>>其他>>
  • 導(dǎo)航欄目
  • 二極管
  • 整流橋
  • MOS管
  • 其他
  • 單個(gè)定時(shí)器實(shí)現(xiàn)多種定時(shí)應(yīng)用的解決方案
    單個(gè)定時(shí)器實(shí)現(xiàn)多種定時(shí)應(yīng)用的解決方案
  • 單個(gè)定時(shí)器實(shí)現(xiàn)多種定時(shí)應(yīng)用的解決方案
  •   發(fā)布日期: 2020-03-10  瀏覽次數(shù): 1,560

    據(jù)說,在中國,當(dāng)老板的一般都有這么一個(gè)心態(tài):花最少的錢,辦最多的事!

    客戶大爺不能慢待,因?yàn)殚_源和節(jié)流不可偏廢。政府機(jī)關(guān)必須打點(diǎn),畢竟“有關(guān)部門”掌握著生殺大權(quán)。于是,這“節(jié)流之道”便落在了員工的頭頂上。

     

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

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

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

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

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

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

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

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

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

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

    不才搖著頭,晃著腦,感覺到歡快的自我就快要出竅,全然沒有發(fā)現(xiàn)悄悄來到面前的領(lǐng)導(dǎo)。

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

    “馬步君,看看我手里這個(gè)板子。”領(lǐng)導(dǎo)帶著看似神秘莫測、其實(shí)沒有什么意義的微笑,把一個(gè)電路板遞給了我。

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

    這邊廂,不才心中火光電閃,轉(zhuǎn)個(gè)不停,那邊廂,領(lǐng)導(dǎo)打開了話匣子,講起了原委。

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

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

    “我真傻,真的,”事后,我經(jīng)常抬起帥氣逼人的眼睛來,祥林嫂似對同事說。“我單知道在設(shè)計(jì)新產(chǎn)品的時(shí)候?yàn)榱丝刂瞥杀?,領(lǐng)導(dǎo)會(huì)插手MCU的選型;我不知道升級別人產(chǎn)品的時(shí)候也會(huì)這樣。”

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

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

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

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

    得,認(rèn)命吧!

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

    硬件定時(shí)器的數(shù)量遠(yuǎn)遠(yuǎn)少于定時(shí)應(yīng)用的數(shù)量,顯然無法為每一個(gè)定時(shí)應(yīng)用單獨(dú)分配一個(gè)硬件定時(shí)器。本來一個(gè)蘿卜一個(gè)坑最好辦,現(xiàn)在資源不夠怎么辦?

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

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

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

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

    程序設(shè)計(jì)=數(shù)據(jù)結(jié)構(gòu)+運(yùn)算

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

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

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

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

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

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

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

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

    ISR當(dāng)然簡單,接下來便是稍微復(fù)雜一些的定時(shí)管理程序了。

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

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

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

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

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

    講到這里,各位看官應(yīng)該看明白了吧.

    小米手機(jī)物美價(jià)廉,沒來由地?fù)?dān)上了“低價(jià)誤國”的罵名。國外的MCU廠商倒是雞賊得很,一分錢一分貨,資源豐富一點(diǎn),價(jià)格就漲上去了,赤果果的資本家嘴臉。

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

    總的原則就是:硬件不夠,軟件來湊。

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


  • ·上一篇:
    ·下一篇:
  • 其他關(guān)聯(lián)資訊
    深圳市日月辰科技有限公司
    地址:深圳市寶安區(qū)松崗鎮(zhèn)潭頭第二工業(yè)城A區(qū)27棟3樓
    電話:0755-2955 6626
    傳真:0755-2978 1585
    手機(jī):131 1300 0010
    郵箱:hu@szryc.com

    深圳市日月辰科技有限公司 版權(quán)所有:Copyright?2010-2023 www.kqne.cn 電話:13113000010 粵ICP備2021111333號(hào)