IAR Datentypen zu GCC Datentypen

#5113691
Lesenswert?

Hi,

ich bin dabei ein älteres IAR Projekt in GCC (Atmel Studio 7) zu 
portieren.
Jetzt gibt es da ein paar Datentypen, die er nicht umsetzen kann.

BsP

U16P
U8
U16
I16P



und ich bin mir nicht sicher ob ich die einfach so umsetzen kann.

Gibt es dort eine Liste, die beschreibt, was welcher Datentyp genau ist?

Besten Dank schon mal
#5113725
Lesenswert?

Ich lehne mich glaube ich nicht allzuweit aus dem Fenster wenn ich 
annehme, dass i = int, u = unsigned und p = pointer.
1
#include <stdint.h>
2

3
#define U8    uint8_t
4
#define U16   uint16_t
5

6
#define I8    int8_t
7
#define I16   int16_t
8

9
#define U8P   U8*
10
#define U16P  U16*
11

12
#define I8P   I8*
13
#define I16P  I16*

Ob das mit den Pointern Sinn ergibt, wäre wohl nochmal anhand des 
Kontextes zu prüfen, der Rest ist ja aber eindeutig.
Gast #5113737
Lesenswert?

Dennis K. schrieb:
> Ich werde es mal so ausprobieren, danke schonmal.

??????????????

Nicht ausprobieren(!) sondern mit der IDE oder dem Editor Deiner Wahl 
die *.h files durchsuchen.

Keine Angst, wenn Du noch kein Tool zum durchsuchen von Dateien (in 
Verzeichnissen) hast, wird dies das erste sein, was Du sowieso brauchst.
#5113776
Lesenswert?

Felix U. schrieb:
> Ich lehne mich glaube ich nicht allzuweit aus dem Fenster wenn ich
> annehme, dass i = int, u = unsigned und p = pointer.

> #define U8P   U8*
> #define U16P  U16*
>
> #define I8P   I8*
> #define I16P  I16*
> [/code]
>
> Ob das mit den Pointern Sinn ergibt, wäre wohl nochmal anhand des
> Kontextes zu prüfen, der Rest ist ja aber eindeutig.


Das hat fast geklappt aber U8*, I8* und die 16 bit Varianten kennt der 
compiler nicht.
Persönliche Seite #5113781
Lesenswert?

Dennis K. schrieb:
> Das hat fast geklappt aber U8*, I8* und die 16 bit Varianten kennt der
> compiler nicht.

Sieh mal drei, vier Zeilen oberhalb des von Dir verstümmelten Zitats 
nach.
1
#include <stdint.h>
2

3
#define U8    uint8_t
4
#define U16   uint16_t
5

6
#define I8    int8_t
7
#define I16   int16_t
8

9
#define U8P   U8*
10
#define U16P  U16*
11

12
#define I8P   I8*
13
#define I16P  I16*

Da darfst Du natürlich nichts von weglassen.
Persönliche Seite #5113840
Lesenswert?

Achim S. schrieb:
> Keine Angst, wenn Du noch kein Tool zum durchsuchen von Dateien (in
> Verzeichnissen) hast,

So etwas ist bei jedem Windows dabei.
1
findstr /s /c:"U8P" c:\*.h

durchsucht alle *.h-Dateien auf der gesamten Festplatte c:\ nach dem 
Auftreten von "U8P".
1
findstr /s /i /c:"U16P" c:\projekte\*.h

Durchsucht alle *.h-Dateien, die unterhalb von c:\projekte zu finden 
sind, nach dem Auftreten von "U16P", wertet aber keine 
Groß-/Kleinschreibung aus, so daß auch "u16p" und "U16p" gefunden 
werden.

Mehr Informationen über findstr gibt es mit
1
findstr /?
Moderator Persönliche Seite #5113855
Lesenswert?

Dennis K. schrieb:
> Jetzt gibt es da ein paar Datentypen, die er nicht umsetzen kann.
>
> BsP
> U16P
> U8
> U16
> I16P

Da dies mit fast hundertprozentiger Wahrscheinlichkeit keine 
IAR-spezifischen Typen sind, muss der Programmierer des Projekts diese 
Typen selbst in einer H-Datei definiert haben.

