在選定條件調(diào)用上述兩個函數(shù),系統(tǒng)沒有進入睡眠狀態(tài)。通過打印調(diào)試日志確認函數(shù)唄調(diào)用了。沒有定義hal_sleep宏,因為期待只選定條件進入睡眠。
這可能是啥問題?
在選定條件調(diào)用上述兩個函數(shù),系統(tǒng)沒有進入睡眠狀態(tài)。通過打印調(diào)試日志確認函數(shù)唄調(diào)用了。沒有定義hal_sleep宏,因為期待只選定條件進入睡眠。
這可能是啥問題?
您好,不使用協(xié)議棧HAL_SLEEP,手動管理休眠可以參考博客:在TMOS系統(tǒng)中手動管理休眠 - JayWell - 博客園 (cnblogs.com)
您是如何判斷“系統(tǒng)沒有進入睡眠狀態(tài)”的,是監(jiān)測休眠電流的嗎?
如果休眠電流接近2mA,可能是由于GPIO沒有滿足喚醒電平的條件,MCU無法休眠,回進入idle等級的休眠。
請看一下這個代碼。HDMgr_loop會在主循環(huán)中被反調(diào)用。 系統(tǒng)初始化階段只設置兩個GPIO中斷喚醒。如果shutdown調(diào)用成功,第一行PRINT應該很可能打印輸出不全,第二個PRINT應該永遠不會有機會被執(zhí)行吧?
我理解shutdwn(0)被喚醒后,應該是復位,并從主程序開頭執(zhí)行吧?
shutdown喚醒后會復位。
首先判斷是否進入睡眠,通過功耗測試和打印判斷是否執(zhí)行。
在沒有執(zhí)行到shutdown處,單片機都是處于正常工作狀態(tài)。
如果是手動調(diào)用睡眠,可以參考上面工程師提供的博客,進行最低功耗的休眠,注意藍牙/tmos任務進行關(guān)閉。
如果是沒有藍牙功能,則直接參考PM例程,參考它的調(diào)用方式。
shutdown(0)之后,被GPIO中斷喚醒后,GPIO中斷處理函數(shù)會被執(zhí)行嗎?如果會執(zhí)行,相對于程序的其他部分,中斷的執(zhí)行的時間節(jié)點是什么?
shutdown喚醒后直接復位,GPIO中斷處理函數(shù)不會被執(zhí)行了。