Возврат значений из linux двоичного - PullRequest
1 голос
/ 26 мая 2020

Во-первых, позвольте мне сказать, что я новичок в написании драйверов, поэтому прошу прощения, если моя терминология полностью отключена.

Я пытаюсь написать драйвер для управления светодиодом и прочитал несколько регистров на моей плате разработки FPGA. Как хорошо указано здесь Я понимаю, что могу предоставить свои двоичные (или C программы) входные значения, используя (в моей C программе):

int main(int argc, char *argv[]) { /* ... */ }

Итак, Например, в моей оболочке Linux, если я запустил:

root@socfpga:~# ./LED_BLINK 182

, я могу отправить входное целое число 182 в свой двоичный файл, который выполняется в сценарии оболочки linux. В моем случае светодиод мигает 182 раза (эта часть работает). Итак, я знаю, как вводить свою программу, но как мне правильно извлекать выходные данные из моей программы?

Мои основные вопросы следующие:

1) В общем, предположим, что мой двоичный файл имеет переменную (s), которые я хотел бы вернуть в качестве выходных данных, как я могу это сделать? Например, если я хочу, чтобы моя программа выводила значение в регистре 5, я ввожу в оболочку:

root@socfpga:~# ./LED_BLINK 1 5

Светодиод мигнет один раз, а затем моя оболочка вернет значение в регистре 5 (этот регистр просто переменная в двоичной программе).

Другой способ описать, что мне нужно, предположим, если у меня есть единственный регистр (допустим, это 16-битное значение), и я хотел бы, чтобы моя программа выводила это значение, как я могу правильно этого добиться? Могу ли я передать переменную в свой двоичный файл (например, указатель?), И моя программа будет записывать это значение? Можете ли вы привести пример этого или ссылку на учебник?

2) Как и в предыдущем случае, что, если у меня есть список регистров (скажем, 20 или более 16-битных значений), как мой двоичный файл может правильно выводить эти значения (может быть, массив указателей)?

3) Я уверен, что у этого процесса есть техническое название. Как это «технически» называется (чтобы у меня были более умные поисковые записи в Google)?

Спасибо за вашу помощь, Джеймс

1 Ответ

1 голос
/ 26 мая 2020

Самый прямой способ передачи данных между программами в настройке Unix - использовать стандартные «каналы» ввода и вывода (также известные как stdin и stdout ).

По умолчанию оператор C « printf » по умолчанию будет записывать в стандартный вывод, и вы увидите вывод на терминале по умолчанию, или вы можете передать его другая программа в качестве входных данных с использованием символа «|» или другой операции с типом файла с использованием операнда «>».

Это объясняется более подробно в этом сообщении: Что значит писать в stdout в C?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...