使用CH582m,藍(lán)牙m(xù)esh中,配網(wǎng)完成就進(jìn)入睡眠模式 LowPower_Sleep(RB_PWR_RAM30K | RB_PWR_RAM2K);
設(shè)置喚醒源為GPIO喚醒,喚醒后發(fā)現(xiàn)程序就沒有進(jìn)入事件處理函數(shù)。睡眠之前又沒有把任務(wù)停掉,為什么喚醒后任務(wù)都停了呢?
使用CH582m,藍(lán)牙m(xù)esh中,配網(wǎng)完成就進(jìn)入睡眠模式 LowPower_Sleep(RB_PWR_RAM30K | RB_PWR_RAM2K);
設(shè)置喚醒源為GPIO喚醒,喚醒后發(fā)現(xiàn)程序就沒有進(jìn)入事件處理函數(shù)。睡眠之前又沒有把任務(wù)停掉,為什么喚醒后任務(wù)都停了呢?
您好,如果需要TMOS系統(tǒng)自動(dòng)根據(jù)事件喚醒,不支持自行調(diào)用LowPower_Sleep函數(shù)進(jìn)行休眠。如果需要低功耗節(jié)點(diǎn)與朋友節(jié)點(diǎn)交互,請(qǐng)參考adv_vendor_low_power工程。如果不需要低功耗節(jié)點(diǎn)功能,僅需要低功耗,可以將HAL_SLEEP置位,但不推薦這樣使用,易導(dǎo)致丟包及網(wǎng)絡(luò)信息不同步而無法通信。
意思是跑TMOS的程序是不支持自己調(diào)用LowPower_Sleep函數(shù)的嗎
您好,您對(duì)于低功耗的需求是什么樣的,用的哪個(gè)代碼調(diào)試的呢,您提供的信息越多越能幫助我們判斷。一般除了低功耗節(jié)點(diǎn),其他節(jié)點(diǎn)都要求是常供電的。
如果使用的是低功耗節(jié)點(diǎn),在配網(wǎng)后,使能低功耗功能前,就手動(dòng)調(diào)用LowPower_Sleep進(jìn)入休眠是可以的,GPIO喚醒的話更推薦shutdown,功耗更低,且喚醒后復(fù)位,TMOS系統(tǒng)重新分配事件啟用事件,一般不會(huì)有影響。
TMOS系統(tǒng)安排的事件執(zhí)行時(shí)間是24小時(shí)內(nèi)的基于32K晶振的一個(gè)絕對(duì)值,如果任務(wù)啟用后沒有停掉,GPIO喚醒后錯(cuò)過事件執(zhí)行的絕對(duì)時(shí)間會(huì)有異常,所以說如果需要TMOS系統(tǒng)自動(dòng)根據(jù)事件喚醒(即啟用HAL_SLEEP),就不支持手動(dòng)調(diào)用LowPower_Sleep函數(shù)進(jìn)行休眠。
使用的是?adv_vendor 代碼進(jìn)行調(diào)試的;想要實(shí)現(xiàn)的功能是,節(jié)點(diǎn)配網(wǎng)完成后進(jìn)入低功耗休眠,每天設(shè)定一個(gè)固定的時(shí)間喚醒起來把數(shù)據(jù)發(fā)送給指定節(jié)點(diǎn)后又進(jìn)入休眠。喚醒的時(shí)間可能只有一兩分鐘。而且整個(gè)mesh網(wǎng)絡(luò)中只用一個(gè)設(shè)備是用來接收數(shù)據(jù)的,其他的全部節(jié)點(diǎn)都是需要長時(shí)間休眠的。低功耗節(jié)點(diǎn)又要和朋友節(jié)點(diǎn)一起使用,所以沒法使用低功耗節(jié)點(diǎn)。
我看LowPower_Sleep模式的描述是,喚醒后程序會(huì)繼續(xù)運(yùn)行。但是現(xiàn)在我調(diào)用LowPower_Sleep進(jìn)入休眠喚醒后所有的任務(wù)都沒有跑了,又得重新初始化才可以運(yùn)行。用shutdown的話,喚醒后都復(fù)位了,上一次的數(shù)據(jù)就又被初始化掉了。
您好,“每天設(shè)定一個(gè)固定的時(shí)間喚醒起來把數(shù)據(jù)發(fā)送給指定節(jié)點(diǎn)后又進(jìn)入休眠,喚醒的時(shí)間可能只有一兩分鐘?!保@個(gè)功能可以用低功耗節(jié)點(diǎn)實(shí)現(xiàn),也可以用adv_vendor實(shí)現(xiàn),推薦是用低功耗功能+朋友功能的組合實(shí)現(xiàn),能保證網(wǎng)絡(luò)信息的同步。如果是用adv_vendor+手動(dòng)管理低功耗實(shí)現(xiàn),注意網(wǎng)絡(luò)中的IV值更新會(huì)改變安全廣播消息中的數(shù)值,一天喚醒一次,一次至少持續(xù)掃描廣播包10s,以接收包含IV信息的廣播。
“調(diào)用LowPower_Sleep進(jìn)入休眠喚醒后所有的任務(wù)都沒有跑了,又得重新初始化才可以運(yùn)行?!?,手動(dòng)調(diào)用LowPower_Sleep會(huì)打亂TMOS系統(tǒng)的運(yùn)行,可以在手動(dòng)調(diào)用LowPower_Sleep前調(diào)用tmos_stop_task關(guān)閉所有TMOS事件,喚醒后再次啟用事件,或者重新初始化。如果不使用ShutDown僅僅是為了避免變量數(shù)據(jù)的丟失,可以將變量存放在指定RAM地址,保持RAM供電的情況下,復(fù)位不會(huì)重置變量數(shù)值,見下篇博客。