Во-первых, позвольте мне сказать, что я новичок в написании драйверов, поэтому прошу прощения, если моя терминология полностью отключена.
Я пытаюсь написать драйвер для управления светодиодом и прочитал несколько регистров на моей плате разработки 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)?
Спасибо за вашу помощь, Джеймс