Offene Parameter mehrfach übergeben
-
Hallo,
die folgende Frage bezieht sich auf eine Embedded Anwendung.
Von einer externen App, die über SD Karte geladen wird,
möchte ich eine printf Funktion aufrufen.Alle Funktionen werden über eine Call Table in der Host
Anwendung aufgerufen. Mit definierten Parametern läuft das
problemlos. Mit offenen Parametern weiß ich nicht wie es geht,
bzw. ob es überhaupt geht. Vielleicht kann mir jemand dazu was sagen.In der externen App soll ein Aufruf für verschiedene Devices so aussehen:
...
int i = 23;fc_printf(UART1, "Var i hat der Wert: %d\r\n", i);
fc_printf(UART2, "Var i hat der Wert: %d\r\n", i);
fc_printf(FILE, "Var i hat der Wert: %d\r\n", i);
fc_printf(LCD, "Var i hat der Wert: %d\r\n", i);
...Diese Definitionen habe ich bisher gemacht:
typedef void(FUNCputc)(char);
typedef FUNCputc* PFUNCputc;typedef void(FUNCprintf)(PFUNCputc, const char*, ...);
typedef FUNCprintf* PFUNCprintf;static void fc_printf(PFUNCputc drv, const char* frm, ...)
{
((PFUNCprintf)*(pU32)LIB_FUNC_ADDR_PRINTF)(drv, frm, ...); // Hier klemm es
}Letztendlich ruft die Host Funktion dann die eigentliche printf() auf,
somit müssen die Parameter dann nochmal übergeben werden.Geht so was überhaupt?
Danke im Voraus für Eure Bemühungen.
Grüße
BitConverter()
-
Ich verstehe nicht so richtig, was du möchtest. Kann es sein, dass du vprintf suchst?
-
SeppJ schrieb:
Ich verstehe nicht so richtig, was du möchtest. Kann es sein, dass du vprintf suchst?
Ich verstehe es auch nicht richtig, aber ich glaube er will die Ellipse an eine weitere Funktion weitergeben. Probier doch mal so etwas:
typedef void(FUNCputc)(char); typedef FUNCputc* PFUNCputc; typedef void(FUNCprintf)(PFUNCputc, const char*, ...); typedef FUNCprintf* PFUNCprintf; static void fc_printf(PFUNCputc drv, const char* frm, ...) { va_list args; va_start(args, frm); ((PFUNCprintf)*(pU32)LIB_FUNC_ADDR_PRINTF)(drv, args); va_end(args); }
Ich hab das jetzt aus dem Kopf geschrieben, weiss also nicht ob das so geht. Aber so habe ich die Frage verstanden
MfG
-
Hallo,
genau wie von \rant\ beschrieben habe ich es gemeint.
Allerdings in zwei Ebenen. Muss ich bei jeder weiteren
Fuktionsübergabe wieder eine va_list anlegen, oder reicht
es wenn ich args direkt übergebe.Kann diese Definition typedef void(FUNCprintf)(PFUNCputc, const char*, ...);
ellipsis "..." sein, oder müsste da nicht va_list stehen?Grüße
BitConverter()