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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.