mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik 2kB Firmware über pic18F4550 auf einen Sensor laden


Autor: Frank Kalka (verpeilt)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Leute,
ich muss für ein Projekt eine 1986 Byte große Firmware in eine Sensor 
laden. Das soll über einen pic18F4550 und SPI passieren. Im Normalfall 
würde ich die Firmware auf ein EEPROM brenne und sie dann von dort auf 
den Sensor schaffen, was aber aus Platzgründen auf der zur 
verfügungstehenden Platine nicht geht.

Gibt es eine Möglichkeit so große Konsanten auf dem Pic anzulegen?


Gruß
Frank

Autor: morph (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hängt vom compiler und deinem chip ab :)

aber am 4685 unterm c18 lassen sich diese datenmengen problemlos ins 
programmmemory speichern.

Autor: Frank Kalka (verpeilt)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja, das dachte ich mir auch. Leider hat das bis jetzt nicht so richtig 
geklappt. Hatte es mit

rom char firmware[]= {.....}

versucht, was aber (im Nachhinein) zu einem Fehler wegen zu geringer 
Stackgröße führte. Bin noch neu auf den Pics und wurde bei dem Projekt 
quasi ins kalte Wasser gestoßen.


Ich habe auch schon was in der c18 Hilfe zu großen Datenobjekten 
gefunden. Da wird dann allerdings auch im Linkerskript rum editiert.

Autor: morph (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ich glaub da kommst du nicht drum herum.

ich schreib grad an einer lib für ein 128x64 display, das braucht recht 
genau 1kB / bild.

musste damit ich den inhalt im controller buffern kann, auch erst im 
linker-script rumwerken. dafür funktioniert es jetzt ohne probleme.

die anleitung im c18 handbuch ist wirklich brauchbar, leider wär mir 
sonst auch kein weg bekannt. wobei dein problem ja einfacher als meines 
ist. die firmware ist ja statisch, mein displaybuffer musste ins ram, 
braucht gut ein drittel des vorhanden rams auf :)

Autor: Frank Kalka (verpeilt)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
So, ich hab jetzt mal das Linkerskript umgeschrieben:

DATABANK   NAME=firm       START=0x783E         END=0x7FFF
SECTION    NAME=firm_con   ROM=firm


und die Variable als

#pragma idata firm_con
const char firmware[]={.......};


definiert.
Das funktioniert aber auch nicht. Ich bekomme aber auch nur ein "Build 
Failed", ohne Anhaltspunkt was falsch ist :/

Autor: Frank Kalka (verpeilt)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
So, mit

 CODEPAGE   NAME=firm       START=0x783E         END=0x7FFF   PROTECTED
 SECTION    NAME=firm_con   ROM=firm

und

 #pragma code firm_con
 const char firmware[]={.......};

scheint es jetzt zu funtionieren. Jetzt bekomme ich zwar die Meldung, 
dass meine Variable mehrfach definiert ist, was sie eigentlich nicht 
ist, aber das sollte ich noch in den Griff bekommen.

Danke nochmals

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.