Forum: Mikrocontroller und Digitale Elektronik Keil µVision3 (brauche dringend Hilfe!)


von Juri L. (Firma: student) (juran78)


Angehängte Dateien:

Lesenswert?

Hallo allerseits!

hab eine Frage an die µVision3-Profis:

ich habe einen SoftCore-8051(oregano mc8051, frei zum download)
zu implementieren. Um den SoftCore-8051 zu Verifizieren, gabs zum
Softcore
eine .asm-Datei, die mittels µVision3 simuliert werden soll.
Anschließend
müssen wohl die Ergebnisse der Simulation in eine .hex-Datei geschrieben
werden, die dann mit den Ergebnissen der VHDL-Simulation verglichen
werden.

kann mir jemand bitte erklären, wie ich vorgehen muß. Ich kenne mich mit
µVision gar nicht aus.

Soll ich einen neuen Projekt starten, und den .asm-File dem Projekt
hinzufügen?

welche Einstellungen soll ich im "options for Target 'Target 1' tätigen?

eine schrittweise Erklärung wäre super!

die asm-Datei habe ich angehängt, eventuell kann jemand diese bei sich
ausprobieren, und mich danach klüger machen, ich hoffe sehr auf eine
baldige Antwort

von Juri L. (Firma: student) (juran78)


Lesenswert?

was ist Leute, keiner hat ne Idee?

von Ralf S. (spacedog) Benutzerseite


Lesenswert?

Da weiss ich im Moment gleich viel wie du.

Aber musst du das Ding denn unbedingt verifizieren? Wenn es ein 
Hobby-Projekt ist, kannst du ja einfach mal dein eigenes Programm auf 
dem Core ausführen und schauen, ob es macht, was es soll. Dann musst du 
es ja nicht unbedingt anhand von diesem ominösen Assembler-File testen.

von klausy (Gast)


Lesenswert?

so wie ich das sehe musst du dir bloß ein neues projekt mit startup code 
in µVision erzeugen, evtl im startup code kleine änderungen, 
Speicherbereich etc. vornehmen und deinen asm. code als inline assembler 
einfügen. dann kannst du simulieren und dir auch ein Hex. file erzeugen!

von Juri L. (Firma: student) (juran78)


Lesenswert?

klausy wrote:
> so wie ich das sehe musst du dir bloß ein neues projekt mit startup code
> in µVision erzeugen, evtl im startup code kleine änderungen,
> Speicherbereich etc. vornehmen und deinen asm. code als inline assembler
> einfügen. dann kannst du simulieren und dir auch ein Hex. file erzeugen!

danke für den Tip, Klausy!

die Sache mit inline assembler leuchtet mir nicht ein, kenn mich da 
nicht aus, kannst du mir eventuell ein beispiel geben?

von Ralf (Gast)


Lesenswert?

Hi,

das mit µV3 ist relativ einfach. Ich beschreibe dir das jetzt mal für 
einen ganz normalen 8051er, unter der Voraussetzung, dass du intuitiv 
das µV3 soweit bedienen kannst, dass ich die Schritte nicht einzeln 
erklären muss (kann ich aber bei Bedarf machen)

Du musst ein neues Projekt erzeugen, für einen "Generic 8051" als Device 
Type. Die Frage, ob der Standard StartUp-Code hinzugefügt werden soll, 
beantwortest du mit "Nein".
Die ASM Datei fügst du in den Projektbaum (Fenster auf der linken Seite) 
hinzu. Der oberste Eintrag heisst normalerweise "Target1" oder so 
ähnlich.
Der nächste Eintrag ist die aktuelle Datei-Gruppe (dient zum Gruppieren 
von Dateien, die für einen bestimmten Anwendungsteil sind, z.B. 
Display).
Zum Hinzufügen Rechtsklick auf die Gruppe und "Add File to Group" wählen 
(Dateityp muss evtl. umgestellt werden).

Wenn die ASM Datei für µV3 geschrieben ist, sollte es jetzt bereits 
möglich sein, ohne Fehler zu assemblieren/linken.
Dann noch auf Debug/Simulate klicken, und der Simulator sollte starten. 
Dann musst du noch die Ergebnisse vergleichen.

