Forum: Mikrocontroller und Digitale Elektronik Nicht verwendete Rücksprünge?


von Holger P. (Gast)


Lesenswert?

Habe da noch eine kleine Frage.

Wieder außerhalb meines Blog’s (ich glaube da liest nicht wirklich 
jemand). Mein BootLoader läuft und auch die PC-Software habe ich 
geschrieben (war auch nicht einfach), nun aber meine Frage:

Es könnte passieren dass mein Hauptprogramm bei 0x000 vom Bottloader 
aufgerufen wird. Dadurch kann es vorkommen dass wohl noch 
Rücksprungadressen auf dem Stack liegen. Wie kann ich sichergehen das 
beim Starten des Hauptprogramms der µC jungfräulich ist. Reicht da das 
Initialisieren der Stack’s?

Also ich rufe ein Unterprogramm mit rcall auf. In diesem kann es 
vorkommen das die Routine aber mit

breq  HauptStart

und in

HauptStart:
    rjmp 0x0000

nie wieder zu seinem rcall zurück kommt.

Klar mach ich im Hauptprogramm in 0x000 ein

    ldi Dummy1, high(RAMEND)
    out SPH,Dummy1
    ldi Dummy1, low(RAMEND)
    out SPL,Dummy1

reicht das????

von H.Joachim S. (crazyhorse)


Lesenswert?

Ja.

von spess53 (Gast)


Lesenswert?

Hi

>reicht das????

Ja.

MfG Spess

von Holger P. (Gast)


Lesenswert?

Danke!

@spess53: Hast Du mal in meinem Blog über meinen Code geschaut?

von Holger P. (Gast)


Lesenswert?

Kann es sein das die UART bei der Neuinstallation nicht mehr richtig 
arbeitet?

1
; ***********************************************************************
2
; * Baudrate einstellen                                                 *
3
; ***********************************************************************
4
ldi Dummy1, HIGH(UBRR_VAL)
5
sts UBRR0H, Dummy1
6
ldi Dummy1, LOW(UBRR_VAL)
7
sts UBRR0L, Dummy1
8
9
; ***********************************************************************
10
; * RS232 Frame-Format: 8 Bit                                           *
11
; *********************************************************************** 
12
ldi Dummy1, (1<<RXEN0)|(1<<TXEN0) ; TX aktivieren, RX aktivieren 
13
sts UCSR0B, Dummy1
14
ldi Dummy1, (1<<USBS0)|(1<<UCSZ01)|(1<<UCSZ00) ; 8 Bit Daten kein Paraty, 1 Stopbit
15
sts UCSR0C, Dummy1 
16
17
cli ;Alle Interrups aus

So Installiere ich die UART nach dem ich sie genau so im BootLoader 
konfiguriert habe.

Also im BootLoader mach ich das ganz genau so. Springe vom BootLoader 
ins Hauptprogramm 0x000 und mach das noch mal.

Aber die Ausgabe will nicht mehr so wie sie soll. :-(

von Tobias Hagemeier (Gast)


Lesenswert?

Moin,

nur so eine kurze Vermutung (und je nach µC vielleicht auch 
unterschiedlich): Kann es sein, dass du TXEN und RXEN erst löschen musst 
bevor du die Einstellungen änderst? Ich könnte mir durchaus vorstellen 
das er damit Probleme hat.
Andere Geschichte wäre der Interrupt-Vektor. Wird der korrekt in den 
Application Space zurück gebogen falls du ihn im Bootloader benutzt?


Gruß,
Tobi

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
Noch kein Account? Hier anmelden.