0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

嵌入式業(yè)務(wù)軟件設(shè)計(jì)介紹

麥辣雞腿堡 ? 來(lái)源:嵌入式系統(tǒng) ? 作者:嵌入式系統(tǒng) ? 2023-12-07 15:09 ? 次閱讀

業(yè)務(wù)軟件設(shè)計(jì)

低功耗從硬件上能夠解決一部分,但單純依靠硬件肯定是不行的,需要軟件的密切配合,才能達(dá)到最好的效果。以上是從硬件驅(qū)動(dòng)層面的,一般情況下都比較關(guān)注,但實(shí)際上軟件業(yè)務(wù)層的靈活性高,發(fā)掘低功耗的效果比硬件低功耗本身的效果更加顯著,通俗地講,底層硬件辛辛苦苦地優(yōu)化設(shè)計(jì)節(jié)省的效果,遠(yuǎn)遠(yuǎn)不如軟件設(shè)計(jì)得好的表現(xiàn)。

從軟件的業(yè)務(wù)邏輯、產(chǎn)品需求方面的設(shè)計(jì),在功耗方面更有意想不到的效果,軟件功耗優(yōu)化簡(jiǎn)單總結(jié)就是“能睡就睡”。

4.1 任務(wù)周期化

一個(gè)嵌入式產(chǎn)品包括很多子功能、子任務(wù),一個(gè)應(yīng)用是對(duì)若干服務(wù)的調(diào)用實(shí)現(xiàn)的。這里服務(wù)可以是硬件服務(wù),比如AD電壓采樣、UART串口通訊,也可以是軟件服務(wù),比如TCP/IP網(wǎng)絡(luò)通信等。簡(jiǎn)單的功能如CRC校驗(yàn),純軟件實(shí)現(xiàn),函數(shù)運(yùn)行立即獲得結(jié)果,對(duì)功耗無(wú)所謂影響;復(fù)雜的功能,盡量使用任務(wù)的方式來(lái)實(shí)現(xiàn),并不是特指操作系統(tǒng)的task或者thread,可以理解為一個(gè)流程,即一個(gè)子功能運(yùn)行的完整過(guò)程。一件事有始有終就可以根據(jù)需要循環(huán)反復(fù),周期運(yùn)行的任務(wù),明確運(yùn)行的起止時(shí)間點(diǎn),區(qū)分運(yùn)行與非運(yùn)行狀態(tài)就能更好的優(yōu)化,比如減少運(yùn)行持續(xù)時(shí)間或者其中大電流的時(shí)間段,在功耗方面效果比較明顯。

4.2 休眠自理與協(xié)調(diào)

將整個(gè)嵌入式軟件系統(tǒng)分成了很多周期性工作的小任務(wù),它們可能是交錯(cuò)的或者毫無(wú)關(guān)系并行的。從本質(zhì)上說(shuō),每個(gè)小任務(wù)只需關(guān)注自身的起止時(shí)間點(diǎn)。系統(tǒng)的功耗管理就是為每個(gè)任務(wù)的功耗進(jìn)行管理,整體在一個(gè)有效的協(xié)調(diào)方式下才能做到功耗最小?;谌蝿?wù)的功耗管理實(shí)際上分成兩個(gè)部分,微觀角度單任務(wù)自身的功耗管理,和宏觀角度多任務(wù)的休眠協(xié)調(diào)。

從微觀角度來(lái)看,一個(gè)任務(wù)能獨(dú)立完成自己的功能,任務(wù)中所有的步驟都是確定的,都是“自己說(shuō)了算的”,對(duì)外界來(lái)說(shuō)是“黑盒子”,對(duì)低功耗的要求,不外乎以下幾種情形:

(1)、任務(wù)執(zhí)行的過(guò)程中不允許休眠,因此任務(wù)的開(kāi)頭和結(jié)尾處要設(shè)置標(biāo)志,告知協(xié)調(diào)系統(tǒng),“只要我不同意,就不允許系統(tǒng)休眠”。 (2)、任務(wù)執(zhí)行的過(guò)程中,某些階段允許休眠,某些階段不允許休眠;任務(wù)的執(zhí)行過(guò)程中,不同階段允許不同的休眠等級(jí)。 (3)、任務(wù)執(zhí)行的過(guò)程中,不在乎是否休眠。

