Hallo, ich habe mir von Keil µVision das Hex File erstellt. Wenn ich das Hex-File aber in den Galep lade, hab ich immer einen Offset von 0x7FF d.h. Das Programm fängt erst ab Adresse 0x800 an??? Mein Flash hat aber nur 2kB d.h. bis 0x7FF programmierbar. Galep regt sich darüber natürlich auf und weigert sich was zu tun. Wo kann ich im Keil einstellen, dass das Programm schon ab Adresse 0x0000 anfängt????? mfg Manfred
Das Problem habe ich auch schon festgestellt. Es liegt daran, dass du wahrscheinlich nur die Evaluierungsversion von Keil benutzt. In dieser wird scheinbar versucht relative Segmente (rseg) zu blockieren. Lass einfach mal die rseg's weg und schreib statisch hintereinander weg, dann sollte es funktionieren.
@Lars: was genau meinst du mit "Lass einfach mal die rseg's weg und schreib statisch hintereinander weg"???? Ich habe jetzt noch folgendes probiert. Das File welches mir Keil erstellt ist ein Hex-File. Galep will aber lieber ein Bin.File haben also nicht das aufgeblassene Hex-File. Jetzt passt das Programm auch in den Flash-Speicher. Jedoch will Galep noch immer nicht programmiern bzw. weder lesen noch löschen...verdammt...... Manfred
Ok, das mit dem Bin-File funktioniert auch nicht. Hab noch ein Hex-File probiert und siehe da, Galep programmiert den µC. Aber wie schaffe ich es dass mein Hex-File schon bei 0x00 anfängt und nicht bei 0x800??? Manfred
also 0x000 wird mit org 000h erzwungen ;-) und wenn du irgendwelche "rseg" befehle in deinem code siehst, dann kommentiere sie bitte aus schreib erstmal was einfaches sowas zum beispiel org 000h test: nop inc a sjmp test da passiert nichts spektakuläres und das steht bei 0x000
@Lars: Ich habe vergessen zu erwähnen das mein Programm in C vorliegt,sorry. Manfred
Der Offset ist in der Keil-Demoversion erzwungen, damit werden MCs mit kleinen interen FLASH, wie Du hast, ausgesperrt. Sonst würde ja keiner die Vollversion kaufen. Vielleicht ist SDCC (kostenlos) mit IDE eine Alternative. www.opcube.com Dieser C-Compiler hat diese Einschränkung nicht. Gruß Matthias
Hallo, Danke für eure Antworten. Hab jetzt das Entwicklungstool von Cypress (http://www.cypress.com/portal/server.pt?in_hi_opt_comm_community=223&in_hi_space=SearchResult&in_hi_control=bannerstart&in_tx_query=Keil) benutzt. Da ist KeilµVision2 dabei und programmierbar bis zu 4kb Jetzt fängt auch der COde bei 0x00an :-) Jedoch kann man als Target nur ein paar spezielle CHips von Cypress auswählen. Ich hab jetzt als Target keines Ausgewählt aber unter Options for Target steht mein AT89C2051 drin! Jedoch stimmt jetzt irgendwas mit dem Timing nicht mehr ganz. Hab eine Schleife die vorher genau 1ms dauerte und die dauert jetzt plötzlich nur mehr 680µs ???? mfg Manfred
Die Target-Einstellung ist für 8051er relativ bedeutungslos, da alle in den Grundfunktionen kompatibel sind. Du musst nur dafür sorgen, das die Linkereinstellungen deinem Typ entsprechen, zB.: RAMSIZE(256) CODE ( 0X0000-0X07FF ) und ggf. XDATA( 0X0000-0X1FFF ) PDATA( 0X0000 ) (muss nicht zu Deinen MC passen, musst halt genau das Datenblatt lesen!) Dann musst Du auf jedem Fall im C-Prg. das richtige Include mit den SFR für deinen MC einbinden, Bsp. #include <at89c51.h> Das Timing-Problem dürfte nichts mit Keil zu tun haben. Eventuell ist eine andere Optimierungsoption eingestellt, so das der code nun effizienter ist. #pragma optimize(8,size) // speed oder size Dokumentation lesen
@Matthias : Wo genau soll ich diese Daten eingeben? Unter BL51 Locate und dann unter Code Range 0x07FF??? Was genau geb ich unter Data, Idata ,Pdata an?? RAM hat der 2051er 128. Anmerkung: Im Programm werden auch variablen mit idata verwendet.Muss ich da irgendwie was voreinstellen? mfg Manfred
Bei "Target" und/oder "BL51-Locate". Entscheidend ist was letztlich bei "BL51-Locate" unten als LINKER-CONTROL-STRING steht, auch mal weiter runterscrollen. Der Linker orientiert sich nur an dem was da steht. Wichtig ist, das da RAMSIZE(128) CODE ( 0X0000-0X07FF ) steht Bei BIT,DATA,IDATA,STACK nichts vorgeben, dann gelten Standardeinstellungen. PDATA kannst du eh nur nutzen, wenn auch XDATA da wäre, also beides offenlassen. Im C-Programm kann auch IDATA verwendet werden, wenn der MC nur 128Byte hat. Besser wäre aber nur DATA zu verwenden oder den Präfix ganz weg zu lassen. (Memorymodell "Small" einstellen, dann gelangen automatische alle Variablen ohne Speicherbereichsangabe ins interne DATA)
@Matthias: RAMSIZE kann ich nirgendwo einstellen das mir das im Linker Control string steht....
Vermutlich wird RAMSIZE automatisch erstellt, aus den Angaben in der Device-Datenbank. Ohne Angabe von RAMSIZE im Linker-control-String wird auch nur 128Byte benutzt. Versuch doch mal bei File/Device-Database mit ADD den 89C2051 neu zu erstellen. Die Befehle sind in der Doku. erleutert. Kannst auch ein anderes Device als Vorlage nehmen. sollte dort etwa so aussehen: CPU=IRAM(0 - 0x7F) IROM(0 - 0x7FF) CLOCK(24000000) Kannst auch von deiner anderen Demoversion die Einstellung abschauen.
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.