Du kannst die "Ergebnisse" der Simulation nicht in eine HEX-Datei 
schreiben. Eine Hex-Datei stellt normalerweise das Programm selbst dar. 
Das heisst, wenn du die gleiche Hex-Datei in deinen FPGA lädst, sollte 
der Controller idealerweise das gleiche machen, wie ein realer 
Controller bzw. die µV3-Simulation.
Was du dann vergleichen kannst wäre z.B. ob Variablen im RAM den 
gleichen Inhalt haben oder ob der Timer einwandfrei läuft.
Da deine ASM Datei leider nicht kommentiert ist, weiss ich nicht, was 
genau sie machen soll, hab leider keine Zeit, mir das jetzt anzugucken.

Wenn's nicht klappt, einfach Bescheid sagen.

Ralf

von Juri L. (Firma: student) (juran78)


Lesenswert?

Das ist doch eine nachvollziehbare Antwort, vielen vielen Dank, Ralf !!!

Ralf wrote:
> Hi,
>
> das mit µV3 ist relativ einfach. Ich beschreibe dir das jetzt mal für
> einen ganz normalen 8051er, unter der Voraussetzung, dass du intuitiv
> das µV3 soweit bedienen kannst, dass ich die Schritte nicht einzeln
> erklären muss (kann ich aber bei Bedarf machen)
>
> Du musst ein neues Projekt erzeugen, für einen "Generic 8051" als Device
> Type. Die Frage, ob der Standard StartUp-Code hinzugefügt werden soll,
> beantwortest du mit "Nein".

kannst du mir sagen, warum der Standard StartUp-Code nicht zugefügt 
werden soll?

> Die ASM Datei fügst du in den Projektbaum (Fenster auf der linken Seite)
> hinzu. Der oberste Eintrag heisst normalerweise "Target1" oder so
> ähnlich.
> Der nächste Eintrag ist die aktuelle Datei-Gruppe (dient zum Gruppieren
> von Dateien, die für einen bestimmten Anwendungsteil sind, z.B.
> Display).
> Zum Hinzufügen Rechtsklick auf die Gruppe und "Add File to Group" wählen
> (Dateityp muss evtl. umgestellt werden).
>
> Wenn die ASM Datei für µV3 geschrieben ist, sollte es jetzt bereits
> möglich sein, ohne Fehler zu assemblieren/linken.

+1!

> Dann noch auf Debug/Simulate klicken, und der Simulator sollte starten.
> Dann musst du noch die Ergebnisse vergleichen.

hab den Debugmodus gestartet, und dort "Run" ausgeführt. gibt es nun 
eine Möglichkeit, die Inhalte des Daten- bzw Programmspeichers 
anzuschauen?

> Du kannst die "Ergebnisse" der Simulation nicht in eine HEX-Datei
> schreiben. Eine Hex-Datei stellt normalerweise das Programm selbst dar.
> Das heisst, wenn du die gleiche Hex-Datei in deinen FPGA lädst, sollte
> der Controller idealerweise das gleiche machen, wie ein realer
> Controller bzw. die µV3-Simulation.
> Was du dann vergleichen kannst wäre z.B. ob Variablen im RAM den
> gleichen Inhalt haben oder ob der Timer einwandfrei läuft.
> Da deine ASM Datei leider nicht kommentiert ist, weiss ich nicht, was
> genau sie machen soll, hab leider keine Zeit, mir das jetzt anzugucken.

du hast ja recht, so ist es auch bestimmt gedacht worden. kannst du mir 
sagen, wo ich die die entsprechende .hex-Datei zum .asm-Programm finde?

> Wenn's nicht klappt, einfach Bescheid sagen.
>
> Ralf

von Ralf (Gast)


Lesenswert?

> kannst du mir sagen, warum der Standard StartUp-Code nicht zugefügt
> werden soll?
Ein kleines Beispiel, was der Startup-Code macht, wäre das Löschen des 
internen RAMs, sodass jede Zelle 0x00 enthält. Das ist für C-Code nötig, 
weil in C jede Variable anfangs immer den Wert 0x00 enthält, es sei 
denn, sie würde beim Deklarieren auch gleich initialisiert werden. 
Desweiteren wird dann noch der Stack initialisiert usw. Der Startup-Code 
wird automatisch an die Programmadresse 0x0000 geladen und ausgeführt, 
bevor main() ausgeführt wird.
Du solltest den Startup-Code deswegen nicht verwenden, weil das von dir 
gezeigte ASM Programm so aussieht, als ob es das alles selbst macht. 
Ausserdem ist es ein ASM-Code, kein C-Code.
Würdest du den Startup-Code verwenden, wirds wahrscheinlich Fehler von 
µV3 hageln.
Es müsste ohne Startup-Code klappen.

