C-kod, printf fråga

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
dangraf
Inlägg: 530
Blev medlem: 9 juni 2003, 15:30:56
Ort: göteborg

C-kod, printf fråga

Inlägg av dangraf »

Hallå alla glada!
jag tänkte skriva min printf funktion till en dsPIC, och använder kompilatorn C30.

Deklarationen av printf ser ut ung såhär:

void print(char *ptr,...);

Jag är inte familjär med hur "..." används i C. Är det någon form av standard variabel i form av pekare eller??

För jag skulle gärna viljat kunna skrivat.ex

int i = 10;
float fl = 3.2;
printf("talet %i motsvarar %x i hex, nur är det %f grader varmt ute" ,i ,i,fl );

Men jag vet inte riktigt hur man når variablerna i och fl i min funktion.

Någon som vet??
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

"..." betyder väl bara att "här kommer det mera" !?

Sen, vart hamnar resultatet av fprint ?

Hela iden med fprint verkar lite konstig på en microcontroller,
tycker jag i alla fall... :-)

Slutligen, behöver du verkligen det dynamiska området som
en float omfattar bara för att representera en temperatur med
en decimal ? Verkar overkill. Fixed point borde duga bra.
henkebenke
Inlägg: 520
Blev medlem: 31 maj 2003, 10:42:37
Ort: Helsingborg

Inlägg av henkebenke »

Kernighan & Ritchie sidan 156, där står hur man gör en minimal printf.
Kopierat valda delar:

Kod: Markera allt

void minprintf(char *fmt, ...)
{
  va_list ap; //pekare till argument
  double dval;
  int ival;

  ...
  va_start(ap, fmt); // ap ska nu peka på första argumentet
  ...
  ival = va_arg(ap, int); //va_arg() returnerar ett argument och flyttar ap så den pekar på nästa. 
                          //Typnamnet avgör vilken typ som returneras och hur mycket ap ökas.
  dval = va_arg(ap, double);
  va_end(ap); //Slutligen lite cleanup
}  
bearing
Inlägg: 11676
Blev medlem: 2 mars 2006, 01:01:45
Ort: Ängelholm

Inlägg av bearing »

henkebenke
Inlägg: 520
Blev medlem: 31 maj 2003, 10:42:37
Ort: Helsingborg

Inlägg av henkebenke »

Sodjan: Många kompilatorer kör ut printf på lämplig UART, ganska kraftfullt som debug eller för loggning tex.

Och som sagt, flyttal bör man akta sig för, skrymmande och långsamt och att implementera utskrift av float i printf är lite mer komplicerat än att skriva ut en int.
dangraf
Inlägg: 530
Blev medlem: 9 juni 2003, 15:30:56
Ort: göteborg

Inlägg av dangraf »

Tackar för ett snabbt svar!!

Jag har tyvär inte den boken. Hittade dock ytterligare ett exempel precis innan jag fick ditt svar.

Står på s221 i "dsPIC language tools libaries" som går att ladda ner från microchips hemsida. Headersn som skall inkluderas heter <stdarg.h>
Skriv svar