mikrocontroller.net

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


Autor: Christoph Schmidt (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 ?

Autor: Uhu Uhuhu (uhu)
Datum:

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

Autor: Christoph Schmidt (cschmidt_8031)
Datum:

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

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>und muss nicht immer wieder neu ins EEPROM.

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

Autor: Christoph Schmidt (cschmidt_8031)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Christoph Schmidt (cschmidt_8031)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Christoph Schmidt (cschmidt_8031)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Frank (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>aber lagernd bei wem ?
http://www.csd-electronics.de/

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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.