PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Daten via RS232 ins Eeprom und zurück



fambi_mail
08.03.2006, 21:13
Hallo, ich habe viele Parameter die in einer Struktur zusammengefasst sind. Diese werden auch im Eeprom abgelegt. Welche effiziente Möglichkeiten gibt es diese Parameter auf einem PC zu ändern und wieder ins Eeprom zu schreiben.

Bisher habe ich da an USART Schnittstelle gedacht, die die Parameter einer nach dem anderen an den PC übertragt, wo sie ein Windows Programm aufbereitet.

SprinterSB
21.03.2006, 15:58
Du hannst die Struktur als ganzes übertragen.
Den typedef dafur machst du in einem Header, den du sowohl in dem AVR-Programm, als auch in dem PC-Teil includest.
Gelesen und Geschreiben ins EEPROM werden nicht die einzelnen Komponenten, sondern ein ganzer Datensatz als Block.

fambi_mail
22.03.2006, 12:23
ist leichter gesagt als getan. Das Problem ist auch nicht so sehr das Schreiben ins Eprom - das kann man schon blockweise machen - sondern die Übertragung.

Bisher verfolge ich folgende Strategie:

1. Lesen der Daten aus dem Eeprom mit
eeprom_read_block(&gPidParam,&ePidParam,sizeof(gPidParam));

2. Senden der Daten mit
uart_putc('<'); // start character
uart_put_dec(gKupParam.GesWeg,DATASIZE,'0');

so dass folgender String entsteht:
<0360;0016;0016;0001;0150;0205;0075;0003>

--> leider habe ich noch mehr Parameter so dass ich sehr viele uart_put_dec Befehle nötig sind

3. Separieren der Daten auf dem PC in Visual C++ kein Problem

4. Daten ausgeben, evtl. ändern

5. Erzeugen eines Strings, muss ich mir noch überlegen

6. Senden des ganzen Strings

7. Separieren der Daten auf dem uC und schreiben der Daten wieder Blockweise zurück ins Eprom


So, wie gesagt ich suche nach einen Alternative bzw. Optimierung der einzelnen Punkte. z.B. muss jeder Wert einer Struktur mit
uart_put_dec(gKupParam.GesWeg,DATASIZE,'0'); gesenden werden.

--> evtl. gibt es da schon eine Alternative den ganzen Datenblock der Struktur zu senden. Wenn ja mit welchem Befehl und welche Lib?

SprinterSB
22.03.2006, 14:53
Du sendest die Daten nicht als ASCII, sonder einfach als Bytes und setzt sie im PC wieder zusammen:


unsigned char i;
const unsigned char *p = (const unsigned char *) &gPidParam;

uart_putc ('<');

for (i=0; i < sizeof (gPidParam); i++)
{
uart_putc (*p++);
}


Das Zusammensetzen am PC geht genauso. Zu achten ist darauf, daß bei int etc die Endianess stimmt. avr ist little Endian, d.h. das low-Byte eines int steht an der kleinsten Adresse. Ist das am PC auch so, musst du nix weiter tun. Ansonsten musst du in das int-Format konvertieren.

fambi_mail
22.03.2006, 18:47
Hallo Sprinter,

vielen Dank für den Tip, jetzt muss ich nur noch schauen, wie ich eine Struktur in meiner Dialogklasse einbinde.