AVR: Daten aus dem UART ins SRAM (Tabellen)

Gast #877863
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
Gast #877878
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
#878394
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

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 18 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.