linux - 从 Linux 二进制文件返回值

标签 linux c embedded

首先,我要说的是,我对编写驱动程序非常陌生,所以如果我的术语完全错误,我深表歉意。

尝试编写一个驱动程序来控制 LED 并读回 FPGA 开发板上的一些寄存器。 正如很好地指出的那样here我知道我可以通过使用(在我的 C 程序中)提供我的二进制(或 C 程序)输入值:

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

举个例子,在我的 Linux shell 中,如果我运行:

root@socfpga:~# ./LED_BLINK 182

我可以将输入整数 182 发送到在 Linux shell 脚本中执行的二进制文件。在我的例子中,LED 闪烁 182 次(这部分有效)。所以我知道如何提供程序输入,但如何正确地从程序中提取输出?

我的主要问题如下:

1)一般来说,假设我的二进制文件有我想作为输出返回的变量,我该怎么做?例如,如果我希望我的程序输出寄存器 5 处的值,我在 shell 中输入:

root@socfpga:~# ./LED_BLINK 1 5

LED 将闪烁一次,然后我的 shell 将返回寄存器 5 处的值(该寄存器只是二进制程序中的一个变量)。

另一种描述我所追求的方式,假设如果我有一个寄存器(假设它是一个 16 位值)并且我希望我的程序输出该值,我怎样才能正确实现这一点?我可以将变量传递给我的二进制文件(例如指针?)并让我的程序写入该值吗?您能提供一个示例或教程链接吗?

2) 与上面类似,如果我有一个寄存器列表(比如 20 个或更多 16 位值),我的二进制文件如何正确输出这些值(可能是指针数组)?

3) 我确信这个过程有一个技术名称。这个“技术上”叫什么(这样我就可以拥有更智能的谷歌搜索条目)?

感谢您的帮助, 詹姆斯

最佳答案

在 Unix 设置中的程序之间传递数据的最直接方法是使用标准输入和输出“管道”(也称为 stdinstdout)。

默认情况下,C 语句“printf”将默认写入标准输出,默认情况下您将在终端上看到输出,或者您可以将其传递给另一个程序使用“|”作为输入,或使用“>”操作数作为另一个文件类型操作。

这篇文章对此进行了更详细的解释:What does it mean to write to stdout in C?

关于linux - 从 Linux 二进制文件返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62030127/

相关文章:

c - 大量递归函数背后实际上发生了什么?

c - 为什么默认编译器标志未显示在 gcc 行中?

linux - 在树莓派2中,如何配置PWM1 channel ?

embedded - 在Cortex-M的ISR内切换上下文

c++ - 使用 QueryPerformanceCounter() 倒计时

linux - 默认用户未添加到 docker 组,必须执行 su $USER?

java - 使用数据库部署 Java Web 应用程序

c++ - 提高指数移动平均整数乘法和除法的准确性

c - 从多个线程独占访问资源

linux - 将linux内核实现为路由器