2017-02-09 48 views
-2

有最快的方法在C++中爲GPIO設置「1」或「0」嗎?現在在C++中設置GPIO的最快方法(linux)

,我們使用這個功能:

void gpioSet(int gpio, int value) 
{ 
    sprintf(buf, "/sys/class/gpio/gpio%d/value", gpio); 
    fd = open(buf, O_WRONLY); 
    sprintf(buf, "%d", value); 
    write(fd, buf, 1); 
    close(fd); 
} 

使用此功能時,CPU需要「時間」來設置它℃在++。

這個問題的原因是我們正在使用一個嵌入式linux板,在SPI中有一個bug。我需要「手動」處理CS(片選),並且此功能需要一定時間來設置或重置CS的GPIO。

謝謝。

+0

請原諒我的無知(選民和閉幕者)......關於這個問題還不清楚嗎?他可以「memmap」內存區域而不是寫入「sysctl」值,並且這可能是更快或更受歡迎的最佳做法。 – jww

+0

我不明白這兩個負面票... –

+0

@Kotik_o我不是一個downvoter,但我懷疑這是因爲這個問題是廣泛的,你沒有顯示你的努力,使這個程序更有效率。 –

回答

3

每次需要寫入GPIO時,不必打開和關閉GPIO,只需在第一次寫入時(或在引導時)打開它即可。那麼你將跳過昂貴的操作。 (將此功能包裝在一個類中以使其清潔)。

還要檢查在寫入GPIO時是否使用了緩衝寫入模式。

+0

另外,我會使用'write(fd,value?「1」?「0」,1)' - 節省printf的開銷 - 但開放和關閉會非常昂貴。 –

+0

謝謝。我會嘗試。 –