AT89C2051 und Keil µVision

#626761
Lesenswert?

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
#626792
Lesenswert?

@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
#626905
Lesenswert?

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
Gast #626925
Lesenswert?

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
Gast #626953
Lesenswert?

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)
Gast #627171
Lesenswert?

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.

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