Atmega32 Umwandlung IAR to GCC

OP #2712944
weiss Jemand, wie man folgende Zeilen von IAR in GCC umwandeln kann?

(1) __eeprom int16_t accOffset @ EEPROM_ACCOFFSET = 156;
(2) const uint8_t AUTH_aes_key[16] EEMEM = {'Y','o','u',' 
','c','a','n','n','o','t',' ','p','a','s','s','!'};
(3) __eeprom struct battParam_struct{..}battParams @ 
EEPROM_BATTPARAMS={..};

Vielen Dank im Voraus!
Persönliche Seite #2713003
Khaled G. schrieb:
> weiss Jemand, wie man folgende Zeilen von IAR in GCC umwandeln kann?
>
> (1) __eeprom int16_t accOffset @ EEPROM_ACCOFFSET = 156;

Entfällt ersatzlos. I.d.R. ist es nicht notwendig, Variablen höndisch zu 
lokatieren.

Zum Zugriff gibt's eeprom_-Funktionen, siehe Doku der AVR-Libc.

> (2) const uint8_t AUTH_aes_key[16] EEMEM = {'Y','o','u','
> ','c','a','n','n','o','t',' ','p','a','s','s','!'};
1
#include <stdint.h>
2
#include <avr/eeprom.h>
3

4
const uint8_t AUTH_aes_key[16] EEMEM = {'Y','o','u',' ','c','a','n','n','o','t',' ','p','a','s','s','!'};
5

6
// oder
7

8
const char AUTH_aes_key[16] EEMEM = { "You cannot pass!" };

> (3) __eeprom struct battParam_struct{..}battParams @
> EEPROM_BATTPARAMS={..};

Siehe (1)
#2723294
Johann L. schrieb:
> Khaled G. schrieb:
>> weiss Jemand, wie man folgende Zeilen von IAR in GCC umwandeln kann?
>>
>> (1) __eeprom int16_t accOffset @ EEPROM_ACCOFFSET = 156;
>
> Entfällt ersatzlos. I.d.R. ist es nicht notwendig, Variablen höndisch zu
> lokatieren.

Das würde ich so pauschal nicht sagen, gerade beim EEPROM. Bei einem 
Versionswechsel der Software, bei dem neue Elemente ins EEPROM 
aufgenommen werden kann sich das Layout verändern, und dann kommt Mist 
raus, wenn auf ein vorhanenes Gerät eine neue Version geflasht wird und 
die den EEPROM-Inhalt der alten Version liest.

Stefan Wagner schrieb:
> Johann L. schrieb:
>> const char AUTH_aes_key[16] EEMEM = { "You cannot pass!" };
>
> Achtung! "You cannot pass!" ist durch das vom Compiler angehängte '\0'
> 17 Bytes lang.

Wenn für das Array explizit die Länge ohne '\0' angegeben wird, wird 
dieses weggelassen. Damit ist die Variante gleich der aus dem 
Ursprungsposting, wo auch kein '\0' am Ende steht.
#2723373
Rolf Magnus schrieb:
> Wenn für das Array explizit die Länge ohne '\0' angegeben wird, wird
> dieses weggelassen. Damit ist die Variante gleich der aus dem
> Ursprungsposting, wo auch kein '\0' am Ende steht.

Hm. Und ich dachte immer, ich würde die C-Syntax so einigermaßen 
kennen...

Nachsehen:

K&R 2. Auflage
(Hanser, 1990)
1
A.8.7 Initialisierung
2
(...) Ist die Größe des Vektors nicht bekannt, bestimmt die Anzahl der
3
Zeichen in der Zeichenkette unter Berücksichtigung des abschließenden
4
NUL-Zeichens die Größe des Vektors; liegt die Größe des Vektors fest,
5
dürfen ohne das abschließende NUL-Zeichen höchstens so viele Zeichen in
6
der konstanten Zeichenkette sein, wie der Vektor Elemente hat.

Aus der Formulierung wird mir beim ersten Lesen nicht eindeutig klar, ob 
das NUL-Byte nicht mit reinkommt, oder doch. Also im Urtext nachsehen.

Draft ANSI C Standard (ANSI X3J11/88-090) (May 13, 1988)
http://flash-gordon.me.uk/ansi.c.txt
1
3.5.7 Initialization
2
(...)
3
An array of character type may be initialized by a character string
4
literal, optionally enclosed in braces.  Successive characters of the
5
character string literal (including the terminating null character if
6
there is room or if the array is of unknown size) initialize the
7
members of the array.

und in N1548 Committee Draft — December 2, 2010 ISO/IEC 9899:201x
http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1548.pdf
1
14 An array of character type may be initialized by a character string
2
literal or UTF−8 string literal, optionally enclosed in braces. 
3
Successive bytes of the string literal (including the terminating null
4
character if there is room or if the array is of unknown size) initialize
5
the elements of the array.

Ok, das ist jetzt eindeutig. Ist noch Platz, kommt das NUL-Byte mit 
rein, sonst nicht.

War mir in über 20 Jahren noch nie aufgefallen, da ich bei char-Arrays 
immer auf Platz für das NUL-Byte geachtet habe.

Danke für den Hinweis, ist gut zu wissen.

Grüße

Stefan

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 14 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.