Hallo!
Ich versuche seit geraumer Zeit es hinzu bekommen, daß ich eine
Zeichenkette, die über die Tastatur eingelesen wird, im EEPROM
abgespeichert wird. Aber das will nicht so recht. Die Übertragung
funktioniert, und das Speichern in einer "flüchtigen" Variablen auch.
Aber ich krieg das Ding nicht ins EEPROM. Hab dafür folgende Funktion
geschrieben:
1
charee_serial_number[20]EEMEM;
2
charline[20];
3
4
intmain()
5
{
6
...
7
string_to_eeprom(line,ee_serial_number);
8
...
9
}
10
11
voidstring_to_eeprom(char*input,char*destination)
12
{
13
for(charx=0;&input[x]!='\0';x++)
14
{
15
eeprom_write_byte(&destination[x],&input[x]);
16
}
17
}
In dem Array "line[]" steht die eingelesene Zeichenkette. Und dann
wollte ich das eben so machen, daß Element für Element ins EEPROM
übertragen wird, mit Überprüfung auf das String-Endzeichen.
Aber da überhäuft mich AVR Studio mit Meldungen im Anhang...
Die "write_block"-Funktion hab ich mir schon angeguckt. Aber ich will ja
nicht einen festen Block übergeben, sondern nur alles bis zum
String-Endzeichen.
Fürde mich freuen, wenn mir einen den Fehler erklären könnte... =)
DANKE,
mfG,
Joachim
Ja, sowas hab ich befürchtet. Ich hab mein C-Buch hier auch liegen, aber
irgendwie check ich das noch nicht wirklich. Ich möchte ja nicht, daß
mir einer ne Code hier korrigiert. Ich weiß nur einfach nicht weiter,
"was" genau der Fehler ist. "Wo" steht ja das, das seh ich ;) ...
Danke nochmal,
mfG,
Joachim
Ich dachte es würde heißen "die Adresse vom Element 'x' von 'input'".
In der Zeile wollte ich den Wert der Speicherstelle vom Element 'x' von
'input' auf '\0' überprüfen... hab ich da nen Denkfehler drin?
Joachim A. schrieb:
> Ich dachte es würde heißen "die Adresse vom Element 'x' von 'input'".
Richtig.
> In der Zeile wollte ich den Wert der Speicherstelle vom Element 'x' von> 'input' auf '\0' überprüfen... hab ich da nen Denkfehler drin?
Du hast doch schon selbst erkannt, dass es die Adresse ist. Warum sollte
es jetzt auf einmal der Wert sein?
Dein aktueller Vergleich ist ein wenig wie "Hausnummer != Müller".
PS: Und an der zweiten Stelle, wo du es verwendest, ist es auch falsch.
Ich glaub es ist hoffnungslos... -_o
Ich möchte ja den Inhalt (*?) einer Speicherstelle mit einer bestimmten
Adresse (&?) überprüfen und anschließend den Inhalt dieser
Speicherstelle mit dieser Adresse an einer anderen Speicherstelle mit
einer anderen Adresse ablegen.
Habe gerade etwas gelesen, daß ich etwas "casten" muß, z.B. so:
string_to_eeprom((char*) &line, (char*) &ee_serial_number);
Aber selbst wenn das klappen würde hab ich ja immer noch nicht wirklich
verstanden, was ich da tu!
Ich hab mich besher mit vielen seltsamen Syntax-Sachen angefreundet.
Aber das mit den Pointern und so... nenene...
MfG
Joachim A. schrieb:
> Ich möchte ja den Inhalt (*?) einer Speicherstelle mit einer bestimmten> Adresse (&?) überprüfen und anschließend den Inhalt dieser> Speicherstelle mit dieser Adresse an einer anderen Speicherstelle mit> einer anderen Adresse ablegen.
Du willst gar keine Adressen "überprüfen" oder "ablegen". Du denkst viel
zu kompliziert.
Versuchen wir es mal anders herum: was bedeutet (in Worten) "input[x]"?
@Stefan
ich bin ja von deiner Geduld beeindruckt :)
"input[x]" bedeutet in Worten "Element 'x' des Arrays 'input[]'". Und
das hat eine bestimmte Adresse ;) ...
Joachim A. schrieb:
> "input[x]" bedeutet in Worten "Element 'x' des Arrays 'input[]'". Und> das hat eine bestimmte Adresse ;) ...
Ja, aber was interessiert dich diese Adresse? Ist "Element 'x' des
Arrays 'input[]'" nicht genau das, was du haben willst? Ist "Element 'x'
des Arrays 'input[]'" nicht genau das, was du mit '\0' vergleichen
willst? Ist "Element 'x' des Arrays 'input[]'" nicht genau das, was du
ins EEPROM schreiben willst?
Also an dieser Stelle erstmal danke an euch :)
So ganz läuft es zwar immer noch nicht, wie es soll, aber ich bin schon
einige Schritte weiter. Den Rest krieg ich wohl selbst hin.
Jetzt würd ich nurnoch gern wissen, ich ich Zeichen unmittelbar an den
µC senden kann. Ich nutze z.Z "HTerm". Da kann man ja eine Zeichenkette
eingeben und dann alles zusammen senden. Das find ich aber doof. Ich
möchte eigentlich, daß man immer direkt auf dem Bildschirm sieht, was
grad eingetippt wird. Das Zeichen soll also DIREKT beim Tastendruck
gesendet werden, dann sendet der Controller es zurück und es wird auf
dem Bildschirm dargestellt (normal, dachte ich). Weiß da einer bescheid?
VG
Joachim A. schrieb:
> µC senden kann. Ich nutze z.Z "HTerm". Da kann man ja eine Zeichenkette> eingeben und dann alles zusammen senden.
Möglich das man HTerm so einstellen kann.
Normal ist das nicht. Normal ist bei einem Terminal, dass es jedes
Zeichen, sobald du die Taste drückst, über die Serielle verschickt wird.
> Das find ich aber doof. Ich> möchte eigentlich, daß man immer direkt auf dem Bildschirm sieht, was> grad eingetippt wird.
Dann kontrollier einfach mal dein Programm im AVR, ob es ein empfangenes
Zeichen sofort quittiert und zurückschickt, oder ob es wartet bis eine
Zeile beisammen ist.
> Das Zeichen soll also DIREKT beim Tastendruck> gesendet werden, dann sendet der Controller es zurück und es wird auf> dem Bildschirm dargestellt (normal, dachte ich).
Das ist auch die normale Einstellung aller Terminals.
Karl heinz Buchegger schrieb:
> Joachim A. schrieb:>> µC senden kann. Ich nutze z.Z "HTerm". Da kann man ja eine Zeichenkette>> eingeben und dann alles zusammen senden.>> Möglich das man HTerm so einstellen kann.> Normal ist das nicht. Normal ist bei einem Terminal, dass es jedes> Zeichen, sobald du die Taste drückst, über die Serielle verschickt wird.
Joachim hat ganz recht; in HTerm kann man eine ganze Zeile eingeben, die
dann auf einen Schlag gesendet wird; vor dem Senden kann man den
Zeileninhalt auch editieren, wenn man einen Fehler gemacht hat. Daraus
erkennt man, daß HTerm kein "normales Terminalprogramm" ist (obwohl es
"HTerm" heißt), sondern ein ganz tolles Diagnosetool für serielle
Datenübertragung (danke, Tobi!); es zeigt ja auch Sende- und
Empfangsdaten in unterschiedlichen Fenstern an, was ein "normales
Terminalprogramm" nie tut...
Ein "normales Terminalprogramm", wie Karl Heinz es beschreibt, ist z.B.
HyperTerm (Gott bewahre!) oder ZOC (super, kostet aber etwas).
Günter
Hoffe es ist noch nicht ganz Off-Topic. Aber mit dem Programm "Terminal"
von Br@y geht es ganz gut :) . Das sendet auch direkt bei Tastendruck.
Ich bin grad nicht ganz sicher, ob es in den entsprechenden Artikeln
schon steht. Aber evtl. wäre es gut, wenn man das da ergänzen könnte,
daß es da entscheidende Unterschiede bei den Terminalprogrammen gibt.
Müssen sich ja nicht noch mehr Leute wundern ;)
Das Windoof eigene Hyperterminal funktioniert übrigens bei mir gar
nicht. Das stürzt nach dem x-ten Tastendruck einfach ab...
VG