2012-08-09 31 views
0

我有幾個使用ioctl調用通過SPI進行異步通信的函數。C++中的不可中斷函數

這些函數執行起來非常快,因爲數據有效載荷只有幾個字節 - 但是 - 必須保證時序不中斷。

我注意到,這些函數有時會中斷,因爲CPU爲其他線程提供服務 - 這最終會打破異步通信;它改變了時間。

對於這兩個函數,我該如何指定它們可能不會被打斷?

回答

1

我不認爲你可以在大多數正常操作系統(例如windows,OsX,linux)上使用常規程序。如果可以的話,那麼惡意軟件可以通過簡單地聲明一個無限循環是不可中斷的來鎖定你的機器。在設備驅動程序中可能會這樣做。如果你確實需要這個級別的控制,那麼就有實時的操作系統。

我認爲你可以在Linux內核模塊中做到這一點。

+0

+1並同意,如果你必須去*那*低級,你可以從用戶模式訪問一個SPI內核驅動程序,你可以編寫你自己的內核模塊,並從所有的用戶模式中解脫出來限制。 – 2012-08-09 17:53:33

0

禁用所有中斷是困難和危險的(並且可能會破壞內核更新) - 除非絕對必要,否則應該避免這樣做。對於SPI,您應該依賴像Andriod串行庫那樣處理時序和內核配置的驅動程序。我試過在微控制器上實現協議和時序(當我在兩組引腳上同時需要不同速度的不同SPI時) - 即使沒有多線程問題,也很難完美實現。所以你應該問自己,我是否應該自己實施低層次的溝通調用。

我意識到這實際上並不能回答你關於如何禁用所有中斷的問題,但我覺得它同樣適用於你的最終目標。