Standard routinen an feste Adressen legen - sdcc

Gast #1651244
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 ?
#1651447
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?
#1651570
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
#1651584
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
#1651834
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren