我需要在我的驅動程序中調用gpio_get_value
,gpio_set_value
,gpio_direction_input/output
,並且有一個時間要求,要求函數調用返回時間小於5us
。Linux中的GPIO API是否具有確定性?
gpiolib
可以滿足這個要求還是不確定?如果不是,那麼解決方案是什麼?直接訪問GPIO寄存器?
非常感謝。
我需要在我的驅動程序中調用gpio_get_value
,gpio_set_value
,gpio_direction_input/output
,並且有一個時間要求,要求函數調用返回時間小於5us
。Linux中的GPIO API是否具有確定性?
gpiolib
可以滿足這個要求還是不確定?如果不是,那麼解決方案是什麼?直接訪問GPIO寄存器?
非常感謝。
調用其中一個函數需要執行一個linux內核函數,因此至少有兩個上下文切換:一個運行內核代碼,一個運行內核代碼,一個返回userland。
這些開關可能意味着如果中斷或信號進入執行,有些時候會浪費掉。
不管怎麼說,如果你需要確定的時間限期,你需要切換到實時補丁的內核Real Time linux wiki homepage
我不知道,如果5US是可行的,它取決於系統負載,在活動驅動器(如有讀/寫文件系統?),但你可以測試。
是的,但是,如果要求僅僅是操作序列在從開始的一段時間內完成(但開始的延遲並不重要),那麼執行所有三個操作在不可搶佔的上下文中從內核中立即進行序列化就足夠了。但是如果需要實際操作時機,則可能需要實時擴展。 –
我同意你@ChrisStratton。 問題在於列出的三個函數是用於與gpios進行接口以設置/獲取值以及獲取有關引腳配置的信息的三個函數,所以我認爲它們將在不同時刻被調用,而不是直接序列。 –
你有沒有嘗試過在你的設備上調用gpio_xxx()API並描述所花費的時間?結果是否足夠確定... – TheCodeArtist