2015-04-24 24 views
1

我有一個功能,在執行功能之前禁用中斷,在功能完成之後重新啓用中斷。有沒有什麼方法可以在關鍵部分找到某個功能所花費的時間(在禁用和啓用中斷之間)

這裏我的要求是找到函數需要多少時間才能執行?

在這種抽象的方式就是我想做的事:

variable = time();//time before disabling 

disable_interrupts(); 

perform_function();//business logic 

enable_interrupts(); 

variable2 =time();//time after disabling the interrupt 

tot_time = variable2 - variable; 

有沒有辦法找到所需要的時間?我被卡住了,因爲如果我們禁止中斷處理器不會招待任何東西(時鐘,中斷,計數器)。

+0

即使中斷被禁用,時鐘應該繼續打勾嗎?時鐘超限將不會被捕獲,因爲這些也在中斷中處理。我希望你的「商業邏輯」不需要太多時間。由於禁用中斷可能會對系統的許多部分產生不良影響。 – RaphMclee

+0

我的意圖是完全像時鐘應該繼續打勾,但當我們禁用中斷時,是否有任何時鐘將運行..因爲我懷疑該功能需要這麼多時間..可以請幫助我 –

回答

1

如果此功能需要花費很多時間,則應該更改設計。在不禁用中斷的情況下做耗時的業務邏輯。

反正,如果你想堅持你目前的設計,我嘗試建議一個解決方案。 任何時鐘寄存器都將繼續運行,您可以選擇一個並在ISR的開始和結束時檢查其值。如果計數器將多次超出,您將不會有任何跡象。您也可以定期(如果您的業務邏輯是一個循環)檢查時鐘值並將傳遞的時間總和爲一個變量。所以時鐘超限將被包含在計算中。

相關問題