Forum: Mikrocontroller und Digitale Elektronik bootloader + Software-Uart


von Vlad T. (vlad_tepesch)


Lesenswert?

hi,
kennt jemand von euch einen SW-Uart-Bootloader, dessen SW-Uart man auch 
im normalen Programm benutzen kann?

Mir geht es darum, dass ich auf einem Tiny Platz sparen möchte und nicht 
2 SW-Uart-Implementierungen haben will, die beide Platz fressen.

Anforderungen:
- C-Interface
- Empfangspuffer
- An beliebigen Pins lauffähig (PCINT kann genutzt werden)
- Am besten wäre eine Baudratenerkennung (Verwendung von 16Mhz interner 
Takt ohne Crystal)

Wär toll, wenns sowas schon gäbe

Gruß
Vlad

von avion23 (Gast)


Lesenswert?

Peter Dannegger hat so ein Teil geschrieben:
Beitrag "Peter Danneggers Bootloader (fastboot) für AVR-GCC-Toolchain"

Ich verwendes es inzwischen auf allen AVRs, inkl. attiny*.

von Purzel H. (hacky)


Lesenswert?

Ein Software UART sollte an einen Timer gebunden sein. In einem 
Bootloader moechte man moeglicherweise keine Interrupts haben. Heisst, 
ich wuerd mir das nicht antun.

von Vlad T. (vlad_tepesch)


Lesenswert?

avion23 schrieb:
> Peter Dannegger hat so ein Teil geschrieben:
> Beitrag "Peter Danneggers Bootloader (fastboot) für AVR-GCC-Toolchain"
>
> Ich verwendes es inzwischen auf allen AVRs, inkl. attiny*.

den kenne ich.
so weit ich weiß, ist das aber ein reiner bootlader, oder?

Hex Oschi schrieb:
> In einem
> Bootloader moechte man moeglicherweise keine Interrupts haben.
warum?

von avion23 (Gast)


Lesenswert?

Vlad Tepesch schrieb:
> Hex Oschi schrieb:
>> In einem
>> Bootloader moechte man moeglicherweise keine Interrupts haben.
> warum?

Soweit ich informiert bin gibt es nur eine gültige Interrupt table. 
Entweder die im Anwendungsprogramm oder die im bootloader code. Das 
bedeutet, dass man die ISRs entweder alle im bootloader hat, oder im 
Anwendungsprogramm. Also sind die beiden sehr stark ineinander verzahnt, 
ein kleiner Fehler und nichts funktioniert mehr.

Vlad Tepesch schrieb:
> den kenne ich.
> so weit ich weiß, ist das aber ein reiner bootlader, oder?

Sorry, ich habe deinen Beitrag nicht aufmerksam gelesen. Ja, das ist ein 
reiner bootloader. Du bräuchtest also extra code für eine serielle 
Schnittstelle in deinem Anwendungsprogramm. Anderseits sind es nur 
512Byte...

von Vlad T. (vlad_tepesch)


Lesenswert?

avion23 schrieb:
> Soweit ich informiert bin gibt es nur eine gültige Interrupt table.
> Entweder die im Anwendungsprogramm oder die im bootloader code. Das
> bedeutet, dass man die ISRs entweder alle im bootloader hat, oder im
> Anwendungsprogramm. Also sind die beiden sehr stark ineinander verzahnt,
> ein kleiner Fehler und nichts funktioniert mehr.

stimmt.
Hier könnte der Bootloader aber Displatcher spielen.
beim Programmieren schreibt er einfach die Einträge, die er selber 
braucht nicht um, sondern die Zieladressen in eine sperate Stelle, die 
er aus seiner registrierten ISR anspringt, wenn er grad nicht aktiv ist.
Keine Ahnung, ob das funktionieren kann
unschön ist, dass ein paar Zusätzliche Takte dazukommen, von der die 
Anwendung nix weiß

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.