www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Programmierung XC167


Autor: Jürgen M. (willi99)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo!

Ich bin gerade dabei ein eigenes Board mit dem XC167 zu entwickeln und 
die passende Software dazu zu schreiben. Als Programmierumgebung 
verwende ich VX-Tools von Tasking. Damit kann ich meine Software in den 
XC167 flashen. Für die Entwicklungsphase ist das auch ok. Für später 
möchte ich dafür aber meine eigene Software verwenden. Ich habe in der 
Dokumentation auch Infos zum BSL gefunden, aber keinen Quellcode für die 
32 Bytes.

Vielleicht kann mir hier jemand weiterhelfen?

Grüße
Jürgen

Autor: 12er Dude (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Jürgen,

schau mal hier: http://www.keil.com/support/docs/1065.htm

Sonst selber machen, das geht auch.

Tschü Dude

Autor: Jürgen M. (willi99)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Dude,

danke für den Tipp. Ich arbeite nicht mit Keil, aber bei Tasking gibt es 
auch die Sourcen wie ich jetzt erfahren habe.

Ich hoffe ich komme damit zurecht. Ich bin nicht der geborene 
Assemblerprogrammierer.


Grüße
Jürgen

Autor: Jürgen M. (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich werde aus dem Ganzen nicht schlau!

Ich habe einen Preloader geschrieben, der 0x40 Bytes in den Speicher von 
0xE0024 bis 0xE0063 schreibt (siehe Sourcecode) und anschließend an die 
Stelle 0xE0024 springen soll.

Der Preloader läuft (ich sende nach dem Empfang der 0x40 Bytes ein 
Zeichen über die serielle Schnittstelle). Allerdings speichere ich die 
0x40 Bytes entweder an eine falsche Stelle oder der Sprung dahin 
funktioniert nicht.

Ich wollte erstmal einen Pin toggeln lassen bzw. weitere Zeichen 
ausgeben. Nichts funktioniert.

Hat jemand eine Idee was falsch laufen könnte?


Danke
Jürgen

Autor: 12er Dude (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Jürgen,

wenn der Preloader (die 32 Byte) läuft, hast Du schon gewonnen.

Bei dem nachgeladenen Code würde ich zuerst den Watchdog disablen und 
den Stack aufsetzen.

Wenn der Preloader genau 32 Byte umfasst (NOPs einfügen) und wie bei Dir 
das nachgeladene Programm direkt dahinter liegt, wird es auch ohne 
Sprungbefehl aktiviert.

Tschü Dude

Autor: Jürgen M. (willi99)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Dude,

ich bin jetzt ein bisschen weiter. Der Code, der nach dem Preloader 
geladen wird, sendet mir tatsächlich ein Byte zurück.

Allerdings gibt es Probleme beim Senden mehrerer Bytes. Manchmal geht's 
manchmal nicht. Vielleicht liegt das daran, dass die Register durch den 
BSL nicht korrekt gesetzt wurden. Da muss ich jetzt nochmal danach 
schauen. Allerdings bekommt man auch keine Information, welche 
Einstellungen der BSL vornimmt.

Grüße
Jürgen

Autor: 12er Dude (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Jürgen,

der BSL konfiguriert die Schnittestelle sicherlich richtig, wenn die 
Baudrate mit dem Takgeber möglich ist. Rechne das mal für Deine 
Konfiguration (Quarz) nach, oder wähle eine andere Baudrate für die 
erste Initialisierung.
Der BSL hat eine automatische Baudratenerkennung anhand des ersten 
(Null-) Byte, das er zur Initialisierung empfängt. Als Antwort sendet er 
darauf eine Kennung der Chip Familie (s. Manual). Wenn dieses Byte 
stimmig ist, passt die UART Konfiguration.

Wie sendest Du "mehrere Bytes"? Ist sichergestellt, dass es keinen 
Buffer overflow gibt?

Tschü Dude

Autor: Jürgen M. (willi99)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Dude,

die Schnittstelleneinstellungen waren wohl schon in Ordnung. Nachdem ich 
jetzt aber auch fast alle anderen Register auf die Werte meiner 
"normalen" Software gesetzt habe, kann ich auch mehrere Zeichen 
hintereinander senden. Was jetzt genau die Ursache war, habe ich nicht 
im Detail nachvollzogen.

Ich prüfe vor jedem Zeichen auf den Transmit-Interrupt, so dass es 
sichergestellt ist, dass der Sendepuffer schon leer ist.

Danke und Grüße
Jürgen

Autor: 12er Dude (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Glückwunsch Jürgen,

dann hast Du es ja geschafft.

Viel Erfolg mit den nächsten Schritten!

Tschü Dude

Autor: Jürgen M. (willi99)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Dude,

ich habe mittlerweile ein ganz merkwürdiges Phänomen:
Ich kann mein Programm übertragen und ich kann Zugriffe auf das Flash 
ausführen lesen, löschen, schreiben..., aber es gibt Probleme, wenn ich 
zuviel Code (vielleicht auch zuviele Funktionsaufrufe) in meinem 
Programm habe.
Mein Programm macht dann undefinierbare Dinge zum Beispiel in Zeile 10, 
wenn ich in Zeile 15 eine Ausgabe über RS232 machen würde. Ohne die 
Zeile 15 läuft mein Programm bis zum Ende fehlerfrei.

Kann da beim Linken etwas schief gehen? Bis auf den zusätzlichen 
Funktionsaufruf (von Zeile 15) kann ich aber nicht soviele Unterschiede 
feststellen. Den Stack habe ich auch schon vergrößert, leider ohne 
Erfolg.

Hast du noch eine Idee?

Grüße
Jürgen

Autor: willi99 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Dude,

ich habe den Fehler mittlerweile gefunden. Mein Konverter srectobin 
funktionierte nicht richtig. Er hat die Lücken im Code nicht gefüllt. 
Ich habe das mittlerweile korrigiert und es scheint jetzt problemlos zu 
funktionieren.

Grüße
Jürgen

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.