2013-02-28 3 views
2

Я работаю над проектом, который использует нестандартные библиотеки C для отображения вывода на ЖК-экране. У меня хороший код, но я столкнулся с проблемой.ошибка: слишком много аргументов для функции

Какова моя цель этой программы - взять строку строки из командной строки и преобразовать ее в десятичные значения 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'); 
    } 

::: ОБНОВЛЕНИЕ :::

Вот рабочий код, который соответствует моему описанию:

#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 принимает символ в качестве второго аргумента. Не строка, не строка формата с аргументами, а только символ.

Если у вас есть символ в переменной х, просто сделать:

serialPutchar(fd, x); 
+1

Как полезный наблюдения для OP, посмотрите на «недействительных serialPuts (INT Fd, символ * с);» - вы можете использовать стандартную библиотечную функцию sprintf для форматирования, а затем записать эту целую строку с помощью функции serialPuts. Удачи! –

+0

@RonDahlgren, пожалуйста, укажите пример использования этой функции или, возможно, функции 'serialPrintf'. Я относительно новичок в программировании – Yamaha32088