IAR Datentypen zu GCC Datentypen

OP #5113691
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
Persönliche Seite #5113701
Das sind recht sicher keine "nativen" Datentypen des IAR-Compilers, das 
wird sich jemand selbst gebastelt haben.

Mach das Ding in der IAR-IDE auf, klick auf so einen Datenyp und lass 
Dir die Definition davon anzeigen.

Und stell' das ganze dann auf die in stdint.h definierten Typen (à la 
uint16_t etc.) um.
#5113725
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
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.
OP #5113746
Ich benutze wie gesagt das Atmel Studio 7.

Dort kann ich auch das ganze Projekt durchsuchen.

Nach Schlagwörtern wie IAR, Embedded, Workbench hab ich da auch schon 
gesucht, aber nichts gefunden.

Ich passe gerade die Include Pfade an und versuche die anderen Fehler 
weg zu bekommen.
OP #5113776
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
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
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 /?
#5113852
Frank M. schrieb:
> Ein typedef statt #define wäre hier eventuell sinnvoller.

Stimmt, habe nur #defines verwendet weil ich persönlich in C nur 
Makros/defines großschreiben würde. Gefühlsmäßig hätte ich deshalb 
gesagt, dass es im Original auch ein #define ist. i8, i8p usw hätte ich 
auch per typedef gemacht.
Moderator Persönliche Seite #5113855
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
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
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
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.
OP #5117546
Ok, ihr habt mich überzeugt.

Ich werde den Code neu schreiben und mich etwas tiefer darin 
einarbeiten. Ich dachte es ginge mit sehr wenig Einarbeitung und 
Aufwand. Das scheint aber nicht zu funktionieren.

Gerade da der Code abgeändert werden soll, schreibe ich ihn neu.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 9 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

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.