Forum: Mikrocontroller und Digitale Elektronik EEPROM für programmieren


von Dimitri W. (dimitri_w)


Lesenswert?

Tag miteinander,
Stehe bei neuem Projekt vor neuen Problemen (wie überraschend =)).

Ziehl
Habe vor in einen EEPROM bestimmte Daten reinzuschreiben. EEPROM 24FC64 
o.ä. Darin sollen für einen USB-HUBC die Parameterdaten enthalten sein.

Vorkenntnisse
Wie ein HEX- bzw. BIN- oder EPR-File auf das EEPROM kommen habe ich 
inzwischen rausgefunden. Habe einen Programiergerät + Software (GALEP5) 
diese unterstützen meine EEPROM's und obengenannte Datentypen.

Zu Verfügung stehende Software
Zum überspielen von HEX-Files     GALEP5.
IDE                               µVision4 und Silicon Laboratories IDE
Compiler                          SDCC und KEIL

Problembeschreibung
Wie muss ich meinen C-Code für die Compiler gestallten damit ein 
brauchbarer HEX- oder BIN-File am ende der Kompilierung produziert wird?


Habe in einen anderen Beitrag 
(Beitrag "Intel Hex File für EEprom erstellen") schon einen Hinweis auf die 
Lösung bekommen. Wie das Ganze allerduings mit meiner Umgebung zu 
realesieren ist, ist fraglich. Wenn Ihr ein Paar nutzlichen Tips bzw. 
Techniken für mich habt werde ich mich gewaltig freuen. Versprochen =)

von Sauger (Gast)


Lesenswert?

Nabend,

Dimitri W. schrieb:
> Problembeschreibung
> Wie muss ich meinen C-Code für die Compiler gestallten damit ein
> brauchbarer HEX- oder BIN-File am ende der Kompilierung produziert wird?

Ist nicht ernst gemeint, oder doch?

MfG

von Oder_doch (Gast)


Lesenswert?

Da Du ja Daten und keinen ausführbaren Programmcode in das EEProm 
schreiben willst, brauchst Du keinen Compiler, sondern einen einfachen 
HEX-Editor, mit dem Du das entsprechende HEX- oder BIN-File zu Fuß 
-sprich: von Hand- erstellst. Kann der Editor nur BIN-Files, besorgst Du 
Dir noch das Tool BIN2HEX zur Umwandlung in ein HEX-File. Mit diesem 
File fütterst Du dann Dein Programmiergerät - fertig!

von Dimitri W. (dimitri_w)


Lesenswert?

Sauger schrieb:
> Ist nicht ernst gemeint, oder doch?

Abend,
Schon ernst, denn mit diesem Bsp.-Code:
1
...
2
int compare (const void * a, const void * b)
3
{
4
    struct Str_A *sa = (struct Str_A*)a;
5
    struct Str_A *sb = (struct Str_A*)b;
6
    return (sb->proz - sa->proz);
7
}...
kann ich den EEPROM nicht programieren, rein technisch schon, natürlich, 
aber nicht für diesen Zweck.
Hier Beitrag "EZ-USB" ist ein änliches Problem 
behandelt, leider ohne Lösung.

Wenn ich das Problemm genauer beschreiben soll, dann hiese es: Welche 
Änderungen bzw. Techniken sind an bestehendem Entw.-Umgebung notwendig 
damit in C die Device Descriptoren "schön" parametriert bzw. eingegeben 
werden können.

P.S. Ihre Bemerkung zählt nicht zu den "Tips bzw. Techniken"

Oder_doch schrieb:
> Das entsprechende HEX- oder BIN-File zu Fuß
> -sprich: von Hand- erstellst.

Danke für den Tip! Aber genau das möchte ich vermeiden =)

von Marvin M. (Gast)


Lesenswert?

Hallo,

"Wenn ich das Problemm genauer beschreiben soll, dann hiese es: Welche
Änderungen bzw. Techniken sind an bestehendem Entw.-Umgebung notwendig
damit in C die Device Descriptoren "schön" parametriert bzw. eingegeben
werden können."

Und genau dafür ist ein Compiler eigentlich nicht gedacht.

Man kann das zwar alles umbiegen, aber bis man z.B. die KEIL-IDE so 
umgebastelt hat, hat man das mit einem Hex-Editor (es gibt auch welche, 
die Ascii in Hex wandeln...) 10x schneller fertig.

von tex (Gast)


Lesenswert?

return (sb->proz - sa->proz);
Das was Du da hst, ist ein EEprom, kein uC.
Das kann nicht rechnen. Genau genommen kann es gar nichts.
Du kannst an den Adresspins eine Adresse anlegen
und bekommst dann an den Ausgängen ein 8 Bit Antwort, also genau das 
Bitmuster, dass an der Adresse hinterlegt ist.
Du kannst also grob gesagt 64000 Bitmuster hinterlegen.
Wenn Du einen uC z.B. vom Typ 8031 an die Ein- und Ausgänge schaltest, 
dann kannst Du z.B. mittels eines Compilers ein Hex file erzeugen, 
welches dann Deinem uC das programm zur Verfügung stellt, dass ihm 
ermöglicht
return (sb->proz - sa->proz);
zu berechnen.

von Sauger (Gast)


Lesenswert?

Nabend,

Dimitri W. schrieb:
> kann ich den EEPROM nicht programieren, rein technisch schon, natürlich,
> aber nicht für diesen Zweck.

Und wie soll der Compiler deines Vertrauens, wissen welche Struktur oder 
besser Byte Order er in einem externen Seriellen EEprom abzulegen hat?

MfG

von Dimitri W. (dimitri_w)


Lesenswert?

Abend,
Eigentlich habe ich an die Funktionen "EEPROM-Variable auf feste 
Adressen legen" aus dem Tutorial 
http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#EEPROM gedacht.

Den eine Descriptor-Tabelle muss ich sowieso erstellen, warum dann nicht 
gleich in C wenn diese dann noch kompilierbar ist.

Bsp.
1
#include <...>
2
3
#define EESIZE 0x1FF;
4
#define bLength 0x000;
5
#define bDescriptorType 0x001;
6
.
7
.
8
uint8_t ee_mem[EESIZE] EEMEM =
9
{
10
   [bLength]   = 0xA2,
11
   [bDescriptorType]  = 0x05,
12
   .
13
   .
14
15
};

Das schön den Compiler abarbeiten lassen und brennen.
Aber so wie es aussieht werde ich nicht drumherum kommen mir den GCC zu 
ziehen und diesen in die KEIL MDK oder Silicon Laboratories IDE 
einbinden und mit dieser Methode die HEX-Descriptor-Tabellen erstellen.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.