Hallo, wie kann man eigentlich die Registeraddresse von der seriellen Schnittstelle überschreiben? Also so, dass die Baseaddr von USART nicht mehr der eigenltichen BaseAddr übereinstimmt. Hab einfach mal alle Daten vom internen RAM in den externen RAM gemappt - jedoch blieb der Fehler. Als Flash benutze ich auch ein extern angeschlossenes. Dieser Fehler tritt nur dann auf, wenn ich ein zusätzliches C-file mit Headerfile (ein paar defines und eine struct) mit einbinde - jedoch keinerlei funktion aufrufe (da der Fehler bereits davor passiert). Auf die USART hab ich einen ptr installiert ( befindet sich im internen RAM) - dieser wird nicht überschrieben, besitzt stets die Adresse von der seriellen Schnittstelle. Bernd
Gehts nur mir so? Wovon sprichst du überhaupt? Welcher Fehler? Welcher Prozessor? Die Adressen an denen Hardware im µC zu finden ist, ist doch normalerweise fix verdrahtet. Da kannste nichts überschreiben. Ergo musst du irgendeinen Fehler im Programm haben. Aber ohne obige Informationen + Programmcode wird dir niemand helfen können.
ich habe übertragungsfehler bei der seriellen schnittstelle -> data abort. Ich hab einen Ptr auf die Base Addr der seriellen Schnittstelle gesetzt und vergleiche diesen Ptr während das Programm läuft, ob dieser noch der Base Addr entspricht... -> leider ist dies nicht der Fall. Ich programmiere mit Keil und während des Debuggens kann man auf die Werte der Variablen und Ptr zugreifen und da sehe ich, dass dieser Ptr aber den richtigen Wert besitzt. Das ganze Programm funktioniert solange gut, bis ich eine weitere C-Datei hinzufüge (ohne dass Code aus dieser C-Datei ausgeführt wird). D.h. es wird kein neuer Code ausgeführt und trotzdem treten diese Fehler auf. Der Code für die serielle Schnittstelle funktioniert auf jeden Fall (da ich diesen Code schon bei anderen Programmen verwendet habe und funktionierte). Im Prinzip rufe ich als erstes im Programm die Konfiguration der seriellen Schnittstelle auf und anschließend gebe ich mittels printf() etwas über diese aus. Und hier passiert schon der Fehler, wenn weitere Dateien eingebunden werden. Erst anschließend wird die init-Funktion (oder würde) der neuen C-File aufgerufen. Arbeiten tue ich mit dem Controller AT91RM9200 von Atmel. Bernd
vielleicht ist auch ein Fehler innerhalb meines Linkerfiles...
1 | LOAD_FLASH 0x10000000 0x3FFFFF ; start address and length |
2 | {
|
3 | |
4 | EXTERN_FLASH 0x10000000 0x3FFFFF |
5 | {
|
6 | RM9200.o (RESET, +First) |
7 | *.o(+RO) |
8 | |
9 | }
|
10 | |
11 | SDRAM 0x20000000 0x3FFFFFF |
12 | {
|
13 | timer.o (+RW,+ZI) |
14 | }
|
15 | |
16 | BUFFER_SDRAM 0x21000000 EMPTY 0x2000000 |
17 | {
|
18 | |
19 | }
|
20 | |
21 | INTERN_RAM 0x200000 0xFFFFF |
22 | {
|
23 | *(+RW,+ZI) |
24 | }
|
25 | }
|
Mein Board hat einen externen SDRAM angeschlossen 0x20 000 000 bis 0x23 FFF FFF sowie einen externen Flashspeicher 0x10 000 000 bis 0x10 3FF FFF der interne RAM befindet sich 0x00 200 000 bis 0x00 2FF FFF Im Buffer_SDRAM möchte ich gerne Daten aus der Peripherie speichern - z.B. Daten von der seriellen Schnittstelle oder der USB Schnittstelle. Bernd
d.h. ich gehe richtig in der annahme dass mein linkerfile so noch nicht funktionieren kann? Bernd
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.