gpt4 book ai didi

c - 启动时运行 C 程序 [Red Pitaya]

转载 作者:行者123 更新时间:2023-11-30 20:53:42 25 4
gpt4 key购买 nike

我有一个 C 程序,需要在我打开计算机(Red Pitaya)时运行。此处介绍的程序的开头:

//my_test program

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include "redpitaya/rp.h"

int main(int argc, char **argv){

int jj=1;

while(1) {

printf("Ready for experiment number %i\n",jj);

int i, D;
int32_t TrigDly;

等等...

该程序可以通过名为 uri_test.sh 的 run.sh 文件执行,其中包含以下内容:

cat /opt/redpitaya/fpga/fpga_0.94.bit>/dev/xdevcfg
LD_LIBRARY_PATH=/opt/redpitaya/lib ./my_test

这两个文件都位于/root 下的目录中。在 PuTTY 终端上手动运行时,程序运行良好 -

/RedPitaya/Examples/C/Uri# ./my_test

/RedPitaya/Examples/C/Uri# ./uri_test.sh

我尝试遵循此处提供的解决方案:

https://askubuntu.com/questions/9853/how-can-i-make-rc-local-run-on-startup

没有成功。有什么建议么?谢谢。

最佳答案

有多种方法可以让程序在启动时运行,这取决于您的 init子系统(您使用 systemd 或 SysV 风格的 init 吗?)。

顺便说一句,C 语言的源程序不是 script你通常将它编译(使用 gcc -Wall -Wextra -g )成一些 executable 。就您而言,您可能想要设置其 rpath在构建时(特别是为了避免 LD_LIBRARY_PATH 疯狂),也许可以通过传递类似 -Wl,-rpath,/opt/redpitaya/lib 的东西到您的链接gcc命令。

也许是crontab(5)输入 @reboot就足够了。

无论您在启动时以何种方式启动程序,通常都会重定向其 stdinstdoutstderr 流(例如 /dev/null ,请参阅 null(4) )或不可用。所以很可能你的printf输出无处可去。您可以在脚本中重定向标准输出,我建议使用 syslog(3)在您的 C 程序中,以及 logger(1)在你的 shell 脚本中(然后查看 *.log 下的一些 /var/log/ 文件)。顺便说一句,它的环境与某些交互式 shell 中的环境不同(请参阅 environ(7) ...),因此您的程序可能很早就失败(也许在动态链接时,请参阅 ld-linux.so(8) ,因为 LD_LIBRARY_PATH 可能不是设置为您想要的值...)。

您应该考虑在 C 程序中处理程序参数(可能使用 getopt_long(3) ),并且可能有一些选项(例如 --daemonize )来调用 daemon(3) .

您当然应该阅读Advanced Linux Programming或类似的东西。

我建议首先能够成功构建,然后在启动时运行一些类似“hello-world”的程序,该程序使用 syslog(3) 。稍后,您可以改进该程序,使其与您的 Red Pitaya 一起工作。

关于c - 启动时运行 C 程序 [Red Pitaya],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46200402/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com