> hab den Debugmodus gestartet, und dort "Run" ausgeführt. gibt es nun
> eine Möglichkeit, die Inhalte des Daten- bzw Programmspeichers
> anzuschauen?
Du musst rausfinden, an welchen Speicheradressen die Variablen des 
ASM-Programms liegen. Dann kannst du das Programm mittels SingleStep 
Schritt für Schritt durchgehen, und über View->MemoryWindow das interne 
RAM anzeigen, indem du D:0x0000 als Adresse angibst. D steht hier für 
DATA, C würde für CODE stehen, usw.
Ausserdem müsstest du auf der linken Seite die internen Register usw. 
sehen können.

> du hast ja recht, so ist es auch bestimmt gedacht worden. kannst du mir
> sagen, wo ich die die entsprechende .hex-Datei zum .asm-Programm finde?
Brauchst kein HEX-File, da du ja mit Simulator arbeitest. Das File 
bräuchtest du nur, wenn du das in einen echten Controller schießen 
willst. Oder willst du dein FPGA damit füttern? Du musst die Erzeugung 
des HEX-Files aktivieren, dann wird es beim Assemblieren erzeugt. Das 
geht mit Rechtsklick aufs Target->Options for Target->Output->Create HEX 
File.

Ralf

von Juri L. (Firma: student) (juran78)


Lesenswert?

Ralf wrote:
>> kannst du mir sagen, warum der Standard StartUp-Code nicht zugefügt
>> werden soll?
> Ein kleines Beispiel, was der Startup-Code macht, wäre das Löschen des
> internen RAMs, sodass jede Zelle 0x00 enthält. Das ist für C-Code nötig,
> weil in C jede Variable anfangs immer den Wert 0x00 enthält, es sei
> denn, sie würde beim Deklarieren auch gleich initialisiert werden.
> Desweiteren wird dann noch der Stack initialisiert usw. Der Startup-Code
> wird automatisch an die Programmadresse 0x0000 geladen und ausgeführt,
> bevor main() ausgeführt wird.
> Du solltest den Startup-Code deswegen nicht verwenden, weil das von dir
> gezeigte ASM Programm so aussieht, als ob es das alles selbst macht.
> Ausserdem ist es ein ASM-Code, kein C-Code.
> Würdest du den Startup-Code verwenden, wirds wahrscheinlich Fehler von
> µV3 hageln.
> Es müsste ohne Startup-Code klappen.

ok, werde es in den nächsten Tagen ausprobieren, danke für die Hinweise!

>> hab den Debugmodus gestartet, und dort "Run" ausgeführt. gibt es nun
>> eine Möglichkeit, die Inhalte des Daten- bzw Programmspeichers
>> anzuschauen?
> Du musst rausfinden, an welchen Speicheradressen die Variablen des
> ASM-Programms liegen. Dann kannst du das Programm mittels SingleStep
> Schritt für Schritt durchgehen, und über View->MemoryWindow das interne
> RAM anzeigen, indem du D:0x0000 als Adresse angibst. D steht hier für
> DATA, C würde für CODE stehen, usw.
> Ausserdem müsstest du auf der linken Seite die internen Register usw.
> sehen können.

Die Idee ist folgende: ich lasse asm-Programm in µVision ablaufen, den 
Hex-File zum asm-Programm würde ich in eine Textdatei mit binären 
Inhalten umwandeln, und diese in den ROM des µC-Cores laden, 
anschließend mit Modelsim simulieren und Ergebnisse in einem log-file 
abspeichern.

Wenn ich Ergebnisse der Keil-Simulation in einem hex-file abspeichern 
könnte, würde ich anschleißend hex-file in Textfile umwandeln.

nun könnte man die beiden Textdateien aus der Simulationen vergleichen. 
Wenn diese idetnisch wären, ist die funktionale Verifikation des Cores 
gelungen.

