Software-Lib porten, obwohl Feature fehlt

Gast #5316014
Lesenswert?

Hallo,

ich würde in einem derzeitigen Projekt gerne die Atmel CryptoLib mit dem 
XC8 Compiler nutzen.

Wie sich herausgestellt hat, unterstützt der XC8 die 
Inline-Initialisierung von Strukturen nicht (zumindest nicht mit 
Bezeichner).

D.h.
1
struct x = {.member1 = 1, .member2=2};
funktioniert nicht.

Hat jemand ne Idee, wie man dieses Problem umgehen kann?


http://ww1.microchip.com/downloads/en/AppNotes/Atmel-8984-CryptoAuth-CryptoAuthLib-ApplicationNote.pdf
Gast #5316066
Lesenswert?

XC8-Nutzer schrieb:
> Wie sich herausgestellt hat, unterstützt der XC8 die
> Inline-Initialisierung von Strukturen nicht (zumindest nicht mit
> Bezeichner).
>
> D.h.struct x = {.member1 = 1, .member2=2};
> funktioniert nicht.
>
> Hat jemand ne Idee, wie man dieses Problem umgehen kann?

Ansehen wie die Struktur definiert ist und eine klassische 
Initialisierung schreiben. Angenommen es stellt sich raus, dass member1 
an dritter und member2 an sechster Stelle in der struct steht:

struct x = { 0, 0, 1, 0, 0, 2 };
#5317164
Lesenswert?

Jack schrieb:
> Ansehen wie die Struktur definiert ist und eine klassische
> Initialisierung schreiben. Angenommen es stellt sich raus, dass member1
> an dritter und member2 an sechster Stelle in der struct steht:
>
> struct x = { 0, 0, 1, 0, 0, 2 };

Das ist aber sehr fehlerträchtig weil man nicht mehr sieht welche Felder 
man da wie initialisiert und weil man die Struktur nicht mehr ändern 
kann ohne eventuell unmerklich(!) ganz am anderen Ende den Code kaputt 
zu machen.

Dann würd ich schon lieber explizit hinschreiben:
1
struct x;
2
x.member1 = 1;
3
x.member2 = 2;

Auch wenns mehr Schreiberei ist wäre das weitaus wartungsfreundlicher 
und robuster.
#5317858
Lesenswert?

--- schrieb:
> "Some features from the later standard, C99, are also supported."
>
> "1. Not all C99 features have been adopted by all Microchip MPLAB XC
> compilers."
>
> Vielleicht später mal.

Wenn sie es in den letzten 19 Jahren nicht hinbekommen haben, sehe ich 
da wenig Chancen, dass es überhaupt jemals drin sein wird.
Am besten wäre eigentlich, sich beim Hersteller zu beschweren und dann 
einen anderen Compiler zu nehmen, der das korrekt umsetzt. Natürlich 
geht letzteres aus verschiedenen Gründen oft nicht ohne weiteres.
(Firma: RUB) #5317871
Lesenswert?

Ma W. schrieb:
> Kaj G. schrieb:
>> ob da paddingbytes drin sind ist egal. Werden die halt auch auf 0
>> gesetzt. Tut nicht weh und macht auch nichts kaputt.
>
> Wenn Pointer drin sind, ist es theoretisch nicht portabel.
> Praktisch gibt es aber kaum Maschinen mit NULL!=0.
Okay, guter Punkt. Daran hatte ich nicht gedacht. :-/
Gast #5317945
Lesenswert?

Kaj G. schrieb:
> Wenn Pointer drin sind, ist es theoretisch nicht portabel.
>> Praktisch gibt es aber kaum Maschinen mit NULL!=0.
> Okay, guter Punkt. Daran hatte ich nicht gedacht. :-/

Dann haben sie mit memset wenigstens einen default Wert. Auch mit der 
ursprünglichen Form werden nicht explizit angegebene Members auf „0“ 
initialisiert.  Im Gegensatz zu einer lokalen Variablen.
Gast #5321044
Lesenswert?

Guten Abend,

vielen Dank für die vielen Antworten!

Ich habe an etwas wie einen Compiler-Switch gedacht (wie der erwähnte 
"C99-Modus"), aber leider ist der XC8 inkompatibel.

Microchip hat mir mitgeteilt, dass die Lib derzeit an den XC8 angepasst 
wird, aber das noch nicht vorzeigbar ist.

Ich werde daher nochmal evaluieren, ob es sinnvoller ist die von mir 
benötigen Funktionen selbst zu implementieren, oder doch die ganze Lib 
zu porten.

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