今天來看兩個特殊的指令,WFI(Wait For Interrupt)和WFE(Wait For Event)。這兩條指令的語法非常簡單,不需要帶任何參數。如果大家讀過前面文章,肯定對中斷(interrupt)不陌生。至于事件(event),與中斷有點像,不同的是處理器對二者的處理方式不一樣。可以先將事件理解成特殊的中斷。
先看WFI,首先,我們研究一下ARM處理器進入低功耗狀態的機制。當一個處理器核的工作負載不高時,可以通過降壓降頻(DVFS)的方式來讓處理器運行在較低的頻率,從而降低整個芯片的功耗。如果處理器的沒有工作負載,完全空閑下來,這時就需要其它方法讓處理器進入更低的功耗模式。如果大家對ACPI有一些了解,就知道其中定義的“睡眠(sleep)”模式就有好幾種,每種模式對應的電源和時鐘狀態不同。處理器芯片進入空閑狀態的大體順序應該是這樣的,應用處理器(Application Processor)判斷是否具備進入空閑狀態的條件,如果滿足條件則進行一些準備工作;發消息給系統控制器(System control processor);等待全部操作執行完;執行WFI進入空閑狀態;等待系統控制器做出下一步動作,或者關閉時鐘,或者關閉電源等等。
從WFI這個名字可以看出,喚醒(wake up)處理器的一個機制就是發送中斷給處理器。與A系列處理器搭配的中斷處理器是GIC,這在前面介紹過。GIC接到中斷后,產生喚醒信號給系統控制器或者是電源管理模塊(PowerManagement Unit),系統控制器或者PMU根據處理器核的狀態以及系統狀態,決定下一步的動作。如果喚醒信號是給系統控制器,則可以考慮接到系統控制器的中斷處理接口,比如,采用M系列作為系統控制器時,可以接到NVIC(Nested Vectored Interrupt Controller)。喚醒機制要根據具體情況具體分析,法無定法。
WFE與WFI很像,只不過等待的是事件,也就是說系統可以通過發送事件來喚醒應用處理器。WFE的一個典型應用場景是自旋鎖。當多個應用處理器競爭同一個臨界區資源時,只有一個應用處理器能獲得權限,其它的應用處理器需要等待臨界區資源被釋放,也就是這些應用處理器“自旋”。當然操作系統也可以采取其它的處理方式,比如把時間片分給其它的應用程序,不過這不在今天的研究范疇。顯然,應用處理器簡單的“自旋”對于功耗不友好,一個解決辦法就是讓這些“自旋”的應用處理器進入一種低功耗模式,獲得臨界區資源的應用處理器在完成當前進程后,喚醒這些應用處理器去重新競爭臨界區資源。這時的喚醒機制不宜采取中斷方式,因為效率不高。ARM中采用的是事件方式,即通過執行SEV(Send Event)指令向其它應用處理器發送喚醒的事件。
WFI和WFE還有一種變體形式,WFIT和WFET,其中的T是超時(timeout)的意思,也就是說,喚醒機制多了一種超時的方式,沒有中斷或者事件產生,時間到了也會發出喚醒。
審核編輯:湯梓紅
-
處理器
+關注
關注
68文章
19409瀏覽量
231207 -
指令
+關注
關注
1文章
611瀏覽量
35817 -
中斷
+關注
關注
5文章
900瀏覽量
41759 -
wfi
+關注
關注
0文章
2瀏覽量
1472
原文標題:ARM系列 -- WFI和WFE
文章出處:【微信號:Ithingedu,微信公眾號:安芯教育科技】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
L138-arm不能進入wfi模式
ARM 無法進入WFI 模式
STM32低功耗模式有哪幾種
ARM是怎樣使用多種低功耗模式來節省功耗的
求分享基于WFE的睡眠示例
詳解ARM常用的偽指令資料下載
![<b class='flag-5'>詳解</b><b class='flag-5'>ARM</b>常用的偽<b class='flag-5'>指令</b>資料下載](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
ARM系列-WFI和WFE指令介紹
STM32的三種低功耗模式介紹
![STM32的三種低功耗模式介紹](https://file1.elecfans.com/web2/M00/8E/66/wKgaomTF1MSAHETmAAP4sS-G-yw008.jpg)
評論