>> du hast ja recht, so ist es auch bestimmt gedacht worden. kannst du mir
>> sagen, wo ich die die entsprechende .hex-Datei zum .asm-Programm finde?
> Brauchst kein HEX-File, da du ja mit Simulator arbeitest. Das File
> bräuchtest du nur, wenn du das in einen echten Controller schießen
> willst. Oder willst du dein FPGA damit füttern? Du musst die Erzeugung
> des HEX-Files aktivieren, dann wird es beim Assemblieren erzeugt. Das
> geht mit Rechtsklick aufs Target->Options for Target->Output->Create HEX
> File.
> Ralf

ganz genau, FPGA muß ja auch gefüttert werden, das hungrige Ding )))

Vielen vielen Dank Ralf!!!

von Ralf (Gast)


Lesenswert?

> Die Idee ist folgende: ich lasse asm-Programm in µVision ablaufen, den
> Hex-File zum asm-Programm würde ich in eine Textdatei mit binären
> Inhalten umwandeln, und diese in den ROM des µC-Cores laden,
> anschließend mit Modelsim simulieren und Ergebnisse in einem log-file
> abspeichern.
> Wenn ich Ergebnisse der Keil-Simulation in einem hex-file abspeichern
> könnte, würde ich anschleißend hex-file in Textfile umwandeln.
> nun könnte man die beiden Textdateien aus der Simulationen vergleichen.
> Wenn diese idetnisch wären, ist die funktionale Verifikation des Cores
> gelungen.
Nix zu machen, ein HEX-File ist das Programm selbst, nur eben in einem 
Standard-Format, sodass es mit den verschiedensten Programmier-Geräten 
gelesen werden kann.
Das "Ergebnis" des Programms kannst du nur gegenprüfen, indem du z.B. 
Variablen-Inhalte miteinander vergleichst. Eine Möglichkeit wäre dann, 
dass du die Variablen sowohl im Simulator als auch im FPGA-Core auf die 
Ports ausgibst.
Da du keine Doku zum ASM-Programm gepostet hast (gibts überhaupt eine?), 
kann ich es auch nicht ohne weiteres nachvollziehen.
Der Sinn des ASM-Programms dürfte es eher sein, die prinzipielle 
Funktion zu prüfen.

Ich würde als Prüfung eher irgendeinen komplexen Algorithmus im 
Simulator und im Core laufen lassen, und gucken, was dabei rauskommt. 
Zusätzlich noch mit den Timern und dem UART spielen, usw.
Ich behaupte mal ganz frech, es wird bei einem FPGA-Core keine 
Möglichkeit, einen 100%-Test durchzuführen, geben, weil es ja auch sein 
kann, dass ein Fehler durch bestimmte Befehlsreihenfolgen erzeugt wird.
Andersrum kannst du aber sicher sein, dass der Core schon ziemlich gut 
funktioniert, also ich will dir jetzt keine Angst machen.

Wenn dir das ausreicht, dann vergleich die Register/Variablen-Inhalte 
nach dem jmp $-Befehl.

Ralf

von Juri L. (Firma: student) (juran78)


Lesenswert?

Leider ist der Assembler-file unkommentiert, alles was ich weiß, ist in 
der folgenden knappen Erklärung aus dem UG des Cores beschrieben:

