0

我有一个正在开发的程序,它将启动和停止伺服。我可以从命令行发出以下命令并且它可以工作。echo 2=120 > /dev/servoblaster这将启动伺服运动。现在我有以下程序

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
    FILE *fp;


   fp = fopen("/dev/servoblaster", "w");
   if (fp == NULL) {
       printf("Error opening file\n");
       exit(0); 
 }
   fprintf(fp, "2=120");
   fclose(fp);
   fflush(fp); 
   return 0;
}

但是当我执行它时没有任何反应,现在当我尝试echo 2=120 > /dev/servoblaster命令时它会说Bad input: 2=1202=120但是如果我重复相同的echo 2=120 > /dev/servoblaster命令它会再次工作。如果我在尝试执行echo命令时尝试执行上面的程序 3 次输出,Bad input 2=1202=1202=120 2=120那么它的输出对我来说似乎是文件没有完成在我的程序中写入。有人可以指出我是否遗漏了什么?

4

4 回答 4

3

您需要在命令后添加换行符,如下所示echo

fprintf(fp, "2=120\n");

据推测,伺服驱动器会等到它看到换行符后再执行命令。

于 2013-04-09T01:38:40.347 回答
0

程序没有问题,我运行以下代码

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
    FILE *fp;
    fp = fopen("/home/syler/servoblaster", "w");
    if (fp == NULL) {
        printf("Error opening file\n");
        exit(0); 
    }   
    fprintf(fp, "2=120");
    fclose(fp);
    fflush(fp); 
    return 0;
}

结果是

cat /home/syler/servoblaster
2=120 

所以,肯定是“servoblaster”内核驱动模块的问题。

于 2013-04-09T01:38:45.557 回答
0

这是一个旧线程,但我刚刚遇到了同样的问题,所以我发布了我所知道的。从我所看到的情况来看,需要“\n”,但是下次会搞砸缓冲区(即,它将“\n”放入缓冲区中,因此即使它是好的,你的下一次写入似乎也是坏数据数据)。我目前的工作是在字符串之前和之后放置一个“\n”。这确保它每次都能正常工作,但由于“\n”,我总是收到“错误数据”消息。仍在寻找正确的方法来执行此操作,但尚未找到来自 C 的调用以使此代码正常工作。

于 2013-12-31T11:35:09.747 回答
-3

这对我来说很好:

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
    FILE *fp;
    fp = fopen("/home/syler/servoblaster", "w");
    if (fp == NULL) {
        printf("Error opening file\n");
        exit(0); 
}   
fprintf(fp, "2=120");
fprintf(fp, "\n");
fclose(fp);
fflush(fp); 
return 0;
}
于 2015-04-09T06:34:59.353 回答