我正在研究一个使用非标准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:
和其他几行周围的奇怪字符。有办法防止这种情况发生吗?下面是我输出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: %sn", strerror (errno)) ;
return 1 ;
}
if (wiringPiSetup () == -1)
{
fprintf (stdout, "Unable to start wiringPi: %sn", strerror (errno)) ;
return 1 ;
}
int H = 1;
serialPutchar(fd, 'H');
serialPutchar(fd, 'E');
serialPutchar(fd, 'L');
serialPutchar (fd, 'L');
serialPutchar (fd, 'O');
}
:::更新:::
下面是符合我的描述的工作代码:
#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: %sn", strerror (errno)) ;
return 1 ;
}
if (wiringPiSetup () == -1)
{
fprintf (stdout, "Unable to start wiringPi: %sn", strerror (errno)) ;
return 1 ;
}
for (int i=1; i<argc; i++){
serialPrintf (fd, "%s", argv[i]);
}
}
putChar接受一个char作为它的第二个参数。不是字符串,也不是带参数的格式字符串,只是一个字符。
如果变量x中有一个字符,只需:
serialPutchar(fd, x);