Hallo zusammen, ich müsste den Quellcode eines ca. 15 Jahre altes 80C537 Projekt leicht abändern und neu compilieren. Hab aber leider nur den Quellcode, sonst nix. Hab mit den 8051'ern auch noch nichts gemacht, komme aus der PIC-Welt. Kann mir vielleicht jemand sagen was ich dafür alles brauche? Am besten nur Freeware und wenn möglich für Ubuntu, zur Not hätte ich allerdings auch noch einen XP-Laptop. Im Code sind folgende Dateien verlinkt: #include "reg537.h" #include "\bin\develop\tools.51\c51\stdio.h" #include "\bin\develop\tools.51\c51\stdlib.h" #include "\bin\develop\tools.51\c51\string.h" #include "pjgetkey.h" #include "adu.h" #include "cmt.h" #include "lcd.h" #include "rs232.h" #include "pj.h" #include "ctype.h" Die Files sind auch alle beim Quellcode dabei, bis auf die drei: #include "\bin\develop\tools.51\c51\stdio.h" #include "\bin\develop\tools.51\c51\stdlib.h" #include "\bin\develop\tools.51\c51\string.h" Ich denke die Pfadangabe weißt auf die Entwicklung mit dem Keil C51 Compiler hin, oder? Wäre Nett wenn mir jemand Tipps geben könnte. Danke im voraus! Gruß chris
Sieht in der Tat nach Keil aus. Es gibt zwar eine Demoversion, die kann aber nur 2kbyte Code erzeugen und hat noch paar Einschränkungen. Vermutlich reicht das für das Projekt nicht aus, 80C537 deutet auf was komplexeres hin. Alternativ SDCC, Freeware C-Compiler für 8051, aber nicht ganz so effizient. Einige Änderungen am C-Code wären auch fällig. Aus QS-Gründen wäre bei kommerziellen Projekt und Änderungen auf jedem Fall der Original-Compiler zu empfehlen. Ältere C51-Versionen von Keil (DOS) laufen heute auch noch. Falls nicht mehr greifbar, könnte es teuer werden, wenn Du es neu kaufen musst. Bei Bedarf könnte ich Dir helfen.
Werde am Montag in der Firma mal nach dem alten Compiler suchen, sehe da aber wenig Chancen auf Erfolg, der ist bestimmt schon entsorgt. Was kostet denn sowas wenn man den kaufen muss? Die alte Version werd ich wohl sowieso nicht mehr bekommen, oder? Angenommen ich kaufe den aktuellen Compiler, muss ich dann auch noch den Code an den Compiler anpassen? Kann ich irgendwie die damals verwendete Compilerversion ermitteln? Gruß chris
Chris 606 schrieb: > Kann ich irgendwie die damals verwendete Compilerversion ermitteln? Gibt es ausser den Quelltextdateien noch vom Compiler und Linker erzeugte Dateien? Da sind Angaben der Version im Klartext enthalten. Vielleicht kannst du einen Dongle für die alte Version günstig erwerben. Sonst mal bei Keil anrufen, aber die sind komisch geworden als ARM Company. ???
Chris 606 schrieb:
> #include "\bin\develop\tools.51\c51\stdio.h"
Das scheint irgendwas UNIX/LINUX-iges zu sein.
Unter DOS/Windows gibts kein "\bin".
Also Keil ist es schonmal nicht.
Peter
Chris 606 schrieb:
> #include "reg537.h"
Ist auch sehr ungewöhnlich.
Sollte bei richtiger Konfiguration immer
#include <reg537.h>
heißen, d.h. im Standardpfad der Compilerinstallation liegen.
Peter
Ooch, der SDCC funktioniert bei mir mit 80C537 wunderbar, und ist nicht limitiert. Als Editor und zur Projektübersicht verwende ich Keil µVision in der Demo-Version. Jedoch nicht zum compilieren, da gibt es ein eigenes Make-File. Manchmal muß man eben etwas improvisieren.
Sicher kannst Du nicht den ganzen Quelltext hier posten. Vielleicht aber doch paar Details: - Bsp. einer Interrupt-Funktionsdeklaration (da gibt es Unterschiede, weil kein richtiger ANSI Standard) - Variablendeklarationen für spezielle 8051-Speicherbereiche (CODE, XDATA usw.) - spezielle #pragmas - compilerdirektive zb. für Optimierungen > #include "reg537.h" Nicht ungewöhnlich, diese in das Projektverzeichnis zu kopieren. Manchmal leicht modifiert und wird dadurch nicht durch ein eventuelles Complilerupdate mit überschrieben. Die kannst Du auch mal posten, dürfte keine Geheimnisse beinhalten. Die Pfade sind in der Tat eigenartig. Mit SDCC sollte man notfalls das Projekt aber auch hinbekommen.
Ok, hier sind Auszüge: /* String-Konstante */ #ifdef ENGLISH code char *str[82] = { #ifdef NEUE_TASTATUR " N-%2bu", /* 0 */ #else " M-%2bu", /* 0 */ #endif ... /* globale Variable */ xdata MEMORY sets; xdata STUFE tempstep; xdata unsigned menge_to_time; "#pragmas" sind keine im Code Compilerdirektiven habe ich auch keine gefunden hier das MAKEFILE # # MAKE-File for PJ 1.7 # # Suchpfade COMPILE = H:\bin\develop\tools.51\c51 CROSS = H:\bin\develop\tools.51\asm51 LINKER = $(COMPILE) # Erzeugung des bin-Files pj.abs: pjstart.obj 80c537.obj pjio.obj pjeeprom.obj pjtime.obj pjputch.obj pjgetkey.obj pj.obj $(LINKER)\l51 @$*.lnk # implizite Regel zur Erzeugung von obj-Dateien aus mac-Dateien .a51.obj: $(CROSS)\a51 $*.a51 DEBUG NOMOD51 ERRORPRINT REGISTERBANK (0,1) # implizite Regel zur Erzeugung von obj-Dateien aus C-Dateien .c.obj: $(COMPILE)\c51 $*.c DEBUG SMALL CODE hier noch die reg537.h: /* Register Declarations for 80537 Processor */ /* BYTE Register */ /* CPU */ sfr PSW = 0xD0; sfr ACC = 0xE0; sfr B = 0xF0; sfr SP = 0x81; sfr DPL = 0x82; sfr DPH = 0x83; sfr DPSEL = 0x92; /* A/D Converter */ sfr ADCON0 = 0xD8; sfr ADCON1 = 0xDC; sfr ADDAT = 0xD9; sfr DAPR = 0xDA; /* Compare/Capture-Unit */ sfr CCEN = 0xC1; sfr CC4EN = 0xC9; sfr CCL1 = 0xC2; sfr CCH1 = 0xC3; sfr CCL2 = 0xC4; sfr CCH2 = 0xC5; sfr CCL3 = 0xC6; sfr CCH3 = 0xC7; sfr CCL4 = 0xCE; sfr CCH4 = 0xCF; sfr CMEN = 0xF6; sfr CML0 = 0xD2; sfr CMH0 = 0xD3; sfr CML1 = 0xD4; sfr CMH1 = 0xD5; sfr CML2 = 0xD6; sfr CMH2 = 0xD7; sfr CML3 = 0xE2; sfr CMH3 = 0xE3; sfr CML4 = 0xE4; sfr CMH4 = 0xE5; sfr CML5 = 0xE6; sfr CMH5 = 0xE7; sfr CML6 = 0xF2; sfr CMH6 = 0xF3; sfr CML7 = 0xF4; sfr CMH7 = 0xF5; sfr CMSEL = 0xF7; sfr CRCL = 0xCA; sfr CRCH = 0xCB; sfr CTCON = 0xE1; sfr CTRELH = 0xDF; sfr CTRELL = 0xDE; sfr T2CON = 0xC8; sfr TL2 = 0xCC; sfr TH2 = 0xCD; /* Interrupt-System */ sfr IEN0 = 0xA8; sfr IEN1 = 0xB8; sfr IEN2 = 0x9A; sfr IP0 = 0xA9; sfr IP1 = 0xB9; sfr IRCON = 0xC0; /* MUL/DIV Unit */ sfr ARCON = 0xEF; sfr MD0 = 0xE9; sfr MD1 = 0xEA; sfr MD2 = 0xEB; sfr MD3 = 0xEC; sfr MD4 = 0xED; sfr MD5 = 0xEE; /* Ports */ sfr P0 = 0x80; sfr P1 = 0x90; sfr P2 = 0xA0; sfr P3 = 0xB0; sfr P4 = 0xE8; sfr P5 = 0xF8; sfr P6 = 0xFA; sfr P7 = 0xDB; sfr P8 = 0xDD; /* Power Save Mode */ sfr PCON = 0x87; /* Serial Channels */ sfr S0CON = 0x98; sfr S0BUF = 0x99; sfr S1CON = 0x9B; sfr S1BUF = 0x9C; sfr S1REL = 0x9D; /* Timer0/Timer1 */ sfr TCON = 0x88; sfr TMOD = 0x89; sfr TL0 = 0x8A; sfr TL1 = 0x8B; sfr TH0 = 0x8C; sfr TH1 = 0x8D; /* Watchdog */ sfr WDTREL = 0x86; /* BIT Register */ /* PSW */ sbit CY = 0xD7; sbit AC = 0xD6; sbit F0 = 0xD5; sbit RS1 = 0xD4; sbit RS0 = 0xD3; sbit OV = 0xD2; sbit F1 = 0xD1; sbit P = 0xD0; /* TCON */ sbit TF1 = 0x8F; sbit TR1 = 0x8E; sbit TF0 = 0x8D; sbit TR0 = 0x8C; sbit IE1 = 0x8B; sbit IT1 = 0x8A; sbit IE0 = 0x89; sbit IT0 = 0x88; /* IEN0 */ sbit EAL = 0xAF; sbit WDT = 0xAE; sbit ET2 = 0xAD; sbit ES = 0xAC; sbit ET1 = 0xAB; sbit EX1 = 0xAA; sbit ET0 = 0xA9; sbit EX0 = 0xA8; /* IEN1 */ sbit EXEN2 = 0xBF; sbit SWDT = 0xBE; sbit EX6 = 0xBD; sbit EX5 = 0xBC; sbit EX4 = 0xBB; sbit EX3 = 0xBA; sbit EX2 = 0xB9; sbit EADC = 0xB8; /* P3 */ sbit RD = 0xB7; sbit WR = 0xB6; sbit T1 = 0xB5; sbit T0 = 0xB4; sbit INT1 = 0xB3; sbit INT0 = 0xB2; sbit TXD = 0xB1; sbit RXD = 0xB0; /* S0CON */ sbit SM0 = 0x9F; sbit SM1 = 0x9E; sbit SM2 = 0x9D; sbit REN = 0x9C; sbit TB8 = 0x9B; sbit RB8 = 0x9A; sbit TI = 0x99; sbit RI = 0x98; /* T2CON */ sbit T2PS = 0xCF; sbit I3FR = 0xCE; sbit I2FR = 0xCD; sbit T2R1 = 0xCC; sbit T2R0 = 0xCB; sbit T2CM = 0xCA; sbit T2I1 = 0xC9; sbit T2I0 = 0xC8; /* ADCON0 */ sbit BD = 0xDF; sbit CLK = 0xDE; sbit BSY = 0xDC; sbit ADM = 0xDB; sbit MX2 = 0xDA; sbit MX1 = 0xD9; sbit MX0 = 0xD8; /* IRCON */ sbit EXF2 = 0xC7; sbit TF2 = 0xC6; sbit IEX6 = 0xC5; sbit IEX5 = 0xC4; sbit IEX4 = 0xC3; sbit IEX3 = 0xC2; sbit IEX2 = 0xC1; sbit IADC = 0xC0; Hoffe das hilft??? Gruß chris
Peter Dannegger schrieb: >> #include "\bin\develop\tools.51\c51\stdio.h" > > Das scheint irgendwas UNIX/LINUX-iges zu sein. Mit "\" als Separator??? Nö, bei mir gibt's \bin und \usr\bin und es ist trotzdem Windows.
Also ich glaube auch nicht dass meine Vorfahren da mit Linux was gemacht haben, das war DOS und dann Windows. Gruß chris
Also das sieht eigentlich nach Keil C51 aus. Poste mal den Inhalt der .LNK Datei und eine Interrupt-Funktion (Syntax). Aus welchem Jahr genau ist das Projekt?
Das ist Keil! Gibt es keine Datei mit der Endung *.lst oder *.m51? Da wären die Versionen der Tools im Klartext enthalten. Stelle mal das *.abs oder zumindest ein *.obj hier rein. Da sind die Versionsnummern auch enthalten. ???
Hallo ich habe es gefunden, hier ist der Kopf der .lst Datei: C51 COMPILER V2.27, PJ 17/10/96 16:43:34 PAGE 1 DOS C51 COMPILER V2.27, COMPILATION OF MODULE PJ OBJECT MODULE PLACED IN PJ.OBJ COMPILER INVOKED BY: C51 PJ.C DEBUG SMALL CODE Das kommt hin, die letzte Version ist im Oktober 96 erstellt worden.
>DOS C51 COMPILER V2.27
Ist eine recht alte Variante, die Keil C51-Version 3.0 gabs etwa ab
1991.
@Chris 606: Eine gut geführte Firma, hat alle gekaufte Software archiviert, und oft noch einen oder besser zwei passende alte Rechner irgendwo stehen, worauf die Software noch läuft. In meiner ehemaligen Firma, mußten sie gelegentlich auch mal alte Software wieder compilieren, und Vergleiche anstellen. Da mußten dann auch alle vom Compiler produzierten Dateien (List, MAP, Hex-Dateien, usw.) bis aufs bit genau stimmen, wenn es um irgendwelche Zertifizierungs- bzw. Zulassungsangelegenheiten ging. Ein Entwickler, flippte über diesen Sch*** regelmäßig aus. Darum kann man die beim Compilieren entstandenen Dateien, auch wenn es als Müll erscheint, gelegentlich mal aufbewahren. Firmenserver sind ja groß genug. ;-)
@Wilhelm Wie gesagt, ich werde morgen mal im Softwarearchiv stöbern und sehen ob ich den Compiler finde. An den alten Rechnern scheitert es sicherlich nicht, die sind vorhanden.
A. K. schrieb: > Mit "\" als Separator??? Nö, bei mir gibt's \bin und \usr\bin und es ist > trotzdem Windows. Dann hast Du diese Verzeichnisse aber selbst angelegt. Mir ist jedenfalls kein Windows-Programm bekannt, daß ein C:\bin als default erzeugt. Default ist eigentlich immer C:\Programme. Peter
C:Programme kenne ich aber auch erst seit Windows, das Projekt wurde noch unter DOS erstellt.
Und unter DOS (wie auch 16-Bit-Windows-Versionen) kann es C:\Programme gar nicht geben, da das, was DOS anstelle von Dateinamen verwendet, nur 8 Zeichen zulässt ...
Peter Dannegger schrieb: >> Mit "\" als Separator??? Nö, bei mir gibt's \bin und \usr\bin und es ist >> trotzdem Windows. > > Dann hast Du diese Verzeichnisse aber selbst angelegt. Natürlich. Aber warum auch nicht. Ich kannte das von Unix und habe es in DOS, OS/2 und Windows rübergerettet. Irgendwo musste das Zeugs ja hin.
>Und unter DOS (wie auch 16-Bit-Windows-Versionen) kann es >C:\Programme gar nicht geben, da das, was DOS anstelle von >Dateinamen verwendet, nur 8 Zeichen zulässt ... Mann mann, Leute, das ist doch wirklich noch keine Jahrhunderte her...
Klaus Wachtler schrieb:
>Es war im letzten Jahrtausend!
Formal richtig! :-) Gottseidank nicht im vorletzten!
Nein, bin noch dran, hab nun erstmal einen DOS PC herrichten müssen. Hab auf einer alten Netzsicherung auch den alten Compiler gefunden, ist aber alles noch etwas verworren. Bin noch am werkeln.
Mein Angebot steht noch. Der alte Compiler läuft auch beispielweise unter XP in einer VM, wo Windows 98 installiert ist. Unter DOSBOX auf XP-PC habe ich es allerdings nicht hinbekommen.
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.