Forum: Mikrocontroller und Digitale Elektronik AVR: Daten aus dem UART ins SRAM (Tabellen)


von boese (Gast)


Lesenswert?

Moin moin,

ich benutze für ein aktuelles Projekt recht große Lookuptables (ca. 20 
verschiedene Wertetabellen die vom Eprom ins SRAM geladen werden und 
während des Programmablaufes über die UART verändert werden sollen 
(direkt im SRAM) und bei Bedarf ins EPROM zur Dauerhaften speicherung 
abgelegt werden sollen).

Problem ist, wie kann ich möglichst elegant unter Bascom oder ASM direkt 
von der UART die Speicherbereiche ohne dutzende "if" befehle ablegen?

Hat da jemand eine Idee bzw. Codegeschnippsel?

Gruss

Boese

von boese (Gast)


Lesenswert?

so läuft es bisweilen:
1
   Do
2
      Name = Inkey()
3
      If Name = 0 Then
4
         Exit Do
5
         Else
6
         Sinput = Sinput + Chr(name)
7
         If Name = 13 Then Gosub Programmierung
8
      End If
9
  Loop

dann springt das ganze zu "Programmierung" dort werden die gesendeten 
Zeichenketten mit dem "mid-Befehl" zerlegt und mit if-abfragen in die 
richtige Variable geschrieben.

Ich halte das für recht aufwendigt und sehr langsam gelöst :((( Ich 
hoffe jemand hat eine elegantere Idee...

Gruss

von Rolf I. (for_ro)


Lesenswert?

Anstelle der etwas aufwändigen String-Funktionen ist es manchmal 
günstiger, die Zeichen des Strings direkt anzusprechen, ähnlich einem 
Pointer in C.
Dazu musst du ein Array von Bytes deklarieren, was genau auf dem String 
liegt.
Das geht so:

Dim My_string As String * 20
Dim My_str_array As Byte At My_string Overlay

Wenn du den String mit Zeichen gefüllt hast, kannst du 6. Zeichen 
einfach über
My_str_array(6)
bekommen und auch ändern. Aufpassen musst dann allerdings auf das 
abschließende \0-Byte, welches das Ende des Strings identifiziert.
Wenn du nun weißt, dass du das 17. Zeichen über den UART einliest, 
kannst du einfach
My_str_array(17)=inkey() und dann
My_str_array(18)=0 setzen, damit dein String wieder ordentlich beendet 
ist. Dies ist nur dann nötig, wenn du auch mit den String-Funktionen auf 
My_string zugreifen willst. Die Zugriffsmethoden kannst du beliebig 
mischen.

Gruß

Rolf

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.