Verification of the core was accomplished by simulating the VHDL code 
and
comparing the results of the executed program (i.e. ROM contents) with 
the results
produced by an industry standard 8051 simulator
(http://www.keil.com/demo/evaldl.asp?p=C51).
After simulation the contents of a certain memory area is written to a 
file both for the
standard 8051 simulator (using the command save keil.hex 0x00,0xFF) and
the VHDL code simulation (e.g. using the script write2file.do, producing 
the file
regs.log in the simulation directory). The resulting text files have to 
be identical.
To be able to feed the compiled assembler file from the Keil development 
software to
the VHDL code simulation a short C program is provided in the latest 
distribution of
the IP core. It converts the Intel hex format file into a text file 
containing binary 8 bit
data, suited for being read by the VHDL simulator (file mc8051_rom.dua 
in the
simulation directory).

da ich nun leider keine Erfahrung im Umgang mit den Softcores und 
Mikrocontrollern habe, fällt es mir schwer das ganze zu verinnerlichen,
bin halt ein bluttiger Anfänger :(

von Sekoya A. (sekoya)


Lesenswert?

servus,

ich versuche auch mit keil µvisio3 ein code an lcd übertragen,
ich kann aber nicht, hat jemand eine idea,wie das geht ??
grüß

von Ralf (Gast)


Lesenswert?

Ja, ich weiss wie es geht.

Und tschüss...

Ernsthaft, glaubst du, du bekommst ohne Informationen zu liefern, 
irgendwas brauchbares zurück? Schaltplan? Bisheriger Code (ohne den wird 
dir keiner helfen, weil dann jeder glaubt, er solls für dich machen)? Zu 
behaupten, du weisst nicht, wo du anfangen sollst, wird auch nichts 
bringen, da wird man dir sagen, bei LEDs und Tastern. Stell konkrete, 
problembezogene Fragen, und du wirst brauchbare Antworten bekommen.

Ralf

von Sekoya A. (sekoya)


Angehängte Dateien:

Lesenswert?

ok,
ich verwende C8051F... microkontroller(Silabs), es ist schon auf einem 
Platin mit LCD 3x12 T123A zusammengebaut. habe ein RS232 
serielleschnittstelle und toolstick(silabs). anbei gibt es einfaches 
projekt. wenn man es compiler macht,kriegt man keine warnung und error 
ja. wenn ich es starte, dann kriege ich : target failed to respond, 
system is being disconnected. Error: target DLL has been cancelled 
Debugger aborted.

Außerdem habe ich anderes projekt,das ich eigentlich an LCD übertragen 
will. Da nutze ich printf,scanf und kriege speichererror und andere 
error. statt printf,scanf soll ich sprintf,sscanf oder putchar,getchar 
nutzen,sagte das jemand so.
ich weiss aber nicht ,wie das geht, und wie ich mein projekt umschreiben 
kann??  wenn du deine mail adresse geben kannst, wäre besser.

danke und tschüss :)

grüß

von Ralf (Gast)


Lesenswert?

Hab ich das jetzt richtig verstanden, du hast ein bereits fertiges 
Board, auf dem auch ein Display ist? Ist das ein gekauftes 
Entwicklungsboard, oder was selbstgemachtes? Wenn es ein fertiges 
E-Board ist, waren keine Demo-Codes dabei?

Wenn du Error-Meldungen bekommst, brauchst du normalerweise gar nicht 
versuchen, das Programm zu laden - es dürfte nicht mal übersetzt werden. 
Versuch statt dessen, rauszufinden, was die Error-Meldungen verursacht, 
und beheb das Problem.
Welches Programm verwendest du für den Download? Keil, die Silabs-IDE 
oder das separate Flash-Tool?

Bezüglich dem Umschreiben von (s)printf, usw. diese Funktionen basieren 
alle auf der putchar.c. Kopiere diese Datei in dein Projektverzeichnis, 
und füge sie dem Projekt hinzu. Dann kannst du die putchar() so ändern, 
dass sie die Ausgabe auf dein Display macht.

Ralf

von Sekoya A. (sekoya)


Lesenswert?

Hi,
es war schon fertig,also gekauftes Board und verwende ich Keil µVison3 
sofware. wenn ich compiler mache kriege ich keine fehler,also null error 
null warnung ja, dann starte ich Start/Debug , danach lauf das nicht und 
kriege ich ,was ich oben beschriebt habe.
ist ok aber,wie programmiert man mit Putchar ?? das weiss ich nicht und 
seit ein paar tage suche ich Imformation am internet,ich konnte leider 
noch ein laufendes Programm finden, das ist das mein problem. ich will 
erst sehen, wie man ein Program mit Putchar programmiert und wie es 
lauft und was es macht?
Hallo.zip ist einfaches Program, aber lauft bei mir nicht,ich weiss 
nicht ob du auch Keil verwendest, wenn ja,kannst du runterladen und bei 
dir versuchen ob es lauft ??

gruß

von Ralf (Gast)


Lesenswert?

Es bringt nichts, wenn ich mir ein Programm angucke, zu dem ich das 
Board nicht habe. Kannst du von einem funktionierenden Projekt mal die 
Dateien reinstellen? Dann kann man vergleichen. Ich habe den Keil nicht.

Ralf

von Sekoya A. (sekoya)


Lesenswert?

hmmm,ok
ja das kann ich schon, hast du was ??

grüß

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
Noch kein Account? Hier anmelden.