2017-02-09 11 views
-2

Самый быстрый способ установить «1» или «0» на GPIO в C++?Самый быстрый способ установить GPIO в C++ (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 принимает "время", чтобы установить его под C++.

Причина этого вопроса заключается в том, что мы используем встроенную плату Linux, которая имеет ошибку в SPI. Мне нужно обрабатывать CS (Chip Select) «вручную», и это время требует времени, чтобы установить или сбросить GPIO для CS.

Спасибо.

+0

Прошу простить мое невежество (вниз избирателей и доводчиков) ... Что непонятно по этому вопросу? Он мог бы «memmap» в области памяти вместо того, чтобы писать значения sysctl, и это может быть более быстрым или предпочтительным в качестве наилучшей практики. – jww

+0

Я не понимаю два отрицательных голоса ... –

+0

@Kotik_o Я не являюсь нисходящим, но я подозреваю, что это потому, что этот вопрос является широким, и вы не показали своих усилий, чтобы сделать эту программу более эффективной. –

ответ

3

Вместо того, чтобы открывать и закрывать GPIO каждый раз, когда вам нужно его написать, просто откройте его, как только вы впервые его напишите (или во время загрузки). Затем вы пропустите дорогостоящую операцию. (Оберните эту функциональность в класс, чтобы очистить ее.)

Также убедитесь, что вы не используете режим буферизации при записи в GPIO.

+0

Также я бы использовал 'write (fd, value?" 1 "?" 0 ", 1)' - экономит стоимость printf, но это будет открытый и закрытый, что будет очень дорого. –

+0

Спасибо. Я попробую. –