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
hängt vom compiler und deinem chip ab :) aber am 4685 unterm c18 lassen sich diese datenmengen problemlos ins programmmemory speichern.
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.
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 :)
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 :/
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.