hallo, ich habe hier zwei kleinere Projekt für die ich einen Atmega-Controller aussuchen muss. Die Software wird weitgehend ähnlich sein. Die Vorauswahl ist jeweils auf den Atmega 8 und auf den Atmega 16 gefallen. Wenn ich dir Datenblätter vergleiche finde ich beim oberflächlichem Vegleich bis auf die Anzahl der I/O, des Speichers und bei den AD-Wandlern keine Unterschiede. Ich möchte nun bei der Software den selben Quellcode weitgehend in beiden Projekten verwenden. Die Frage ist nun ob es über die von mir oben aufgeführten Unterschiede weitere Punkte gibt wenn man eine Software für diese beiden Atemgas entwickelt. Gibt es weitere Fallstricke? Gruss Jürgen
In Assembler gibt's eine Falle, da die Typen <= 8KB den JMP Befehl nicht kennen und die Interrupt-Tabelle anders aussieht. Ist in C jedoch egal.
A.K. wrote: > In Assembler gibt's eine Falle, da die Typen <= 8KB den JMP Befehl nicht > kennen und die Interrupt-Tabelle anders aussieht. Ist in C jedoch egal. aha - dachte ich mirs doch ;-() ist das dann der Unterschied: Atmega 8: 130 Powerful Instructions Atmega 16: 131 Powerful Instructions Jürgen
Letztlich ja. Es müsste sich allerdings eine Differenz von 2 ergeben, weil das gleiche auch für CALL gilt. Kannst ja mal nachzählen ;-).
Apropos Assembler: Wenn das ein Problem sein sollte - dem ist mit 2 bedingten Assembler-Makros problemlos abzuhelfen.
A.K. wrote: > Letztlich ja. Es müsste sich allerdings eine Differenz von 2 ergeben, > weil das gleiche auch für CALL gilt. Kannst ja mal nachzählen ;-). die zwei Angaben über die Anzahl der Befehle habe ich direkt aus den Datenblätter des Atmega 8 bzw. 16. Jürgen
A.K. wrote: > Apropos Assembler: Wenn das ein Problem sein sollte - dem ist mit 2 > bedingten Assembler-Makros problemlos abzuhelfen. Warum so umständlich. Einfach die Interruptvektoren wie es sich gehört per .org Anweisung einstellen und schon ists egal. Ich finds immer wieder lustig, wenn sich einer bei den RETIs verzählt und dann ewig den verschwundenen Interrupt sucht. Peter
> Einfach die Interruptvektoren wie es sich gehört per .org Anweisung > einstellen und schon ists egal. Ich finde es nicht ganz so egal, ob man nun RJMP oder JMP verwendet. Nicht im Programm und erst recht nicht in der Interrupt-Tabelle. Missverstanden, glaube ich.
Prinzip: macro jump if mega8 oder kleiner rjmp $1 else jmp $1 endif end macro Wenn man dann noch die Includes als Quelle der Vektoradressen verwenden, dann sieht das ungefähr so aus: .org uart_receive jump uart_receive_handler Kann man dann auch im Rest des Programms verwenden, wenn man zu den Spezialisten gehört die mehr als 4KB als Assembler-Code fabrizieren (die sollten allerdings gerüchteweise in der PIC-Fraktion häufiger zu finden sein als bei AVRs). Bis 4KB ist es wieder egal, dann kann man überall RJMP verwenden.
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.