2012-11-12 37 views
2

我有一個C中的微控制器的代碼。 根據我的例子,我使用函數「void osSleep(tU32 ticks)」停止了一段時間的程序。不幸的是,我不知道它是如何工作的,它對我的​​微控制器有什麼作用(哪些引腳,狀態等被設置爲什麼值)。void osSleep(tU32 ticks) - 它是如何工作的(微控制器中的定時器)?

我已想出了setBuzzer()函數,因爲我有它的源:

void setBuzzer(tBool on) 
{ 
    if (TRUE == on) 
    IOCLR = BUZZER_PIN; 
    else 
    IOSET = BUZZER_PIN; 
} 

所以GPIO端口設置爲1或0用於與蜂鳴器的PIN(BUZZER_PIN = 0x00002000)。蜂鳴器有一個引腳,所以我可以啓用和禁用它(高電壓和低電壓)。

我想做出類似的分析osSleep(),但有什麼奇怪的,我無法找到它的整個代碼實現,只是聲明:

void osSleep(tU32 ticks); 

也許這功能在某些庫。無論如何,我想知道它是如何在較低級別上工作的(例如,當我稱之爲定時器時,執行什麼指令 - 例如蜂鳴器示例)。

而且,存在僅用於稱爲「先發制人操作系統V 1.4.0」嵌入式藝術家代碼的文檔中的高級別短定義。

回答

1

不幸的是,我不知道它如何工作以及它給我的微控制器

沒有訪問源是什麼,有沒有辦法可以肯定的。嘗試使用反彙編程序(例如,GNU的binutils具有objdump)以瞭解實際osSleep的功能。

在所有可能的情況下,它將等待一個信號量,該信號量將被計時器標記ISR切換(直接或間接)。不過,你的問題很有趣 - 除了「這個函數讓一個進程進入睡眠指定數量的刻度」之外,文檔中沒有提到任何東西。但如果沒有可用的運行,它肯定會把整個uC置於低功耗模式。