fprint Warning [2066]

OP #2522467
Lesenswert?

Hallo,

es geht doch nicht darum, das ich nur eine Zeile geliefert habe.
aber bitte:
1
void del_port(unsigned int index)
2
{
3
//
4
  PortBit      = table_pinlist[index]._bit;
5
  PortAdresse  = table_pinlist[index]._addr;
6
  PortZeiger   = &ShiftOut[PortAdresse];
7
  *PortZeiger  &= ~ PortBit;  //  BIT == 0
8

9
//
10
#if (DebugProtokollMessage == 1)
11
printf("Test-String\n");
12
#endif
13
//
14
}

ich kann printf auch in die main.c schreiben, immer mit dem gleichem 
Ergebnis.

Siegfried
#2522484
Lesenswert?

M. L. schrieb:
> Und trotzdem liegt es nicht an der Zeile mit dem printf()...

Da wär ich mir nicht so sicher.

Es gibt in der µC Welt ein paar Compiler, die konstante Strings 
automatisch ins ROM legen und nicht ins SRAM. Das ist dann immer wieder 
lustig, wenn es darum geht an eine Funktion einen String zu übergeben. 
Bei einem konstanhten String braucht man da wieder Sonderfunktionen 
dafür, weil man ja einen anderen Pointer hat.

Nur versteh ich vom C18 zu wenig, als das ich mich da auf eine 
definitive Aussage einlassen würde.
1
  char Msg[] = "Test\n";
2
  printf( Msg );

wenn das problemlos geht, dann durchsuche mal deinen Vorrat an printf 
Funktionen, ob es eine gibt, die sich nur in der QUlifizierung des 
FOrmatstrings von den anderen unterscheidet.
Gast #2522493
Lesenswert?

Kenne mich mit pic nicht gut aus, aber ich habe mal spasseshalber nur 
die Warnung gegoogelt und bin auf Anhieb bei einem Eintrag gelandet der 
sich auf PIC resp. C Compiler bezieht.
Es geht wohl um den Mix von Speichermodellen der Anwendung und der Lib.
Vielleicht ist das ja das Problem, falls Euch nichts anderes einfällt.
OP #2522495
Lesenswert?

Hallo,

"#if (DebugProtokollMessage == 1)" nutze ich derzeitig, um den Programm 
Ablauf zu kontrollieren.
printf soll, wenn es funktioniert die Massage an "SIM URAT" und Output 
Windows weiterleiten.

da derzeitig printf nicht richtig funktioniert, habe ich diese 
abgespeckte Version so eingefügt.

in hlpC18Lib habe ich folgendes gefunden:
Prototype:  int printf (const rom char *fmt, ...);

und in meinem C-Reference Manual:
Prototype:  int printf (char *format, ...);

Siegfried
#2522499
Lesenswert?

Siegfried Saueressig schrieb:

> in hlpC18Lib habe ich folgendes gefunden:
> Prototype:  int printf (const rom char *fmt, ...);
>
> und in meinem C-Reference Manual:
> Prototype:  int printf (char *format, ...);

die vom  hlpC18Lib gilt fuer dich.

Da ist offenbar davon die Rede, dass der Pointer auf einen String im ROM 
zeigen muss. Doku rauskramen und nachsehen, wie man das schreiben muss.
#2522501
Lesenswert?

Noname schrieb:
> Kenne mich mit pic nicht gut aus, aber ich habe mal spasseshalber nur
> die Warnung gegoogelt und bin auf Anhieb bei einem Eintrag gelandet der
> sich auf PIC resp. C Compiler bezieht.
> Es geht wohl um den Mix von Speichermodellen der Anwendung und der Lib.
> Vielleicht ist das ja das Problem, falls Euch nichts anderes einfällt.


Was bist denn du für einer?
Du liest wohl auch Doku anstatt bei jedem Wehwechen gleich ins Forum zu 
rennen?

:-)
OP #2522532
Lesenswert?

Hallo,

mit
1
char Msg[] = "Test\n";
2
  printf( Msg );
die gleiche Warnung.

bei "printf("Test-String\n");" wird der Text richtig wieder gegeben.

bei "printf( Msg );" erscheint folgender Text "]j^Op]Op \"


Duko von
printf
Function:  Formatted string output to stdout.
Include:  stdio.h

Prototype:  int printf (const rom char *fmt, ...);

Remarks:  The printf function formats output, passing the characters to 
stdout via the putc function. The format string is processed as 
described for the fprintf function.
Return Value:  printf returns EOF if an error occurs, otherwise returns 
the number of characters output.
Filename:  printf.c

Code Example:  #include <stdio.h>
void main (void)
{
  /* will output via stdout (_H_USART by default) */
  printf ("Hello, World!\n");
}



Siegfried
#2522551
Lesenswert?

> Prototype:  int printf (const rom char *fmt, ...);
> ...
> printf ("Hello, World!\n");


Sag ich doch.
Das ist wieder irgendein so ein Mist, dass konstante Dinge vom Compiler 
automatisch ins ROM Segment gelegt werden.
Da gibt es sicherlich in der Doku auch einen Abchnitt drüber. Vielleicht 
gibt auch einen Compiler-Switch mit dem man das einschalten muss, der 
bei dir nicht eingeschaltet ist (ist jetzt geraten).

Auf jeden Fall hat das nichts mit Standard-C zu tun, sondern ist eine 
Eigenart dieses speziellen Compilers. Daher ist für dich in diesem Punkt 
die Compilerdoku das Mass aller Dinge.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren