PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Andere Register Namen



Naturp
08.04.2011, 16:19
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

Hubert.G
08.04.2011, 17:35
Am schnellsten geht es mit dem Datenblatt des 644. Die Unterschiede sind minimal.

Richard
08.04.2011, 17:45
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

Naturp
08.04.2011, 19:35
Jedenfalls mache ich das unter Bascom so, Ich änder einfach die $regfile = "m88def.dat"


..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 :confused:

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 weiter :( Durch was müste ich das jetzt z.B ersetzen??

Ja BASCOM hätte ich jetzt einigermasen begriffen :p Aber 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 :cool:

Hubert.G
08.04.2011, 20:39
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.

shedepe
08.04.2011, 20:59
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)

Naturp
09.04.2011, 07:40
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..

Hubert.G
09.04.2011, 08:43
Du wirst die fifo.c und/oder fifo.h nicht im Verzeichnis oder im AVR-Studio nicht eingebunden haben.

Naturp
09.04.2011, 08:49
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! :) :)

sternst
09.04.2011, 10:53
Ach Fifo.c muss auch eingebunden werden? Warum kann man diesen Code dann nicht einfach noch in Fifo.h schreiben?Angenommen du hast in deinem Projekt mehrere C-Dateien, in denen der FiFo-Code genutzt werden soll. Was passiert nun, wenn der FiFo-Code mit im Header steht, so wie von dir vorgeschlagen?

Naturp
09.04.2011, 12:06
Ehm..werden dann die funktionen des haders nicht in den C-Code eingebunden..??
Das is beim Compact C von CControll nicht so...und bei LittleC (LittelC ist zwar nix für µC) auch nicht. Na ja..wenn GCC halt so will :)

Danke jedenfalls! Am Ende muss es "NUR" funktionieren ;)

SprinterSB
09.04.2011, 12:33
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! :) :)

Nein. Erstens heisst die Datei fifo.c und nicht Fifo.c. Sie muss wohl zu deinem Projekt hinzu. Emenso wie alle anderen C-Dateien, die Funktionen/Daten enthalten, die du verwenden willst.