Являются ли функции без ctx хуже или лучше для использования в libgpiod

#embedded-linux #gpio #iio

#встроенный-linux #gpio #iio

Вопрос:

Есть ли кто-нибудь, знакомый с libgpiod, кто мог бы ответить на этот вопрос:

Есть ли какие-либо недостатки в использовании функции без ctxless вместо вызова отдельной функции для управления линиями микросхем (или в целом)? Например, чтобы включить строку, я мог бы написать что-то вроде:

 struct gpiod_chip* chip = gpiod_chip_open_by_name("gpiochip2");
struct gpiod_line* line = gpiod_chip_get_line(chip, 10);
gpiod_line_request_output(line, "foo", 0);
gpiod_chip_close(chip);
  

или я мог бы просто использовать один вызов:

 gpiod_ctxless_set_value("gpiochip2", 10, 1, false, "foo", NULL, NULL);
  

Когда бы вы использовали одну поверх другой?

Ответ №1:

Функция без ctx отлично подходит для быстрой установки или получения значения GPIO. Однако я бы сохранил это для одноразового использования в течение жизненного цикла вашей программы.

Причина в том, что, используя функции без ctx, libgpiod придется всегда повторять одну и ту же настройку (открытие gpiochip, запрос строки, установка ее направления), а затем получать или устанавливать значение.

Если вы читаете или устанавливаете значение несколько раз в своей программе, вам, вероятно, не следует использовать функции без ctx.

Более того, сохранение запрошенной строки в течение срока службы вашей программы, безусловно, хорошо, это помешает любой другой программе использовать этот GPIO.