ch582開啟HAL_SLEEP睡眠模式,通過gpio中斷喚醒,如何再次進(jìn)入睡眠。

ch582開啟HAL_SLEEP睡眠模式,通過gpio中斷喚醒(就是按了一個(gè)按鈕),執(zhí)行中斷函數(shù),中斷函數(shù)執(zhí)行完后,我期望它繼續(xù)進(jìn)入睡眠,等待tmos的rtc調(diào)度喚醒。

但是看電流有1.6毫安,應(yīng)該是系統(tǒng)處于空閑狀態(tài),并沒有睡過去。

如何讓他執(zhí)行完中斷后再次睡眠,以省電?



通過實(shí)驗(yàn),在中斷里加一個(gè)tmos_set_event(),讓他隨便進(jìn)一個(gè)tmos任務(wù),這樣就能正常休眠。

但是,網(wǎng)上(https://www.cnblogs.com/iot-fan/p/13460082.html)有人說,不要再中斷里操作tmos任務(wù),是否有這個(gè)說法。是否能在中斷函數(shù)里安全調(diào)用tmos_set_event。

image.png




1、開啟睡眠可以通過BLE文件夾下面的peripheral例程進(jìn)行使用,即開始HAL_SLEEP使能后,通過TMOS任務(wù)進(jìn)行實(shí)時(shí)的喚醒操作;

2、不可以在中斷中進(jìn)行TMOS任務(wù)的調(diào)用,可以通過進(jìn)入中斷置標(biāo)志,同時(shí)一直開啟TMOS任務(wù)查詢?cè)摌?biāo)志,查詢到則執(zhí)行對(duì)應(yīng)的任務(wù)。


感謝回復(fù)!

我的需求基本上可以簡(jiǎn)化為,功耗盡量低的情況下,通過一個(gè)按鈕,啟動(dòng)一個(gè)TMOS任務(wù)A。

結(jié)合上述問答,我理解有如下解決方案:

? ? ? 使用外部中斷,按下按鈕后在中斷里置標(biāo)志,TMOS有一任務(wù),一直檢查這個(gè)標(biāo)志,查詢到則執(zhí)行任務(wù)A。

有問題:

1、假設(shè)每100毫秒檢測(cè)一次這個(gè)標(biāo)志,這么高的檢測(cè)頻率,會(huì)不會(huì)顯著增加功耗。

2、假設(shè)每100毫秒檢測(cè)一次這個(gè)標(biāo)志,第0毫秒檢測(cè)完畢后睡下,第1毫秒進(jìn)入中斷,之后結(jié)束中斷函數(shù)。那么從這一刻到下一次檢測(cè)之間的99毫秒內(nèi),整個(gè)系統(tǒng)是不是一直處于未睡眠的空閑狀態(tài),功耗在1毫安以上。

3、如果問題2成立,是不是應(yīng)該改為完全不用gpio中斷,直接用循環(huán)任務(wù)檢測(cè)io口電平,以避免問題2?;蛘哂惺裁锤玫姆桨笇?shí)現(xiàn)我的需求。




如果從樓主的描述,我理解的是樓主要設(shè)計(jì)一個(gè)按鍵后進(jìn)入睡眠的功能。中斷里置位信號(hào)來設(shè)置睡眠狀態(tài)即可。至于你要通過全局變量還是信號(hào)量還是別的方式來處理,加快睡眠功能的調(diào)用,這是樓主自己考慮的問題吧。RTOS中考慮這個(gè),至少比你原設(shè)計(jì)的100毫秒檢測(cè)一次要簡(jiǎn)單的多。建議去學(xué)習(xí)一下RTOS中斷和線程間通信的知識(shí)。以及RTOS線程調(diào)度的原理。


1、sleep是由協(xié)議棧管理的,其喚醒后處理完成任務(wù)后會(huì)自動(dòng)進(jìn)入睡眠;

2、睡眠喚醒有兩種:GPIO喚醒和TMOS中斷喚醒;

3、每100ms檢測(cè)一次電平信號(hào),MCU會(huì)每隔100ms醒來一次,進(jìn)行檢測(cè),檢測(cè)完成立馬睡眠;、

4、檢測(cè)到標(biāo)志后再進(jìn)行函數(shù)的執(zhí)行。


TMOS下的自動(dòng)sleep,如果在TMOS中斷喚醒前,先由GPIO喚醒,完成gpio中斷函數(shù)后,此時(shí)沒到TMOS中斷喚醒的時(shí)間點(diǎn),系統(tǒng)會(huì)繼續(xù)sleep嗎,等待下次TMOS中斷喚醒嗎?

我的測(cè)試結(jié)果是不會(huì),但是我想讓他休眠


使用官方的例程如peripheral進(jìn)行測(cè)試,開啟HAL_SLEEP,不管是GPIO喚醒還是TMOS任務(wù)喚醒,喚醒后會(huì)執(zhí)行你的任務(wù),執(zhí)行完成之后會(huì)由協(xié)議棧管理自動(dòng)進(jìn)入睡眠的狀態(tài)。最簡(jiǎn)單的驗(yàn)證方法就是在CH57X_LowPower這個(gè)函數(shù)加一個(gè)打印,看看是不是一直都在打印,進(jìn)入睡眠就是這個(gè)函數(shù)。

提供一個(gè)博客關(guān)于睡眠的講解,參考一下:

CH573芯片Sleep說明(RTC程序說明) - SweetTea_lllpc - 博客園 (cnblogs.com)


只有登錄才能回復(fù),可以選擇微信賬號(hào)登錄

国产91精品新入口,国产成人综合网在线播放,九热这里只有精品,本道在线观看,美女视频a美女视频,韩国美女激情视频,日本美女pvp视频