2013-02-28 110 views
2

我正在使用非标准C库在LCD屏幕上显示输出的项目。我的代码运行良好,但遇到了问题。错误:功能参数太多

这个程序的目的是做一个命令行的文本字符串,并将其转换为ASCII十进制值,然后将它们显示在屏幕上。您输出文本到屏幕的方式是拨打serialPutchar函数,以显示字母H我会将它写为serialPutchar(fd, 'H');我希望能够从变量中获取值并在变量中输出字母。

的问题是,当我把它写成serialPutchar(fd, "%c", H);或尝试serialPutchar(fd, "%d", x);我得到以下错误:

testing.c: In function âmainâ: 
testing.c:22:3: warning: passing argument 1 of âserialPutcharâ makes integer from pointer without a cast [enabled by default] 
/usr/local/include/wiringSerial.h:30:14: note: expected âintâ but argument is of type âchar *â 
testing.c:22:3: error: too many arguments to function âserialPutcharâ 
/usr/local/include/wiringSerial.h:30:14: note: declared here 

我猜它不能在该方式使用,就像您使用printf所以有一个替代这个或者也许我只是有一个简单的错误,我没有发现。我包含一个链接,指向wiringSerial库的文档。同样从我的错误输出中,我得到围绕错误testing.c In function main:和其他几行的奇怪字符。有没有办法来防止这种情况?链接到库HERE下面是我工作的代码输出HELLO

#include <stdio.h> 
#include <string.h> 
#include <errno.h> 
#include <time.h> 
#include <wiringPi.h> 
#include <wiringSerial.h> 

int main (int argc, char *argv[]) 
{ 
    int fd ; 
    if ((fd = serialOpen ("/dev/ttyAMA0", 9600)) < 0) 
    { 
    fprintf (stderr, "Unable to open serial device: %s\n", strerror (errno)) ; 
    return 1 ; 
    } 

    if (wiringPiSetup() == -1) 
    { 
    fprintf (stdout, "Unable to start wiringPi: %s\n", strerror (errno)) ; 
    return 1 ; 
    } 
    int H = 1; 
     serialPutchar(fd, 'H'); 
     serialPutchar(fd, 'E'); 
     serialPutchar(fd, 'L'); 
     serialPutchar (fd, 'L'); 
     serialPutchar (fd, 'O'); 
    } 

::: UPDATE :::

这里是一个适合我的描述,工作代码:

#include <stdio.h> 
#include <string.h> 
#include <errno.h> 
#include <time.h> 
#include <wiringPi.h> 
#include <wiringSerial.h> 

int main (int argc, char *argv[]) 
{ 
    int fd ; 
    if ((fd = serialOpen ("/dev/ttyAMA0", 9600)) < 0) 
    { 
    fprintf (stderr, "Unable to open serial device: %s\n", strerror (errno)) ; 
    return 1 ; 
    } 

    if (wiringPiSetup() == -1) 
    { 
    fprintf (stdout, "Unable to start wiringPi: %s\n", strerror (errno)) ; 
    return 1 ; 
    } 
     for (int i=1; i<argc; i++){ 
     serialPrintf (fd, "%s", argv[i]); 
     } 
    } 

回答

2

的putChar需要作为第二个参数的字符。不是一个字符串,不是一个带参数的格式字符串,只是一个字符。

如果你有一个变量x一个字符,只是做:

serialPutchar(fd, x); 
+1

作为一个有用的后续作的OP,看看“无效serialPuts(INT FD,字符* S);” - 您可以使用标准库函数sprintf来进行格式化,然后使用serialPuts函数编写整个字符串。祝你好运! – 2013-02-28 01:47:55

+0

@RonDahlgren您能否提供一个关于如何使用该函数或可能使用'serialPrintf'函数的例子,我对编程相对比较陌生 – Yamaha32088 2013-02-28 03:05:40