Bootloader - Datei teilweise binär senden

Hardware- und Elektronikbasteleien, Ansteuerung von Schnittstellen und Peripherie.
Fragen zu "Consumer"-Problemen kommen in Offtopic.
lixibert
Beiträge: 2
Registriert: 08.08.2012 15:15

Bootloader - Datei teilweise binär senden

Beitrag von lixibert »

Hallo,

ich habe gerade erst begonnen mich mit Purebasic zu beschäftigen und bin
nun über folgendes Problem gestolpert:

Ich möchte einen Bootloader für einen Microcontroller realisieren und
müßte dazu eine Motorola S-Record Datei seriell an den Microcontroller senden.

Der Aufbau des S-Records ist wie folgt(Auszug):
S01D00004D4554524F2056312E30302E30206D6974204545502E7372656389
S2440000000C94DA2C0C94FB2C0C94FB2C0C94FB2C0C94FB2C0C94FB2C0C94FB2C0C94FB2C0C94FB2C0C94FB2C0C9466890C94FB2C0C94FB2C0C94CE380C948C2F0C94B92F70
S2440000400C94E62F0C9413300C9440300C946D300C949A300C94C7300C94F4300C9421310C94FB2C0C94FB2C0C94FB2C0C94FB2C0C94FB2C0C94FB2C0C94FB2C0C94FB2CA7
S2440000800C94FB2C0C94FB2C0C94FB2C0C94FB2C0C94FB2C0C94FB2C0C94FB2C0C94FB2C0C94FB2C0C94FB2C0C94FB2C0C94FB2C0C94FB2C0C94FB2C0C94F5380C941033A9
Jetzt müßte ich jede Zeile einzeln senden und dann auf das ACK-Zeichen des Microcontrollers warten, nächste Zeile senden...
Dabei sollten die jeweils ersten beiden Zeichen (Also S0, S2, Sx...) als ASCII übertragen werden, der Rest der Zeile
jedoch im Hex-Format.

Mit dem Mid-Befehl kann ich ja die ersten beiden Zeichen extrahieren, aber wie kann ich den Rest der Zeile nun in Hex wandeln?
Also aus zwei Ascii-Zeichen ein (HEX)Byte machen?
Am liebsten wäre mir eine Lösung die die gewandelten Bytes wieder in einen String zurückschreibt.

Oder gibt es da was fertiges wie in C, z.B. atoi?

Ich hoffe ihr könnt mir hier weiterhelfen,

mfg Michael
Benutzeravatar
bobobo
jaAdmin
Beiträge: 3857
Registriert: 13.09.2004 17:48
Kontaktdaten:

Re: Bootloader - Datei teilweise binär senden

Beitrag von bobobo »

tag auch :)
ginge prinzipiell sowas ?

Code: Alles auswählen

t1.s="S01D00004D4554524F2056312E30302E30206D6974204545502E7372656389"
t2.s="S2440000000C94DA2C0C94FB2C0C94FB2C0C94FB2C0C94FB2C0C94FB2C0C94FB2C0C94FB2C0C94FB2C0C94FB2C0C9466890C94FB2C0C94FB2C0C94CE380C948C2F0C94B92F70"
t3.s="S2440000400C94E62F0C9413300C9440300C946D300C949A300C94C7300C94F4300C9421310C94FB2C0C94FB2C0C94FB2C0C94FB2C0C94FB2C0C94FB2C0C94FB2C0C94FB2CA7"
t4.s="S2440000800C94FB2C0C94FB2C0C94FB2C0C94FB2C0C94FB2C0C94FB2C0C94FB2C0C94FB2C0C94FB2C0C94FB2C0C94FB2C0C94FB2C0C94FB2C0C94FB2C0C94F5380C941033A9"

Procedure sendhead(head.s)
  Debug head+" wird gesendet"
EndProcedure

Procedure hexhex(hexx.s)
  While Len(hexx)
    hexxout.s=Left(hexx,2)
    hexx=Mid(hexx,3,Len(hexx)-2)
    
    Debug hexxout+" wird gesendet"
    Debug hexx + " Rest hexx"
  Wend
  
EndProcedure

Procedure machmalwatt(text.s)
  head.s=Left(text,2)
  hexerei.s=Mid(text,3,Len(text)-2)
  sendhead(head)
  hexhex(hexerei)
EndProcedure

machmalwatt(t1)
‮pb aktuell5.7 - windoof aktuell und sowas von 10
Ich hab Tinnitus im Auge. Ich seh nur Pfeifen.
lixibert
Beiträge: 2
Registriert: 08.08.2012 15:15

Re: Bootloader - Datei teilweise binär senden

Beitrag von lixibert »

Hallo bobobo,

Danke für Deine Hilfe!

Leider war das nicht ganz das, wonach ich suchte.

Ich denke ich habe mittlerweile eine Lösung gefunden um 2 Ascii Zeichen die als Hex im String stehen in 1 Byte hex zu wandeln:

Code: Alles auswählen

*AsciiBuffer = AllocateMemory(256)
hexstring$ = PeekS(*AsciiBuffer + 2, 2)
hex = Val("$" + hexstring$)
; *AsciiBuffer um 2 erhöhen und die nächsten beiden Zeichen umwandeln
Danke nochmals für deine Mühe!

mfg Michael
Antworten