eigene "printf-Funktion" mit variabler Argumenten Liste

OP #2220018
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, ...);
OP #2220121
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
Gast #2220143
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.
Moderator Persönliche Seite #2220162
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).
OP #2220172
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>

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