三類(lèi)任務(wù)同時(shí)存在于系統(tǒng)中,第一類(lèi)任務(wù)是相當(dāng)霸道的,只要它在執(zhí)行,根本不允許休眠;第二類(lèi)任務(wù)既完成了任務(wù),又兼顧了休眠;第三類(lèi)任務(wù)基本上可當(dāng)做空氣無(wú)視。系統(tǒng)任務(wù)設(shè)計(jì)時(shí)應(yīng)盡可能編寫(xiě)后兩類(lèi)任務(wù),避免或者嘗試拆分第一類(lèi)任務(wù)。

從宏觀角度來(lái)看,任意時(shí)刻可能有多個(gè)任務(wù)同時(shí)在執(zhí)行,每個(gè)任務(wù)對(duì)休眠的需求都是不同的。如果要設(shè)立一個(gè)協(xié)調(diào)機(jī)制,該怎么辦呢?每個(gè)任務(wù)按最低需求,隨時(shí)來(lái)休眠協(xié)調(diào)機(jī)構(gòu)簽到投票,表明自身當(dāng)前能夠容忍的最低功耗對(duì)應(yīng)的休眠等級(jí),休眠協(xié)調(diào)機(jī)構(gòu)的仲裁者定時(shí)或輪詢檢查所有任務(wù)的投票結(jié)果,找到最小的休眠等級(jí),類(lèi)似水桶的最矮一環(huán)作為“共識(shí)”,然后進(jìn)入相應(yīng)的休眠等級(jí)。

如果有人投了“不休眠”的票,仲裁就只能放棄休眠。所以,每一個(gè)任務(wù)都應(yīng)該是一個(gè)負(fù)責(zé)的任務(wù),都應(yīng)該根據(jù)自己的不同步驟及時(shí)的更新自己對(duì)休眠的容忍度,從而保證投票能夠達(dá)成有意義的結(jié)果。

這種機(jī)制實(shí)現(xiàn)也很容易,比如

//微信公眾號(hào):嵌入式系統(tǒng)

uint16_t sleep_enable = 0xFFFF; //0xFFFF表示可以進(jìn)入休眠

uint16_t sleep_enable=0xFFFF,表示系統(tǒng)可以進(jìn)入休眠,每個(gè)任務(wù)獨(dú)立的操作相應(yīng)的一位,禁止休眠時(shí)清0,允許休眠則置1。休眠協(xié)調(diào)機(jī)制即定時(shí)查詢sleep_enable是否為0xFFFF,可以在main輪詢或RTOS的待機(jī)任務(wù)查詢,進(jìn)行休眠的進(jìn)出。

任務(wù)的劃分合理,盡量允許休眠,通過(guò)這種協(xié)商機(jī)制可以解決“能睡就睡”的問(wèn)題。

4.3 任務(wù)等待合并

設(shè)備運(yùn)行中必然存在定時(shí)喚醒的任務(wù),多個(gè)定時(shí)任務(wù)隨機(jī)的在任意時(shí)刻喚醒工作,導(dǎo)致頻繁退出休眠。這種情況下,在最大允許延遲的情況下,多個(gè)任務(wù)可以在一次喚醒全部執(zhí)行。比如去超市買(mǎi)菜,肯定是一次把當(dāng)天需要的菜都買(mǎi)了,而不是每餐前都去買(mǎi),一天到晚跑超市。在4G物聯(lián)網(wǎng)產(chǎn)品應(yīng)用,比如設(shè)備每3分鐘需要向服務(wù)器發(fā)送一個(gè)TCP/IP心跳包,同時(shí)傳感器每10秒采集一個(gè)數(shù)據(jù)也需要上報(bào)服務(wù)器,可以實(shí)現(xiàn)為數(shù)據(jù)緩存,等到3分鐘的定時(shí)器溢出上報(bào)時(shí),將采集的多組傳感器數(shù)據(jù)組合一并上報(bào),減少無(wú)線網(wǎng)絡(luò)模塊喚醒的次數(shù)。

4.4 及時(shí)止損

