低功耗設(shè)置工作總結(jié)_第1頁
低功耗設(shè)置工作總結(jié)_第2頁
低功耗設(shè)置工作總結(jié)_第3頁
免費預(yù)覽已結(jié)束,剩余1頁可下載查看

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、最近在搞一個實用性的 zigbee網(wǎng)絡(luò),網(wǎng)絡(luò)中使用到了終端節(jié)點進(jìn)行傳感器數(shù)據(jù)采集,因需 要電池供電,因此, 便用到了它的低功耗設(shè)置。在使用過程中碰到了種種疑惑和困難,從中總結(jié)出了一些經(jīng)驗,與大家分享,望對大家有所幫助,如有不對,請多指教。首先在使用低功耗時(對于終端節(jié)點而言end device),1. 先要將 TOOLS 文件夾中的 f8wConfig.cfg 中的-DRFD_RCVC_ALWAYS_OALSE (這里本來是TURE)如果這里不改,就無法讓接收器進(jìn)入睡眠2. 在預(yù)編譯中加入 POWER_SAVIN這里是為了讓協(xié)議棧中的節(jié)電選項預(yù)編譯通 過。在完成這兩項工作后,本以為已經(jīng)可以了。

2、上電試驗,但是怎么才能看出來進(jìn)入 沒進(jìn)入節(jié)能模式呢?無從考證。所以我們就需要找到睡眠函數(shù),看看它是怎樣進(jìn) 入睡眠的,在里面加入個LED控制,進(jìn)入睡覺狀態(tài)前LED關(guān)閉,喚醒時LED亮起, 這樣我們便可以清楚的看到CPU到底有沒有睡眠,睡眠了多久。查閱資料,得知,睡眠函數(shù)是這個叫做hal_sleep(next) 的函數(shù)。 Halsleep(next),根據(jù)下一個要做的任務(wù)(包括用戶任務(wù)和MAC任務(wù))在多久以后 需要去做(next就是表示多久以后要做),如果這個時間不為零,就說明時間未 到,CPL是空閑的,所以就去睡眠。具體代碼分析:voidtiint 16 timeout )uint32tiuco

3、ut;uirrt32jnacIimeDut = 0;HAL_TURN_ON_LED1 ():/* get nest OSAL timer expiration converted t o 320 usee units 把時間單位轉(zhuǎn)換咸 320 徽秒單位時tiiweout = HAL_SLEEP_M5_70_320U3(osal_tiaeout):"f巴系編任務(wù)到期時間賦給 TIMEOUTif (t ijfceout =- 0)timeout - MAC PurrNestTiirL&out0 :/* gtt next MAC timer expiiration */macTim

4、eout - IAC_PwrNext Tineout ():T一次 MAC 到期時間/* g$t lesser of two txifceout3 */if (mac Timeout != 0)昭(mac rime oat < timeout) tune out = macTimeout:注意,這里獲取任務(wù)到期時間是要獲取兩個的,因為MACE務(wù)和用戶設(shè)定的周期任務(wù)是分開的。并且比較哪個比較小,就按哪個時間,舉個例子,比如你再過5分鐘要接個電話,再過10分鐘要吃飯,你取10分鐘作為任務(wù)到期時間,那么也 就是說你認(rèn)為可以睡10分鐘,但是在你睡的這10分鐘里,電話漏掉了。就是這 個意思。接下來

5、 halPwrMgtMode = (timeout = 0) ? HAL_SLEEP_DEEP : HAL_SLEEP_TIMER;實際上是綜合一下MAC到期時間和用戶任務(wù)到期時間, 把其中小的值給timeout 然后判斷它是不是0.如果是說明有任務(wù)到期,不能進(jìn)入深度睡眠, halPwrMgtMode=HAL_SLEEP_TIMER 如果 timeout 不等于 0 說明 CPU空閑,可以深度睡 眠。#if ! defined (RTK_>K)昭 defined (NWK_AU70_P0LL)if (timeout > HAL SLEEP MS TO 32OUSCPN MIN SL

6、EEP TIME) | |(timeout -= 1 騷 zgPallRate = C)#elseif (timeout > HAL_SLEEP_MS_TO_320US(P1LMIN_SLEEP.TIMEJ) | |(timeout = 0)#e(ndi?上面這幾行程序,實際上是判斷timeout是不是大于系統(tǒng)設(shè)定的最小睡眠時間,你想,如果馬上就到期了,系統(tǒng)才睡一小會,沒有意義,所以這里做一個這樣的判斷。舉個例子,比如 你下一分鐘就要去上班了,再睡1分鐘也沒什么意義,不如直接現(xiàn)在就去上班。就是這個意思。繼續(xù)往下hallntStat e t ieri0, ienl. ien2:HAL_TU

