www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik C-Compiler Probleme Winbond W78E516B (8051)


Autor: Flo W. (flo23)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo

Ich habe ein Problem mit der Firmware einer Steuerplatine.

Ich würde gerne eine kleine Änderung an der Firmware vornehmen.
Es sind nur 3 Codezeilen zu ändern.
Als Enticklungsumgebung benutze ich Keil µVision 2.

Wenn ich den Originalcode (ohne Änderung) mit meinem Compiler compiliere 
und dann auf die Platine überspiele funktioniert diese nicht mehr ganz 
so wie sie soll.
Also ich lass mir beim compilieren ein Hex File erzeugen. Dieses wandel 
ich dann in ein BIN File um und spiele es auf den µC.

Aus dem Orignalcode konnte ich erfahren, dass die original Firmware mit 
einem älteren KEIL Compiler erstellt wurde.
* C51-Compiler V3.2,
* Linker L51 V2.8

Meine Compilerversion:
* C51 V7.01
* Linker BL51 V5.01

Kann es am Compiler liegen, dass der Code nicht richtig funktioniert ?

Das Original BIN-File ist exakt gleich groß wie der Flashspeicher im µC 
(64kB).
Mein Bin File vom compilierten Originalcode hat nur 50 kB.
Kann es sein, dass ich noch irgendwas bei den Compilereinstellungen 
verändern muss, sodass das binfile auch 64kB groß wird ?

Vielleicht hat ja jemand eine Idee woran es liegen könnte ?


liebe Grüße und ein schönes WE

Flo

Autor: Matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Natürlich kann der Code nun anderes aussehen. Zwischen Keil V3 und V7 
dürften 15 Jahre liegen. Da wird mit Sicherheit vieles anderes (besser) 
in Asm umgesetzt/compiliert.

Die Abarbeitung der gleichen Quelle dürfte jetzt schneller laufen und 
der Gesamt-Code dürfte einige Byte kürzer sein. Programme die die eigene 
Laufzeit mit einbeziehen haben damit möglicherweise ein Problem.

Versuch mal die Optimierungseinstellungen zu ändern:

#pragma optimize(5,size) // nur als Bsp. -> Doku lesen
(nur wenig optimieren lassen)

Wenn Du V3 noch hast, nimm diese für so geringe Änderungen.

Gruß
Matthias

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Laufzeitunterschiede können eine Ursachen sein.

Eine andere das falsche Speichermodell oder falsche Angaben über den zur 
Verfügung stehenden Speicher (data, idata, pdata, xdata).

Hast Du denn auch das zu den Sourcen gehörende Linkerfile ?


Peter

Autor: Flo W. (flo23)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo

Danke für die Antworten.
Das original Linkerfile ist im Anhang.

Welche Möglichkeiten habe ich denn noch ohne Originalcompiler das Ding 
zum Laufen zu bringen ?

lg Flo

Autor: Matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vermutlich meint Peter das File mit den Einstellungen zum Linker. Könnte 
auch eine .bat sein.

Müsste so etwa aussehen:

test.obj,
ssi.obj,
startup.obj
MAP
RAMSIZE(256)
pdata(8000H)
xdata(8100H)

oder alles was in der BAT hinter L51 Aufruf steht
Hast Du V3 noch (rotes Dongel)?

Gruß Matthias

Autor: Flo W. (flo23)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo

Hier ist das resultierende File nach dem Linken.
Ein File mit den Linkereinstellungen ist nicht dabei.
Leider hab ich die Version V3 nicht.

lg Flo

Autor: Matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das nutzt leider nur wenig. Sieht so aus, als wäre es ein Programm für 
SAB80C517A o.ä., was die Einbindung der printf517 und MUL-Funktionen 
betrifft? Da musst Du schon wissen, wohin was gelinkt werden soll, 
vorallem welche Speicherbereiche genutzt werden sollen. Dies musst Du 
bei Keil vorgeben. Vermutlich würde es ohne diese Vorgaben auch mit V3 
nicht richtig laufen.

Was funktioniert genau eigentlich nicht?

Vielleicht kannst Du mal Teile des C-Programms posten, zumindest den 
Declarationsteil und ggf. spezielle includes?

Gruß Matthias

Autor: Flo W. (flo23)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo

Erstmal vielen Dank für eure Bemühungen.
Der µC ist ein Winbond W78E516.
Mein Problem ist dass ich eigentlich keine große Erfahrung mit 
Mikrokontrollern habe.
Ich hab verschiedene Codeoptimierungseinstellungen ausprobiert.
Die Ergebnisse waren sehr unterschiedlich.
Bei einigen Einstellungen funktioniert garnichts.

Bei anderen Einstellungen sieht das Ergebnis gut aus.
Nur leider...
Beim µC wid ein Eingang gesetzt. Danach arbeitet er eine Routine ab.
Nach der Routine resetet sich das Ding. Das selbe passiert wenn ich das 
Eingagssignal wieder wegnehme.
Es scheint alles zu funktionieren bis auf diese Routine.

In der Define.h sind die Deklarationen drin.

und hier ein Ausschnitt aus de Main File:
#pragma small
#pragma debug
#pragma code 


#include <stdio.h>

//#include <Reg52.h>

// Winbond W78E516  internes XRAM
#include "Reg78516.h"

//  internes oder externes RAM
//#define XDATA   idata
#define     XDATA   xdata

// declarationen fuer die beiden Module mds1a1qa.c und mds1a2qa.c
#include "define.h"


//#include <math.h>
#include <string.h>

Und Linkereinstellungen hab ich nirgends gefunden.

Im Projektordner ist ein Batchfile zum compilieren:

c:\technik\hitex\bin\c51 mds1a1qa.c |more
c:\technik\hitex\bin\c51 mds1a2qa.c |more


c:\technik\hitex\bin\l51 mds1a1qa.obj,mds1a2qa.obj to mds1a1qa.abs 
RAMSIZE (256)
c:\technik\hitex\bin\ohs51 mds1a1qa.abs

lg Flo

Autor: Matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> :\technik\hitex\bin\l51 mds1a1qa.obj,mds1a2qa.obj to mds1a1qa.abs
RAMSIZE (256)

Das sind die Linkereinstellungen. Demnach wird der Code ab 0000H 
abgelegt, 256 Byte des internen RAM verwendet, erstmal für den 
Codebereich so ok. Eine XDATA Zuweisung fehlt. Deine Codeauschnitt 
scheint aber auf XDATA Verwendung hinzudeuten. (Hatt Deine Schaltung 
externen SRAM, wenn ja bei welcher Adresse? Gibs im C-Programm XDATA 
Verwendung bei der Variablendeklaration?)

Weiterhin fehlt das obligatorische "startup.obj" mit den 
Initialisierungs-Angaben für die Speicherbereiche.

Falls Du es nicht hinkriegst, kann ich Dir anbieten, dass ich es auf 
meiner V3 mal durchlaufen lasse. Dazu müsstest Du mir alle Quellen und 
spezifische Include-Files u.s.w. zukommen lassen (per e-mail).

Gruß
Matthias

Autor: Flo W. (flo23)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

Danke für eure Hilfe.
Ich habs jetzt geschaft die ganze Sache zum Laufen zu bringen.

lg Flo

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.