mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik AT89C2051 und Keil µVision


Autor: Manfred Brunni (fredl0511)
Datum:

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

Autor: Lars (Gast)
Datum:

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

Autor: Manfred Brunni (fredl0511)
Datum:

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

Autor: Manfred Brunni (fredl0511)
Datum:

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

Autor: Lars (Gast)
Datum:

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

Autor: Manfred Brunni (fredl0511)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Lars: Ich habe vergessen zu erwähnen das mein Programm in C 
vorliegt,sorry.

Manfred

Autor: Matthias (Gast)
Datum:

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

Autor: Manfred Brunni (fredl0511)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo, Danke für eure Antworten.

Hab jetzt das Entwicklungstool von Cypress 
(http://www.cypress.com/portal/server.pt?in_hi_opt_...) 
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

Autor: Matthias (Gast)
Datum:

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

Autor: Manfred Brunni (fredl0511)
Datum:

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

Autor: Matthias (Gast)
Datum:

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

Autor: Manfred Brunni (fredl0511)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Matthias: RAMSIZE kann ich nirgendwo einstellen das mir das im Linker 
Control string steht....

Autor: Matthias (Gast)
Datum:

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

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.