Diskussions- und Newsboard des DARC-Ortsverbandes I40
allgemeine Kategorie => mcHF Projekt Deutsch / English (here you can discuss everything related to mcHF) => Message started by: DF8OE on 21. November 2015, 13:38:55

Title: triviale C-Frage
Post by: DF8OE on 21. November 2015, 13:38:55

Ich seh den Wald vor lauter Bäumen nicht...

Ich bin in der Firmware am rumbasteln. Dazu muss ich eine Funktion erstellen, die einen Zeiger auf eine Variable zurückliefert. Aus Kompatibilitätsgründen mit anderen Dingen MUSS meine Funktion folgenderweise arbeiten:

Die Funktion (hier liegt was bei ??????????????? im Argen):

myfunction(uint16_t *value)
{
uint16_t test = 0x2345;
value = &test; ????????????????????
}



Der Aufruf:

uint16_t data;
myfunction(&data);

****hier soll in data einfach 0x2345 stehen****

...und das tut es nicht. Die Zeile mit den Fragezeichen - da habe ich mich wohl verrannt. Und ich brauche auch exakt das, was da stehen muss, damit es so funktioniert wie beschrieben. Die anderen Zeilen dürfen NICHT verändert werden.

Natürlich ist der Aufruf der Funktion komplizierter als hier dargestellt, natürlich ist der Wert von "test" nicht konstant - es geht mir nur um die Frage, wie ich die Zeile mit den Fragezeichen so ändere, dass in der Variablen data hinterher der Wert der Variablen test steht. Die Deklaration der Funktion ist nicht veränderbar (Kompatibilitätsgründe). Und die Funktion wird auch so aufgerufen, wie hier beschrieben. Mit der Übergabe von &data soll die Variable data mit dem Wert (und nicht mit der Adresse) gefüllt sein.

Wer winkt mit dem Zaun ::)

vy 73
Andreas

Title: Re:triviale C-Frage
Post by: DF8OE on 21. November 2015, 13:49:00

grummelgrummel...

Ich liebe es, Fragen aufzuschreiben. Erfahrungsgemäß lese ich mir meine Frage danach durch, ticke mich an die Stirn und frage mich, warum ich gefragt habe. Vorher habe ich aber gefühlte Stunden im Kreis rotiert...

Die Antwort lautet:

*value = test;

Danke für eure Aufmerksamkeit 8)

vy 73
Andreas

Title: Re:triviale C-Frage
Post by: HB9FZG on 21. November 2015, 20:31:06

Hallo Andreas

Kenne ich auch. Mir fällt die Lösung dann jeweils nach 10 Minuten im Auto oder nach dem zu Bett gehen ein. Dann heisst es wieder warten auf die nächste Gelegenheit. ;)

Title: Re:triviale C-Frage
Post by: DL1KMW-Martin on 22. November 2015, 09:59:12

Klarer Fall:
...hier ist einem der Rohstoff der Software ausgegangen!
Man merke: Software wird ausschließlich aus Kaffee gemacht!
Also:
Nachfüllen!
Hierzu dirngend eine Pause machen, damit der Rohstoff auch dahin kommen kann, wo er gebraucht wird...
dann klappt es auch wieder mit dem Pointer auf Pointer auf Pointer auf...

73 de Martin

Title: Re:triviale C-Frage
Post by: DF8OE on 22. November 2015, 14:10:44

Bin schon am nächsten Pointer-Problem mit dem sequentiellen Schreiben in den seriellen EEPROM. Der virtuelle hat eine Breite von 16 Bit, der srielle eine von 8 Bit. Also muß ih zum Umkopieren erstmal den Inhalt des virtuellen in word-Abständen in den RAM kopieren, um ihn dann von dort aus in byte-Abständen in den seriellen EEPROM zu bekommen. Makabrerweise hat der serielle EEPROM einen kleineren Zwischenspeicher (128 Bytes) als die zu schreiende Datenmenge (786 Bytes), wo wir dann wieder bei diesem Zeiger-Gesumse sind. Wenn man da nicht höllisch aufpasst, ob der nun in diesem Fall um 2 oder um eins erhöht werden muss, dann geht *nix* mehr 8)

Aber bislang ist noch genug "Rohstoff" da...

vy 73
Andreas

Title: Re:triviale C-Frage
Post by: DF8OE on 22. November 2015, 17:58:28

Der Kaffee ist alle, die Aufgabe (leider) nur teilweise gelöst.

Der Transfer der virtuellen EEPROM-Daten in einen per malloc alloziierten Speicherbereich funktioniert.
Das sequentielle Schreiben in den seriellen EEPROM funktioniert noch nicht so, wie es soll. Die ersten 128 Bytes werden fehlerfrei geschrieben, bei den nächsten 128 Bytes (und jedem weiteren Block) ist jeweils das erste Byte (und nur das!!) falsch. Nach Betrachtung des Codes würde ich sagen "unmöglich" - aber das Problem dürfte (wie so oft) zwischen Rückenlehne Stuhl und Tastatur liegen ???

Mal eine N8 drüber schlafen - dann bin ich bestimmt schlauer.

Das ist schon ein echt schlanker Fuß:
Ein Byte in den seriellen EEPROM zu schreiben dauert ca 5ms.
128 Bytes "in einem Rutsch" zu schreiben dauert auch 5ms ;D
Wäre doch blöde, wen wir das nicht ausnutzen würden...

vy 73
Andreas

Title: Re:triviale C-Frage
Post by: DL1KMW-Martin on 22. November 2015, 20:04:38

Hallo Andreas,

...das hört sich verdächtig nach Problemen von Indizes und Array-Start (bei 0 oder bei 1) an...
Ja so ist das mit dem Zählen in "C"...
Aber ich denke, mit neuem Rohstoff geht's dann Morgen wie von selbst...
Muss selbst auch erst wieder auftanken, bevor die neue Woche starten kann ;-)

vy 73 de Martin

Title: Re:triviale C-Frage
Post by: DL4PD on 23. November 2015, 17:44:27

Andreas:

Kannst Du bitte den aktuellen Code dazu zeigen, falls das Problem noch existiert?

Title: Re:triviale C-Frage
Post by: DF8OE on 23. November 2015, 18:57:32

Problem gelöst. Es war ein "Hardwareproblem". Ich habe übersehen, dass ich über eine page drüber hinausgeschrieben habe - das geht bei den seriellen EEPOMs nicht...

Bin schon gut weiter - jetzt kommt der "Endspurt" dazu. Die größte Arbeit macht, dass es kompatibel zum virtuellen EEPROM sein muss.

vy 73
Andreas

Title: Re:triviale C-Frage
Post by: DC3AX on 24. November 2015, 08:25:51

Hallo Andreas,

leider haben mich meine privaten und beruflichen Sachen sehr in Anspruch genommen, vor allem die privaten. Aber nun ist es wohl endlich wieder ruhig und ich kann Dich voll und ganz unterstützen. Schreib mir mal, wo Du gerade steckst und nimm ggf. einfach meinen EEPROM Treiber aus dem NutO/S, der ist fertig, konfigurierbar und berücksichtigt die Pages :)

73
Ulrich

Title: Re:triviale C-Frage
Post by: DF8OE on 24. November 2015, 12:46:33

Der EEPROM-Treiber ist auch nicht selbst geschrieben - ich bin gerade dabei, die Routinen von Clint für das Speichern beim Abschalten umzuschreiben. Ist fast fertig ;)

vy 73
Andreas


Diskussions- und Newsboard des DARC-Ortsverbandes I40 | Powered by YaBB SE
© 2001-2003, YaBB SE Dev Team. All Rights Reserved.