Was andere hier schon mal versucht haben, Dir zu erklären und ich nicht 
sehe, dass Du das wirklich verstanden hast, schreibe ich es nochmal mit 
anderen Worten:

Da Dir der komplette Quellcode des Projekts vorliegt, musst Du auch die 
Definitionen dieser Typen vorliegen haben. Durchsuche also bitte alle 
H-Dateien des Projekts und Du wirst die Typ-Definitionen dazu auch 
finden.

Schleierhaft ist mir allerdings, warum Du das entsprechende #include 
dieser H-Datei aus dem Source herausgeworfen hast...
Persönliche Seite #5113913
Lesenswert?

Torsten R. schrieb:
> Frank M. schrieb:
>> Felix U. schrieb:
>>> #define U8    uint8_t
>>
>> Ein typedef statt #define wäre hier eventuell sinnvoller.
>
> Vor allem bei den Zeiger-Typen ;-)

Nicht unbedingt, denn dann braucht's einen extra Typen für const 
uint8_t* etc.

Anstatt dieser eigenartigen Typen würde ich einfach den ganzen Code 
überarbeiten und Standard-Typen verwenden.
#5114642
Lesenswert?

Johann L. schrieb:
> Torsten R. schrieb:
>> Frank M. schrieb:
>>> Felix U. schrieb:
>>>> #define U8    uint8_t
>>>
>>> Ein typedef statt #define wäre hier eventuell sinnvoller.
>>
>> Vor allem bei den Zeiger-Typen ;-)
>
> Nicht unbedingt, denn dann braucht's einen extra Typen für const
> uint8_t* etc.

Doch, unbedingt. Gerade deshalb. Ich halte es für sehr irreführend, wenn 
ein const U8P nicht etwa ein konstanter Zeiger auf ein U8 ist, sondern 
ein nicht konstanter Zeiger auf einen konstanten U8. Allerdings würde 
ich eh nicht auf die Idee kommen, Zeigertypen auf so eine Art zu 
verstecken. Ich sehe keinen Mehrwert darin, das *, das ganz eindeutig 
für einen Zeiger steht, hinter einem Namen zu verbergen.
Wobei: Für den vorliegenden Code würde ich dieselbe Art der Definition 
(also typedef oder #define) verwenden, wie im ursprünglichen Code, denn 
es ist ja möglich, dass er darauf angewiesen ist, dass es genau so 
gehandhabt wird, wie im Original - mit allen Merkwürdigkeiten, die das 
ggf. mit sich bringt.

> Anstatt dieser eigenartigen Typen würde ich einfach den ganzen Code
> überarbeiten und Standard-Typen verwenden.

Wenn man das Programm später über eine gewisse Zeit weiterentwickeln und 
warten muss, auf jeden Fall. Wenn's nur darum geht, das einmalig zu 
portieren, lohnt sich der Aufwand meines Erachtens nicht.
Moderator #5114685
Lesenswert?

Rolf M. schrieb:
>>>> Ein typedef statt #define wäre hier eventuell sinnvoller.
>>>
>>> Vor allem bei den Zeiger-Typen ;-)
>>
>> Nicht unbedingt, denn dann braucht's einen extra Typen für const
>> uint8_t* etc.
>
> Doch, unbedingt. Gerade deshalb. Ich halte es für sehr irreführend, wenn
> ein const U8P nicht etwa ein konstanter Zeiger auf ein U8 ist, sondern
> ein nicht konstanter Zeiger auf einen konstanten U8.

Sehe ich auch so. Anderes verwirrendes Beispiel:

1
#define U16P uint16_t *
2

3
U16P u16ptr1, u16ptr2; // nur die erste Variable ist ein Pointer

> Allerdings würde
> ich eh nicht auf die Idee kommen, Zeigertypen auf so eine Art zu
> verstecken. Ich sehe keinen Mehrwert darin, das *, das ganz eindeutig
> für einen Zeiger steht, hinter einem Namen zu verbergen.

Sehe ich auch so. Man spart mit dem P-Suffix meist nicht einmal
Tipparbeit.

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