因?yàn)榄h(huán)境或外設(shè)組合不同,可能在某些時(shí)間段無(wú)法實(shí)現(xiàn)需求,或者結(jié)合當(dāng)前信息大概率無(wú)法實(shí)現(xiàn),或者硬件部分故障,軟件監(jiān)測(cè)到這種異常后,需要及時(shí)止損,減少不必要的消耗。例如GNSS衛(wèi)星定位,其屬性就是必須在開(kāi)闊區(qū)域才能定位,如果設(shè)備開(kāi)啟GNSS但發(fā)現(xiàn)信號(hào)很差,可初步判斷當(dāng)前位置可能在室內(nèi),即使繼續(xù)工作也不能定位,可以立刻關(guān)閉GNSS節(jié)省電量;當(dāng)然產(chǎn)品在需求層面需要考慮不定位的其他操作?;蛘?a href="http://www.ttokpm.com/v/tag/1301/" target="_blank">通信中確認(rèn)外設(shè)不存在或者損壞,就沒(méi)必要繼續(xù)供電定時(shí)交互,進(jìn)行異常報(bào)警即可。

4.5 需求層面

在需求定義時(shí),充分考慮某個(gè)任務(wù)或外設(shè)工作的起止要求,避免長(zhǎng)時(shí)間進(jìn)行無(wú)效工作。例如可以根據(jù)加速度傳感器判斷設(shè)備是否處于運(yùn)動(dòng)狀態(tài)在開(kāi)啟監(jiān)控,或者通過(guò)紅外或聲控判斷有人接近才開(kāi)啟工作。這種都是通過(guò)產(chǎn)品定義,在需求層面組合,滿足要求才喚醒工作,不滿足則及時(shí)停止進(jìn)入休眠,當(dāng)然也可能增加硬件成本。部分設(shè)備也可以考慮使用場(chǎng)地增加太陽(yáng)能充電板,開(kāi)源節(jié)流。

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 驅(qū)動(dòng)
    +關(guān)注

    關(guān)注

    12

    文章

    1790

    瀏覽量

    84906
  • 硬件
    +關(guān)注

    關(guān)注

    11

    文章

    3112

    瀏覽量

    65846
  • 嵌入式軟件
    +關(guān)注

    關(guān)注

    4

    文章

    238

    瀏覽量

    26550
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    嵌入式環(huán)境下軟件設(shè)計(jì)的特點(diǎn)是什么

    詳見(jiàn)微信公眾號(hào),二進(jìn)制人生。目錄:嵌入式環(huán)境下軟件設(shè)計(jì)的特點(diǎn)設(shè)計(jì)目標(biāo)設(shè)計(jì)思路多進(jìn)程解耦嵌入式環(huán)境下軟件設(shè)計(jì)的特點(diǎn)要談嵌入式
    發(fā)表于 11-09 06:31

    嵌入式軟件設(shè)計(jì)和單片機(jī)軟件設(shè)計(jì)的區(qū)別是什么?

    嵌入式軟件設(shè)計(jì)和單片機(jī)軟件設(shè)計(jì)目前的應(yīng)用很多,這兩者有什么區(qū)別? 嵌入式主要說(shuō)的什么?結(jié)構(gòu)是啥!
    發(fā)表于 11-10 07:46

    基于ARM的嵌入式系統(tǒng)軟件設(shè)計(jì)

    嵌入式軟件的啟動(dòng)代碼嵌入式軟件開(kāi)發(fā)關(guān)鍵技術(shù)嵌入式實(shí)時(shí)操作系統(tǒng)程序的鏈接定位軟件調(diào)試技術(shù)http:
    發(fā)表于 03-25 15:03 ?203次下載
    基于ARM的<b class='flag-5'>嵌入式</b>系統(tǒng)<b class='flag-5'>軟件設(shè)計(jì)</b>

    ARM嵌入式系統(tǒng)開(kāi)發(fā)-軟件設(shè)計(jì)與優(yōu)化

    ARM嵌入式系統(tǒng)開(kāi)發(fā)-軟件設(shè)計(jì)與優(yōu)化
    發(fā)表于 02-11 09:57 ?94次下載
    ARM<b class='flag-5'>嵌入式</b>系統(tǒng)開(kāi)發(fā)-<b class='flag-5'>軟件設(shè)計(jì)</b>與優(yōu)化

    基于ARM的嵌入式軟件設(shè)計(jì)

    基于ARM的嵌入式軟件設(shè)計(jì) 駐留監(jiān)控軟件Resident Monitors 是一段運(yùn)行在目標(biāo)板上的程序集成開(kāi)發(fā)環(huán)境中的調(diào)試模塊通過(guò)以太網(wǎng)口并行端口或者串行端口等通訊端口與
    發(fā)表于 03-31 14:59 ?44次下載

    嵌入式USB主機(jī)設(shè)計(jì)(硬件設(shè)計(jì)和軟件設(shè)計(jì))

    嵌入式USB主機(jī)設(shè)計(jì)(硬件設(shè)計(jì)和軟件設(shè)計(jì)) 嵌入式USB主機(jī)硬件設(shè)計(jì)選用廉價(jià)的51系列單片機(jī)(89C52)控制US
    發(fā)表于 11-26 13:58 ?1284次閱讀
    <b class='flag-5'>嵌入式</b>USB主機(jī)設(shè)計(jì)(硬件設(shè)計(jì)和<b class='flag-5'>軟件設(shè)計(jì)</b>)

    如何查找嵌入式軟件設(shè)計(jì)中的缺陷

    如何查找嵌入式軟件設(shè)計(jì)中的缺陷 本文將介紹如何避免那些隱蔽然而常見(jiàn)的錯(cuò)誤,并介紹的幾個(gè)技巧幫助工程師發(fā)現(xiàn)軟件中隱藏的錯(cuò)
    發(fā)表于 04-09 14:37 ?708次閱讀

    基于ARM的嵌入式系統(tǒng)軟件設(shè)計(jì)部分

    基于ARM的嵌入式系統(tǒng)軟件設(shè)計(jì)部分
    發(fā)表于 01-14 12:32 ?15次下載

    ARM的嵌入式系統(tǒng)軟件設(shè)計(jì)

    ARM的嵌入式系統(tǒng)軟件設(shè)計(jì)
    發(fā)表于 10-27 15:00 ?8次下載
    ARM的<b class='flag-5'>嵌入式</b>系統(tǒng)<b class='flag-5'>軟件設(shè)計(jì)</b>

    嵌入式軟件是什么意思_嵌入式軟件的分類(lèi)有哪些

    本文首先闡述了嵌入式軟件的概念,其次介紹嵌入式軟件的特征,最后介紹
    發(fā)表于 08-31 15:54 ?1.6w次閱讀

    嵌入式軟件設(shè)計(jì)工具應(yīng)該如何選擇

    通常取決于你所使用的嵌入式軟件設(shè)計(jì)工具。你需要工具來(lái)快速有效地構(gòu)建軟件,那么選擇嵌入式軟件設(shè)計(jì)工具需要考慮哪些因素呢,以下是需要考慮的四個(gè)最
    發(fā)表于 12-23 12:26 ?11次下載

    基于RTOS的嵌入式系統(tǒng)軟件設(shè)計(jì)

    基于RTOS的嵌入式系統(tǒng)軟件設(shè)計(jì)說(shuō)明。
    發(fā)表于 04-19 14:38 ?17次下載

    嵌入式系統(tǒng)軟件設(shè)計(jì)教材資料

    嵌入式系統(tǒng)軟件設(shè)計(jì)教材資料免費(fèi)下載。
    發(fā)表于 04-12 14:44 ?5次下載

    基于嵌入式WEB的電站數(shù)據(jù)動(dòng)態(tài)監(jiān)控軟件設(shè)計(jì)

    電子發(fā)燒友網(wǎng)站提供《基于嵌入式WEB的電站數(shù)據(jù)動(dòng)態(tài)監(jiān)控軟件設(shè)計(jì).pdf》資料免費(fèi)下載
    發(fā)表于 10-24 10:01 ?0次下載
    基于<b class='flag-5'>嵌入式</b>WEB的電站數(shù)據(jù)動(dòng)態(tài)監(jiān)控<b class='flag-5'>軟件設(shè)計(jì)</b>

    嵌入式軟件設(shè)計(jì)的原則分享

    嵌入式軟件開(kāi)發(fā)如果具有更好的閱讀性、擴(kuò)展性以及維護(hù)性,就需要考慮很多因素。今天給大家分享幾個(gè)嵌入式軟件設(shè)計(jì)的原則。
    發(fā)表于 02-25 10:54 ?498次閱讀
    <b class='flag-5'>嵌入式</b><b class='flag-5'>軟件設(shè)計(jì)</b>的原則分享