AVR Typ heraus finden (Code)

OP #2154016
Lesenswert?

Hi all

Wie im Betreff zu lesen, ist es möglich im Code den eingestellten Typ 
auszulesen, der im Makefile hinterlegt ist.

Hintergrund für die Sache. Ich habe ein Projekt welches für den 
ATMega324P geschrieben ist und nun sind ATMega324PA bestellt worden. 
Leider ist hier die komplette SPI anders definiert und ich müsste zwei 
Codes verwalten, was ich aber wegen der Redundanz natürlich vermeiden 
will.

Gibts hier eine saubere und einfach Möglichkeit und wenn ja welche gg

Danke für die Infos!

Gruß MB
Persönliche Seite #2154027
Lesenswert?

Günter R. schrieb:
> Wie im Betreff zu lesen, ist es möglich im Code den eingestellten Typ
> auszulesen, der im Makefile hinterlegt ist.
>
> Gibts hier eine saubere und einfach Möglichkeit und wenn ja welche *gg*

Schaue dir mal beispielsweise die Datei io.h an, danach sollte klar 
sein, wie man mit ein paar #ifdef den Code für zwei Controller anpassen 
kann.
Gast #2154047
Lesenswert?

Der ATMega324PA ist binärkompatibel zum ATMega324P. Das heißt Code, der 
für den ATMega324P erstellt worden ist, läuft ohne Änderungen auch auf 
dem ATMega324PA! Und Umgekehrt, solange man nicht die paar wenigen beim 
ATMega324PA neu hinzugekommenen Funktionen nutzt.

Das kannst du leicht selber überprüfen, indem du einfach die Register 
Belegung am Ende der beiden Datenblätter vom ATMega324P und ATMega324PA 
vergleichst.

Es gibt bei Atmel übrigens Migration Notes, die genau die Unterschiede 
zwischen einzelnen µC Typen erklären.

Wenn es also nur darum geht eine fertig entwickelte Software für den 
ATMega324P ausnahmsweise, wegen Beschaffungsproblemen, auf einem 
ATMega324PA laufen zu lassen, dann ist das Möglich. Der einzige 
(wirkliche) Unterschied sind andere Signaturbytes.

Wenn du aber wirklich neu Kompilieren möchtest, dann macht man das am 
besten über die oben erwähnten #ifdef Präprozessor Direktiven.
OP #2154075
Lesenswert?

Erst mal danke für die Antworten!

Wie SF richtig sagt, ist der PA wirklich komplett kompatibel zum P, bis 
auf die ID.

Hab nun die header files durch gesehen und in der Tat liegt es nur an 
denen, dass der Code beim SPI nicht gleich sein darf. So wird zB aus 
"SPCR" beim PA "SPCR0".

Warum machen die Herrn von AVR sowas?? Gibts hier einen wirklich guten 
Grund dafür? Ich bin ja normal in der PC SW Welt zu Hause, aber mich 
würde man "schlagen", wenn ich sowas verbreche gg

So denn,
Gast #2154100
Lesenswert?

Günter R. schrieb:
> Hab nun die header files durch gesehen und in der Tat liegt es nur an
> denen, dass der Code beim SPI nicht gleich sein darf. So wird zB aus
> "SPCR" beim PA "SPCR0".

Wenn sich beim PA wirklich nur der Registername geändert hat, z.B. von 
"SPCR" in "SPCR0" kannst du natürlich etwas unsauber auch einfach ein

#ifndef   SPCR
  #define SPCR SPCR0
#endif

einfügen, so dass du im Code weiterhin SPCR einfach verwenden kannst

Mfg
#2154108
Lesenswert?

Günter R. schrieb:
> Hab nun die header files durch gesehen und in der Tat liegt es nur an
> denen, dass der Code

Ähh, der Quellcode. Der Binärcode dürfte identisch sein.

> beim SPI nicht gleich sein darf. So wird zB aus
> "SPCR" beim PA "SPCR0".

Der AVR kennt diese symbolischen Namen nicht. Diese gelten nur zwischen 
Quellcode und Compiler (bzw. Assembler). Und sie representieren nur die 
Adresse (bzw. Bitposition). Die Adresse beider Registernamen dürfte 
gleich sein.

> Warum machen die Herrn von AVR sowas??

Weil es inzwischen immer mehr AVRs gibt, die üppiger mit 
Peripherie-Features ausgestattet sind (z.B. 2 USART, 2 SPI).

Als viel schlimmer empfinde ich, dass etliche I/O-Register (auch ohne 
Änderung des Namens) in einen anderen Adressbereich verschoben wurden 
(vom I/O-Soace, der mit IN/OUT angesprochen werden kann, zum 
extended-I/O-Space, der wie SRAM mit LDS/STS oder über Pointer 
angesprochen werden muss).

> Gibts hier einen wirklich guten
> Grund dafür?

Ja, man will die Bezeichner vereinheitlichen. Deshalb werden bei neuen 
Typen auch die Peripherie-Einheiten mit Suffix "0" gekennzeichnet, die 
nur einmal vorhanden sind, aber bei anderen Typen doppelt verfügbar 
sind. Das ist zwar in der Übergangszeit etwas nervig, hat aber 
langfristig Sinn.

> Ich bin ja normal in der PC SW Welt zu Hause, aber mich
> würde man "schlagen", wenn ich sowas verbreche gg

Das glaube ich nicht, die "Verbrechen" sind beim PC viel größer. Aber 
das steht hier und jetzt nicht zur Debatte.

...
OP #2154109
Lesenswert?

Christoph Budelmann schrieb:
> Läubi .. schrieb:
>> Günter R. schrieb:
>>> Warum machen die Herrn von AVR sowas?
>
> Ist letztlich eine Form von Standardisierung. Egal ob der Controller ein
> SPI-Interface hat oder mehr, das erste hat am Ende immer eine 0.
> Durchgängig sieht man dies bereits bei den ATXmega.

OK das macht Sinn, von der Seite hab ich das nie betrachtet.

Lange Rede kurzer Sinn mit den genannten Infos krieg ich das nun hin.

Danke an alle!

Gruß MB

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