Forum: Compiler & IDEs eigene "printf-Funktion" mit variabler Argumenten Liste


von Fabio S. (codehamster)


Lesenswert?

Hallo zusammen,

ich wollte heute mein Projekt einmal mit globaler Optimierung 
compilieren um zu sehen ob ich noch etwas Speicherplatz gewinnen könnte.
Jedoch wirft der Compiler dann folgende Fehlermeldung und ich versteh 
nicht wieso...
Ohne die Compiler Einstellung "global Optimizations" wird nicht 
gemeckert und keine Warnung ausgegeben.

Kann mir da ev. jemand weiterhelfen?
Ich bin für jeden Tipp dankbar.

MFG Fabio

Fehlermeldung:
1
icc430 -c -IC:\icc\include\ -e -D__ICC_VERSION="V7.06" -DF449  -l -A -A -Wf-O8 -g -Wf-intenum -Wf-hwmult -Wa-g  X:\...\ZM_Soft_NX10_V011\src\rs232.c
2
!W X:\...\ZM_Soft_NX10_V011\src\rs232.c(356):[warning] (MIO)Constant Propagation : overflow in converting 'int' to 'unsigned int' 
3
Internal error -- register not allocated
4
ASGNU2(VREGP(1), CNSTU2(2))!E rs232.s(1050): illegal operand
5
!E rs232.s(1071): symbol 'L103': address changed at phase 3: old 042E new 042A at line 1071
6
!E rs232.s(1090): symbol 'L104': address changed at phase 3: old 044A new 0446 at line 1090
7
!E rs232.s(1093): symbol 'L106': address changed at phase 3: old 044C new 0448 at line 1093
8
!E rs232.s(1107): symbol 'L101': address changed at phase 3: old 0464 new 0460 at line 1107
9
C:\iccv7430\bin\imakew.exe: Error code 1
10
C:\iccv7430\bin\imakew.exe: 'rs232.o' removed.

rs232.c:
1
#include <msp430x44x.h>
2
#include <stdio.h>
3
#include "util.h"
4
#include "rs232.h"
5
6
void rs232_printf(int08 num_args, ...)
7
{
8
    va_list ap;
9
    int08 index, t, sum;
10
11
    va_start(ap, num_args);
12
    // Preamble
13
    printf("%c%c", 0xCC, num_args);
14
    // CheckSum
15
    sum = 0xCC + num_args;
16
    for(index = 0; index < num_args; index++){
17
        t = va_arg(ap, int16);
18
        sum += t;
19
        printf("%c", t);
20
    }
21
    printf("%c", sum);
22
    va_end(ap);
23
} // <-- Zeile 356

rs232.h
1
void rs232_printf(int08 num_args, ...);

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Fabio S. schrieb:
> Internal error -- register not allocated

Da wirst du wohl den Hersteller deines Compilers fragen müssen (der
ja ganz offensichtlich kein GCC ist).

von Fabio S. (codehamster)


Lesenswert?

Bitte entschuldige,
ja der Compiler ist offensichtlich kein GCC, ich wusste jedoch nicht in 
welcher Kategorie ich diesen Thread sonst eröffnen sollte.

Der Compiler ist von IMAGECRAFT:
ICC430 V7.06

jedoch hoffte ich dass aus meinem Code ein Fehler ersichtlich ist.

MFG Fabio

von Ralf (Gast)


Lesenswert?

Fabio S. schrieb:
> Internal error --
Meldet das der Compiler nicht, wenn er selber nicht mehr weiter weiß? 
(Also gerade so vorm Absturz gerettet)
Früher, beim AMIGA-C++ kam vorher noch eine Meldung "Compiler is in 
panic!" :-)

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Fabio S. schrieb:

> ja der Compiler ist offensichtlich kein GCC, ich wusste jedoch nicht in
> welcher Kategorie ich diesen Thread sonst eröffnen sollte.

Mikrocontroller & Elektronik halt.

> Der Compiler ist von IMAGECRAFT:
> ICC430 V7.06

Dann melde denen den Fehler.

von Fabio S. (codehamster)


Lesenswert?

Hallo Ralf & Jörg,

danke für eure Antworten.
Werde mich mal mit ImageCraft in Verbindung setzen.

@Jörg:

als Moderator kannst du diesen Thread ja entweder löschen oder nach 
Mikrocontroller & Elektronik verschieben. Irren ist Menschlich, ich 
versuche mich zu bessern.

ich wünsche ein schönes Wochenende.

MFG Fabio

von Imon (Gast)


Lesenswert?

Nur mal so als Schuss ins blaue.

Variable anzahl von Parametern und die va_list etc wird laut C Standart 
in dem Header stdarg.h abgearbeitet. Kann es sein das ein Complier nur 
in der von dir genannten Optimierung darüber fällt und sich etwas 
ungeschickt ausdrückt.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Fabio S. schrieb:

> als Moderator kannst du diesen Thread ja entweder löschen oder nach
> Mikrocontroller & Elektronik verschieben.

Nein, jetzt lassen wir ihn hier.

Imon schrieb:
> Variable anzahl von Parametern und die va_list etc wird laut C Standart
> in dem Header stdarg.h abgearbeitet.

s/abgearbeitet/bereitgestellt/

Ist eigentlich ein Wunder, dass er es ohne diesen trotzdem überhaupt
compiliert.

> Kann es sein das ein Complier nur
> in der von dir genannten Optimierung darüber fällt und sich etwas
> ungeschickt ausdrückt.

Ein internal compiler error ist in jedem Fall ein Fehler im Compiler
(und daher meldenswert).

Allerdings ist die Ursache möglicherweise in der Tat der vergessene
Header (insofern hätte Fabio vielleicht einen schnellen Fix für
sein eigentliches Problem).

von Fabio S. (codehamster)


Lesenswert?

danke, ich hab es tatsächlich vergessen!

habe die fehlende Zeile #include <stdarg.h> sofort eingefügt.
Jedoch mit dem selben Ergebnis.

MFG Fabio

Edit:

Compiler meckert wohl nicht weil in der stdio.h die stdarg.h eingebunden 
wird.


#ifndef __STDIO_H
#define __STDIO_H
#include <stdarg.h>
#include <_const.h>

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.