2013-02-28 137 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