Hallo zusammen, der Betreff sagt eigentlich schon alles: hat jemand die passende Header-Datei mit den Bit-/Address-Defines für den ATMega324PB bzw. eine Quelle? Danke!
Kein Problem, hab gerade mal bei Microchip reingeschaut, die aktuelle Toolchain (3.5.4) kennt den tatsächlich noch nicht, da ist nur die 48-328PB Serie drin.
:
Bearbeitet durch User
In AtmelStudio 7 an einer für mich unüblichen Stelle: C:\Atmel7\7.0\packs\atmel\ATmega_DFP\1.0.90\include\avr\iom324pb.h Keine Referenz in io.h. Wird aber in einem Projekt mit Device=ATmega324pb und Native Toolchain korrekt eingebunden.
MitLeserin schrieb: > Keine Referenz in io.h. Sollte dann über's specs laufen:
1 | # AVR-LibC's avr/io.h uses the device specifying macro to determine |
2 | # the name of the device header. For example, -mmcu=atmega8a triggers |
3 | # the definition of __AVR_ATmega8A__ and avr/io.h includes the device |
4 | # header 'iom8a.h' by means of: |
5 | # |
6 | # ... |
7 | # #elif defined (__AVR_ATmega8A__) |
8 | # # include <avr/iom8a.h> |
9 | # #elif ... |
10 | # |
11 | # If no device macro is defined, AVR-LibC uses __AVR_DEV_LIB_NAME__ |
12 | # as fallback to determine the name of the device header as |
13 | # |
14 | # "avr/io" + __AVR_DEV_LIB_NAME__ + ".h" |
15 | # |
16 | # If you provide your own specs file for a device not yet known to |
17 | # AVR-LibC, you can now define the hook macro __AVR_DEV_LIB_NAME__ |
18 | # as needed so that |
19 | # |
20 | # #include <avr/io.h> |
21 | # |
22 | # will include the desired device header. For ATmega8A the supplement |
23 | # to *cpp would read |
24 | # |
25 | # -D__AVR_DEV_LIB_NAME__=m8a |
26 | |
27 | |
28 | *cpp: |
29 | -D__AVR_AT90CAN128__ -D__AVR_DEVICE_NAME__=at90can128 |
30 | |
31 | # End of file |
Die crtatmega324*.o sind ja alle identisch. Ich nehme an, dass man die auch einfach für den 324pb kopieren kann bzw. im specs-file einfach auf die 324p verweisen kann?
Randy B. schrieb: > Die crtatmega324*.o sind ja alle identisch. Ich nehme an, dass man die > auch einfach für den 324pb kopieren kann bzw. im specs-file einfach auf > die 324p verweisen kann? Ja das geht, dito für die Devicelib (libxxx.a). Man kann aber auch einfach für einen ATmega324PA compilieren und linken (vorausgesetzt die Devices sind hinreichend gleich). Wenn sie sich z.B. nur in Betriebsspannung, Footprint etc. unterscheiden ist das den Tools egal. Unterschiedliches SFR-Layout kann über Device-Header abgebildet werden; die Tools verwenden keine SFRs (mit Ausnahme der Devicelib die EEPROM-Routinen implementiert). Der einzige relevante Unterschied zwischen den Devices ist dann deren Signatur, und ob man für Device A generieren aber als Device B flashen kann hängt ab von der Flexibilität der Build-Umgebung.
Johann L. schrieb: > (vorausgesetzt die Devices sind hinreichend gleich) Naja, kleine Unterschiede in der Ausstattung sind schon vorhanden: der A hat 2 UART,3 SPI,6PWM, 2x8 und 1x16Bit Timer und 16 Touch, der B 3 UART,2 SPI,10PWM, 2x8 und 3x16Bit Timer und 32 Touch. Aber der Rest paßt in etwa.
Horst schrieb: > Johann L. schrieb: >> (vorausgesetzt die Devices sind hinreichend gleich) > > Naja, kleine Unterschiede in der Ausstattung sind schon vorhanden: > der A hat 2 UART,3 SPI,6PWM, 2x8 und 1x16Bit Timer und 16 Touch, > der B 3 UART,2 SPI,10PWM, 2x8 und 3x16Bit Timer und 32 Touch. > Aber der Rest paßt in etwa. Das sind ja keine Unterschiede, welche die Tools interessieren. Man verwendet eben andere SFRs; nämlich wie im Header festgelegt. Code für A bzw. B ist zwar nicht binärkompatibel, das spielt hier aber keine Rolle. Unterschiede, die für die Tools (Compiler, Assembler, Linker) ne Rolle spielen sind z.B. SP-Handling[*], Instruktionssatz[*], Layout der Vector-Tabelle, RAM-Beginn. [*] ist bereits dadurch erfüllt, dass A und B im gleichen Multilib-Set sind. "Nach" den Compiler-Tools spielen dann andere Dinge eine Rolle wie Device-Id, Zugriff aufs Device per Progger etc. d.h. alles, was die Code-Generierung betrifft ist identisch bis auf die Device-Header (von deren Inhalt die Tools nichts "wissen"). Am bequemsten ist natürlich, ein eigenes Device für -mmcu zu haben; dessen Unterstützung besteht aus: * specs-<device> File (Text, ab v5.1) * Device-Header * crt<device>.o (Startup-Code der AVR-LibC, ab v5.1). Zu den anderen Startfiles hinzugeben, oder eigenen Code verwenden und mit -nostartfiles linken. * lib<device>.a (Device-Lib der AVR-LibC mit EEPROM-Funktionen, ab v5.1). Entweder selbst erstellen, von einem identischen Device kopieren, oder keine oder eigene EEPROM-Funktionen verwenden und mit -nodevicelib linken.
Johann L. schrieb: > > Am bequemsten ist natürlich, ein eigenes Device für -mmcu zu haben; Ja, genauso habe ich das jetzt gemacht.
Ups, jetzt ist Interruptvektortabelle ist bei einem 324 nur 31 Einträge lang, die bei einem 324PB 51 Einträge. Was muss man wo tun, um dies noch anzupassen? Die C-Header passen soweit, die specs crt device-lib hatte ich vom 324 kopiert. Das war dann insoweit falsch, als _VECTROS_SIZE beim 324PB eben größer ist. Die Frage ist also, wie kann ich crtatmega324pb.o neu erzeugen? Danke!
:
Bearbeitet durch User
Bin jetzt den kurzen Weg gegangen, und habe mir alles einfach aus den Atmel-Packs geholt. Nur ist die Vektortabelle passend.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.