Am schnellsten geht es mit dem Datenblatt des 644. Die Unterschiede sind minimal.
Hallo
Ich bin grad an meinem ersten Programm, welches ich mit GCC erstelle.
Ich will Daten mit UART empfangen und habe mir gedacht, dass es am schnellsten geht, wenn ich den Code vom RN-Wissen zum thema UART und FiFo (FiFo weil ich die Variante mit inerrups verwende) nehme.
So weit so gut. Ich habe aber eine ATmega644..und der Code is für eine ATmega8.
Hat mir jemand einTipp, wie ich am schnelsten die Registernamen für die ATmega644 herausfinde?
Gruss
Hans Dieter
Niklaus Wirth, entwickelte unter anderem die Programmiersprache PASCAL“C++ is an insult to the human brain.”
Am schnellsten geht es mit dem Datenblatt des 644. Die Unterschiede sind minimal.
Wenn das überhaupt nötig ist, sehr oft nennen sich die Register gleich, haben aber andere Adressen! Es könnte ausreichen dem Compiler den richtigen Chip mitzuteilen, dann passt der Compiler das schon passend. Einfach einmal austesten.
Jedenfalls mache ich das unter Bascom so, Ich änder einfach die $regfile = "m88def.dat" Im Header auf den neuen Typ und rufe den Compiler auf. Hat bis jetzt immer geklappt, außer der neue Chip hat zu wenig Platz fürs Programm selber.
Gruß Richard
Geändert von Richard (08.04.2011 um 18:51 Uhr)
..wenn ich auf Atmega8 einstelle, habe ich nur noch errors, die ICH verbockt habe! Wenn ich aber auf Atmega644 einstelle, habe 13 Errors im Code aus RN-Wissen
Ein beispiel:
error: 'UCSRB' undeclared (first use in this function)
UCSRB kommt nur einmal in dem Datenblatt vor. Und zwar in einem USART Block Diagramm auf Seite 173. Und dass hilft mir nicht weiterDurch was müste ich das jetzt z.B ersetzen??
Ja Bascom hätte ich jetzt einigermasen begriffenAber ich will nicht noch geld ausgeben damit ich mehr als 2Kb Code generieren kann..
Habe auch schon für andere Dinge C angewendet, aber da hatte ich nie mit Registernamen zu tun![]()
Niklaus Wirth, entwickelte unter anderem die Programmiersprache PASCAL“C++ is an insult to the human brain.”
So schwer ist das nun auch nicht.
UBRRH wird UBRR0H,
UBRRL wird UBRR0L
UCSRB = (1 << RXEN) | (1 << TXEN) | (1 << RXCIE); Wird
UCSR0B = (1<<RXEN0) | (1<<TXEN0) | (1<<RXCIR0);
UCSRC = (1 << URSEL) | (1 << UCSZ1) | (1 << UCSZ0); wird UCSR0C = (1<<UCSZ01) | (1<<UCSZ00);
Dann noch UDR0, UCSR0A usw.
Der Compiler sagt dir ohnehin was er nicht kennt.
Noch eint Tipp bezüglich des Datenblatts und der verschiednene Register: Oftmals gibt es am ende eines Unterpunktes (z.B. Punkt 16 - USART) eine Zusammenfassung der Register mit ihren Funktionen und Namen. Im Fall des Atmega 644p wäre das die Seite 189 ff. Das n steht dabei für USART 0 bzw. 1 (also ist n etweder 0 oder 1 jenachdem welchen UART man verwenden will)
Danke viel mal für eure Antworten! Einge Registernamen hatte ich bereits ersetzen können, jedoch eben nicht alle..
Jetzt habe ich alle ersetzt
Warum muss man den beim AVR-Studio erst noch speichern, bevor die änderungen umgesetzt werden? Bei meinen bisherigen Compilern (LitleC/ CompactC und BASIC (bei Bascom bin ich mir nicht sicher)) speichert er vor dem Complimieren automatisch. Ich hatte anfangs nämlich nicht gespeichert
C:\Users\Hans Dieter\Documents\default/../RRX_ON_Board.c:87: undefined reference to `fifo_get_wait'
RRX_ON_Board.o: In function `uart_getc_nowait':
Ich habe noch 5 solche meldungen...und weiss schon wieder nicht woher das kommt..
Niklaus Wirth, entwickelte unter anderem die Programmiersprache PASCAL“C++ is an insult to the human brain.”
Du wirst die fifo.c und/oder fifo.h nicht im Verzeichnis oder im AVR-Studio nicht eingebunden haben.
Ach Fifo.c muss auch eingebunden werden? Warum kann man diesen Code dann nicht einfach noch in Fifo.h schreiben?
Egal! Jetzt ist alles OK!![]()
![]()
Niklaus Wirth, entwickelte unter anderem die Programmiersprache PASCAL“C++ is an insult to the human brain.”
Lesezeichen