7、EN_OFF_LED 1 0 :HAL_ASSERT (H/LL_INTEI?RUPTS_ME.ENAELED 0):HAL_DISABLE_INTEKSUPTS ();/* always use desp sleep"" to turn off radio VREG on CC253O #/if WC PrOffReaOlAC PWR SLEEP DEEP) = MAC SUCCESS)I這里其實就是進(jìn)入睡眠了,在進(jìn)入睡眠前,先把LED1關(guān)掉1丄.D -: -二:睡眠過程就不多說了,就是關(guān)掉RF收發(fā)器,關(guān)掉一些沒用的東西。當(dāng)運行到f ,B ww* ww»w -w

8、 w ww s- 9-v wwjp% * w mv w-» v -w% -v *w 性wHAL_SLEEP_SET_POWER_MODE(halPWfMjtMo)這里,會把 POWERMODE 設(shè)置成上面 halPwrMgtMode = (timeout =0)HAL_SLEEP_DEEP : HAL_SLEEP_TIMER; 也就是 halPwrMgtMode 的值,從而睡眠。再到后面HAL_SLEEP_IE_KESTORE tienO, ienl, ien2);/* disable sleep timer interrupt */HAL_SLEEP_TI1ER_DISABLE,I

9、NT ():flifdef HAL SLEEP DEBUG LED if (halPwrHgtJfcde = CC253O PM1)iHAL_TURN_OFF_LED10 :elseHAL_TURN_ON丄EDI ();fferidif字迂 def HAL SLEEP DEBUG LEDvwvwvs*./HAL_TURN_ON_LED3 ():#else/* use this t o turn LEDs badt on aft er sleep */HAL_TURN_OFF_LED3 ():#endif#if (defined HAL-KEY)強 (HAL.KEY = TRUE)/+ hand

10、le peripherals */ (void)HalKeyExitSlepO .#endif/* power ori the MAC: blocks until conleticn +/MA2 PivrOnReqi ():HAL_ENAELE_INIERMJP TS 0 :HAL SLEEP IE RESTOREtienO, icnL ien2):這里可以看到也就是睡眠結(jié)束,恢復(fù)工作。我們可以在這里再加上LED1 ON,使LED1點亮,標(biāo)志著設(shè)備喚醒了。這樣我們就可以知道設(shè)備何時睡眠的,何時喚醒了。然后燒錄程序,繼續(xù)試驗。結(jié)果發(fā)現(xiàn)LED燈閃的還是挺快的。這也就是說明有任務(wù)在不斷的執(zhí)行,那么是

11、哪些任務(wù)呢,上面已經(jīng)講過了,任務(wù)無非就是用戶任務(wù)和MAC任務(wù)。這樣我們先從用戶任務(wù)入手,一般需要不斷執(zhí)行的,無非就是按鍵掃描、傳感器掃描等,我們就去修改他們的任務(wù)到期時間。這里可以推薦大家一種方法,用戶任務(wù),需要不斷執(zhí)行的,肯定是要用到osal_start_timerEx函數(shù)的,那么我們就可以找這些地方,然后看看是不是要修改的地方,這樣定位會比較快一些,直接在edit選項卡中選擇search all選項,在搜索關(guān)鍵詞里寫上這個函數(shù)名,便可以迅 速定位要修改的地方。在這里,我的任務(wù)只有兩個需要不斷執(zhí)行的,一個是按鍵掃描,一個是傳感器數(shù)據(jù)發(fā)送。因為子節(jié)點我可以不用按鍵,于是直接把按鍵初始化注釋掉。

12、至于傳感器數(shù)據(jù)發(fā)送,暫時把時間間隔改成10秒。繼續(xù)上電,結(jié)果閃動確實慢了,嗯!有效果,可是燈還是會按照一秒一 次的頻率閃動,因為用戶任務(wù)已經(jīng)修改好了,那么應(yīng)該就是MAC任務(wù)在不斷喚醒了?;叵胍幌聦W(xué)過的概念,節(jié)點加入網(wǎng)絡(luò)以后,是要不斷輪詢數(shù)據(jù),難道是這個東西?于是就在 各大網(wǎng)站開始搜索關(guān)鍵詞,最終發(fā)現(xiàn)果然不假。Z-stack工程終端設(shè)備默認(rèn)情況下為電源管理關(guān)閉,自動輪詢消息這一功能是開啟的。這里 有三個輪詢選項,每一個都由一個不同的時間延遲參數(shù)控制。當(dāng)電源管理功能開啟后(添加POWER_SAVING),任一個輪詢選項的設(shè)置都會影響到睡眠模式。時間延遲的設(shè)置不能用 于DEEP skeep中的輪詢,

13、因此限制了降低功耗。這三個輪詢選項分別如下:f8wConfig.cfg里配置的:-DPOLL_RATE等這三個選項改為 0即可實現(xiàn)關(guān)閉輪巡。 當(dāng)然這樣子節(jié)點也就接收不到來自別人的無線信息了。53/* The number of nillicecondE t o wait between dat a 】 >4-DPOLLRATE=O/300Ci5556/* This is used aft e r receiving a dat a indie at ion t(57 * for Queued messages.in milliseconds讓*/59-DQUEUED_POLL_KATE=C/10OjO51/* This lk used aft e r receiving a dat a conf 1 mat ion52 # for r esp ons e ness age s- - . in. mi Hi sec onds53 */54-ERESPONS

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論