Forum: Mikrocontroller und Digitale Elektronik Standard routinen an feste Adressen legen - sdcc


von Christoph Schmidt (Gast)


Lesenswert?

Ich suche nach einer Möglichkeit,
ein paar Standard Prozeduren/Funktionen an ein feste Adressen zu legen, 
um sie nicht immer und immer wieder hochladen zu müssen.
Hier geht es z.B. um die Steurung der Anzeige - die ist fertig, und muss 
nicht immer wieder neu ins EEPROM.

Ich kann beim sdcc mit --code-loc zwar den Startbereich verschieben, 
aber ohne main() bekomme ich keine ladbaren *.ihx files.
Ausserdem, wie deklariere ich die "externen" Funktionen in dem 
eigentlichen Programm ? - die Information brauche ich ja für den Linker.

Hat da schon jemand Erfahrung ?

von Uhu U. (uhu)


Lesenswert?

Leg ein Funktionspointer-Array auf eine feste Adresse und rufe die 
Funktionen dan indirekt auf.

von Christoph S. (cschmidt_8031)


Lesenswert?

Das klingt gut, aber ist noch etwas abstrakt.
Wie sag ich's meinem Linker und den Aufrufenden Funktionen ?

von holger (Gast)


Lesenswert?

>und muss nicht immer wieder neu ins EEPROM.

EEPROM? Was für ne alte Gurke benutzt du eigentlich?

von Christoph S. (cschmidt_8031)


Lesenswert?

Ich habe basierend auf einem 8255 einen EEPROM Programmierer
selbst gebaut. Den kann ich mit dem ihx File beschreiben.
Dann wechsel ich den Speicher in die 8031 basierende Schaltung.

Etwas puristisch, aber es funktioniert.
Der Schaltungsaufwand ist minimal - man kann tatsächlich alles selber 
machen.
Die Programmierung ist halt nicht sehr schnell, deshalb die Frage.
Ausserdem ist das häufige Beschreiben der Speicher auch nicht so gut für 
die Lebensdauer.

Bin inzwischen schon etwas weiter :
void func1(void) {} // eine Firmware Funktion
void func2(void) {} // eine weitere
void (*f1)(void);   // die Referenz auf eine beliebige Funktion von oben
f1 = func1 ;        // Die Zuweisung Funktion zu Referenz
kann per (*f1)(); aufgerufen werden.
ebenso kann man
f1 = (void) 0x1066; feste Adressen zuweisen.

Wenn ich den Preprozessor nehme :
#define f1 (*f1)
kann man f1(); direkt aufrufen.

(Ich bekomme noch diverse Warnungen vom Compiler/Linker, aber es scheint 
soweit zu funktionieren)
Die Adressen kann man aus dem MAP/LST  File entnehmen.

Nur die Frage : geht das eleganter ?


Mein gebliebenes Problem ist aber noch :
Wie kann ich die "Firmware" Funktionen (ohne main)
linken, das ich ein IHX File bekomme ?



holger schrieb:
>>und muss nicht immer wieder neu ins EEPROM.
>
> EEPROM? Was für ne alte Gurke benutzt du eigentlich?

von Peter D. (peda)


Lesenswert?

Christoph Schmidt schrieb:
> Ich habe basierend auf einem 8255 einen EEPROM Programmierer
> selbst gebaut. Den kann ich mit dem ihx File beschreiben.
> Dann wechsel ich den Speicher in die 8031 basierende Schaltung.

Statt zu überlegen, wie man unnötige Softwaretricks macht, wäre es 
besser, die Programmierumgebung zu vereinfachen.

Schmeiß den 8031 raus und setze einen Flash-8051 mit Bootloader rein.
Z.B. CSD-Electronics: AT89C51RB2-3CSIM
Nix umsockeln mehr, einfach die UART anstöpseln und flashen.


Peter

von Christoph S. (cschmidt_8031)


Lesenswert?

Nette Idee, aber angeboten werden muss er auch noch.
Und den Preis sollte man auch nicht außer Acht lassen.

Mit welcher Software "flasht" man den ?
(linux)
Wie wird die UART angestöpselt ?


Peter Dannegger schrieb:
> Christoph Schmidt schrieb:
>> Ich habe basierend auf einem 8255 einen EEPROM Programmierer
>> selbst gebaut. Den kann ich mit dem ihx File beschreiben.
>> Dann wechsel ich den Speicher in die 8031 basierende Schaltung.
>
> Statt zu überlegen, wie man unnötige Softwaretricks macht, wäre es
> besser, die Programmierumgebung zu vereinfachen.
>
> Schmeiß den 8031 raus und setze einen Flash-8051 mit Bootloader rein.
> Z.B. CSD-Electronics: AT89C51RB2-3CSIM
> Nix umsockeln mehr, einfach die UART anstöpseln und flashen.
>
>
> Peter

von Peter D. (peda)


Lesenswert?

Christoph Schmidt schrieb:
> Nette Idee, aber angeboten werden muss er auch noch.

Ist doch grün, also lagernd.

> Und den Preis sollte man auch nicht außer Acht lassen.

O.k. 2 Döner weniger, dann sind die 6,95 wieder drin.


> Mit welcher Software "flasht" man den ?
> (linux)

Flip, schau mal bei Atmel.
Es geht aber auch jedes Terminalprogramm, bei dem man nach ner Hex-Zeile 
auf ein Zeichen warten kann.


> Wie wird die UART angestöpselt ?

Laut Datenblatt mit nem MAX202/MAX232A.


Peter

von Christoph S. (cschmidt_8031)


Lesenswert?

Danke mal für die Antwort,
aber lagernd bei wem ?

Peter Dannegger schrieb:
> Christoph Schmidt schrieb:
>> Nette Idee, aber angeboten werden muss er auch noch.
>
> Ist doch grün, also lagernd.
>
...
> Peter

von Frank (Gast)


Lesenswert?

>aber lagernd bei wem ?
http://www.csd-electronics.de/

>Z.B. CSD-Electronics: AT89C51RB2-3CSIM

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.