N'abend...
ich bräuchte kurz eine kleine Hilfestellung.
Es geht um ein über den UART empfangenes Array aus HEX werten die man zu
einem Text zusammensetzen muss, quasi zu CHAR casten.
Mein Uart String liegt im Array uart_string[].
Für die Display Ausgabe verwende ich folgende Routine:
Das funktioniert leider nur bedingt, da ich nach jedem Zeichen auf dem
Display einen Leerschritt mitbekomme und jedes Zeichen groß geschrieben
wird (letzteres wäre aktuell zu vernachlässigen).
An und für sich bekomme ich aber den korrekten Text, nur eben leider mit
Leerschritten nach jedem Zeichen.
Was mache ich falsch?
Danke, Gruß
> Die Leerzeichen werden schon in deinem uart_string[] enthalten sein.> groß->klein: tolower()
Danke :)
> ausserdem: würde> lcd_setcursor(0, 2);> lcd_string(uart_string);> nicht das gleiche machen wie deine for-schleife?
Nein da bleibt das Display leer.
1
chartemp[2]={0};
2
3
for(i=0;i<size;i++)
4
{
5
temp[0]=uart_string[i];
6
lcd_setcursor(i,2);
7
lcd_string(temp);
8
9
}
Dadurch fang ich mir die ganzen Steuerzeichen vom UART mit ein. Wirres
Zeug zwischen den Buchstaben... Da sind die Leerzeichen noch richtig
schön dagegen :)
Wie ihr aber schon vermutet habt liegt das Problem mit den Leerzeichen
am Datensatz selbst. Ich werde das wohl anderweitig filtern müssen.
Danke aber auf jeden Fall schon mal :)
Borsty Bürste schrieb im Beitrag
> Wie ihr aber schon vermutet habt liegt das Problem mit den Leerzeichen> am Datensatz selbst. Ich werde das wohl anderweitig filtern müssen.
Nö. Das Problem ist, daß Du auf unflexible C-Funktionen angewiesen bist.
Machs in Asm, dann lösen sich solche künstlichen Probleme in Luft auf
und Du bist auf jede denkbare Situation bestens vorbrreitet.
Moby schrieb:> Nö. Das Problem ist, daß Du auf unflexible C-Funktionen angewiesen bist.
Das ist kompletter Unfug. Versuchst Du hier, in die Troll-Fußstapfen von
"c-hater" zu steigen?
Rufus Τ. Firefly schrieb:> in die Troll-Fußstapfen von> "c-hater" zu steigen?
Machen wir es uns damit nicht etwas zu einfach, Herr Moderator???
Pawel R.
ld r16,counter
ld Y,Quellpointer
ld Z,Zielpointer
loop: ld r17,Y+
call bin2hex ;wandelt r17 in Ascii-Hex r17:r18,ignoriert Leerzeichen
st Z+,r17
st Z+,r18
dec r16
brne loop
... um mal das Prinzip einer einfachen Umkopieraktion in simply Asm zu
umreißen. Und wer jetzt nach dem Code von bin2hex schreit- sowas
einfaches hat der erfahrene Asm Programmierer längst in seiner Sammlung!
Alles Klartext ohne Umschweife und unverständliche Syntax Klimmzüge. Ist
doch tausendmal mehr easy als kryptischer easylife C Code ;-)
Ok, und damit Bin2hex gar nicht erst mit Leerzeichen zu tun bekommt,
einfach nach der Loop: Zeile noch ein cpi r17,$20, breq loop2, welches
vorm dec 16 steht. So der Counter nicht genau angegeben werden kann
testet man einfach aufs erste ungültige Zeichen im Quellpuffer.
Eine eigene Frage?
Dieser Thread ist über 12 Jahre alt.
Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.