Hallo Ihr, Habe ein Mikrokontrollermodul der Phytec mM-552 mit dem Philips 80c552. Dieser verfügt über 512kB Flash à 8 bänken (64kB) Bank 0 ist für die Phytec FlashTools98 belegt. Entwicklungsumgebung Keil uVision2 V2.05 mit: C51: V6.01 A51: V6.01 BL51: V4.01 LIB51: V4.12 OH51: V.2.41 Habe auch ein Beispielprogramm zur Bankumschaltung, aber werde aus dem nicht ganz schlau und es stürtzt auch nach einigen Umschaltungen ab. Bei uns im Geschäft hat leider niemand mehr ahnung von Intel... da bei uns nur Motorola verwendet wird... Falls Jemand Erfahrungen hat, und mir Tipps oder Ratschläge zur Konfiguration in Keil und Allgemein geben könnte wäre ich sehr froh! Falls mir jemand helfen kann, aber noch weitere Infos braucht, bin ab morgen wider im Geschäft. Vielen Dank im Voraus, Michael Wicki
Ich denke mal, Du mußt schon ne ganze Weile (>1Jahr) programmieren, ehe Du überhaupt in die Verlegenheit kommen kannst, eine Bankumschaltung zu benötigen. Ich habe noch nie die 64kB erreicht, mein größtes Programm ist nur 40kB groß. Ich weiß daher nur, daß es sehr tricky ist und man dann besser ICs nehmen sollte, die direkt >64kB adressieren können, z.B. der P89C669 ist ein 8051-Derivat mit 23Bit-Programmcounter (96kB Flash intern). Die Bankumschaltung kann jedenfalls nur funktionieren, wenn sämtliche Interrupthandler und natürlich die Umschaltroutine in jeder Bank an der gleichen Stelle stehen. Genaueres muß aber in dem Manual zu Deinem Testboard stehen. Kannst Du kein Manual besorgen, dann hilft nur das Board wegzuschmeißen. Es gibt nämlich sehr viele Versionen einer Bankumschaltung und man muß ja auch dem Linker sagen, welche man benutzt. Peter
Hallo Peter, Na ganz ein Jahr habe ich daran schon nicht Programmiert aber es sind schon mehrere 100 Stunden. Das Ganze ist für ein I2C Terminal mit Display welches unter anderem als RS232-Terminal arbeitet. Es dient zur Parametrisierung von einem unseren Geräten, und jetzt sollte noch ein weiteres dazu kommen, daher kann ich jetzt nicht mehr innerhalb 3 Wochen einen neuen uP Validieren und allenfals die Software umschreiben... also bin ich Wohl oder Übel gezwungen die Bankumschaltung zum laufen zu bringen... Habe jetzt den Hersteller noch nach genäueren Infos angefragt, aber so wie ich die kenne kommt zurück, im Datenblatt sei alles genäustens beschrieben, wohl möglich und ich verstehe einfach noch zu wenig von der ganzen Struktur der Prozessoren. Das mit dem Interrupt handling und so habe ich bis jetzt so verstanden, das ein COMMON Bereich bestimmt wird (z.B. 0x0000 - 0x7FFF, siehe auch Bild), welcher in jedem Bank vorhanden ist. Von da aus kann dann in die verschiedenen Bänke gesprungen werden. Trotzdem danke ich dir für die schnelle Antwort! Grüsse aus der Schweiz, Michael Wicki
Wenn Du wirklich über 64kB sein solltest: - Hast Du den C51-Primer gelesen, da sind viele Programmiertips drin, um effizient zu programmieren (Small-Model, memory specific pointer, möglichst wenig globale, Variablen, wenig signed ints, wenig floats usw.). - Hast Du Spaghetticode geschrieben (Copy&Paste-Methode) oder versucht, gleichartige Sachen in Unterfunktionen zusammen zu fassen. - Hast Du mal ins *.map-File gesehen, wo überhaupt die Speicherfresser liegen (kannst ja mal das *.map-File als Dateianhang reinstellen). - Hast Du viele konstante Daten (Menütexte usw.), dann könnte man die in einen externen EEPROM (24C512) auslagern. Ich hab irgendwo noch ein C505-Board rumliegen. Da ist ein großer CPLD (SMD) drauf, der die Bankumschaltung macht. Mal sehen, ob ich das Manual dazu finde. Peter
Hast du Keil, dann kann ich dir schnell das Projekt schicken, wenn du mir deine Mail-Adresse gibst Gruss Michi
die .lst files sind glaub nicht mehr so aktuell, must sie evt schnell löschen und mit Keil frisch erstellen, kann sie dir sonst auch schnell mailen
1. Programm > 64k ist ganz normal, dazu muß man nicht ein Jahr programmieren, das hängt eher von z.B. Visualisierungen auf dem Display ab, Menüs in mehreren Sprachen, viele Funktionen des Geräts usw. Auser eure Projekte bestehen darin ein paar LEDs blinken zu lassen ... 2. Ich verwende ebenfalls ein Phytec Board (80C517) mit Bankumschaltung und habe kein Problem damit. 3. Stell einfach deinen Source ins Bord und dann sehen wir weiter...
Keine Panik, laut Map-File sinds ja bisher nur 22kB und das trotz Large Model. Peter
Hallo Banker Die Visualisierung ist nicht im uC integriert, das macht das Display selbst, ich kommuniziere lediglich über RS233 mit dem uC zum Display und zurück, trotzdem sind viele kleinere Komplexere Unterprogramme implementiert, zb Datumseingabe mit Schaltjahrüberprüfung etc. Zeiteingabe, (jeder Tastendruck des Touchscreen wird als Hex Wert über RS232 erfasst und dementsprechend ausgewertet und verwendet) verschiedene I2C Routinen... alles braucht seinen platz... Habe jetzt einfach mal angefangen meinem Programm einzelne Bänke zuzuweisen, läuft aber noch nicht so recht, aber ein wenig läufts doch schon :) wird wohl ein haufen einzustellen geben mit dem ganzen Speichermodel usw... Fals ich dann wieder anstehe, werde ich dann gerne auf deine Hilfe zurückgreifen! Was ich auch noch nett fände, wenn du evt. ein kleines Demo-Progi mit der Bankumschaltung hast, bei dem ich einige sachen abschauen könnte?? Meiner Ansicht nach ist das Problem des Phytec Demos, dass es in jedem Bank in eine andere Funkion in einem anderen Bank, also immer eine Ebene Tiefer springt, was schon bald zum Absturz beiträgt... Für eure Infos vielen Dank! Gruss Michi
Wie gesagt, bei 22kB brauchst Du Dir doch noch lange keine Sorgen um das Banking zu machen. Es sei denn, Dein Programm soll noch viel viel größer werden (float lib ist ja auch schon drin in den 22kB). Peter
Ja, die Frage kommt hier etwa einmal pro Woche. Als Faustformel: Bin = Intel-Hex / 2,8 62 / 2,8 = 22, haut also hin. Peter
Meine iHex-Files sind mit nem Editor lesbar, d.h. sie sind in ASCII und damit schon mal doppelt so groß ;) ("AB" braucht 2 Bytes anstatt 0ABh = 1 Byte), dann noch Prüfsumme.
Achso, was mir in Deinem M51-File noch aufgefallen ist, Dein Programm wird umgeleitet nach 4000h, d.h. da ist noch eine Lücke von 16kB drin. Das kannst noch ausschalten. Peter
Heisst das, wen Flash Tools angibt 61.8 kb das dies in wirklickeit noch nicht erreicht ist??
Wer wissen will, wie groß sein Programm wirlich ist, einfach mal nach binär umwandeln. Tools dafür gibt es genügend (hex2bin o.ä.). Die resultierende Dateigröße entspricht dann der Größe des belegten Speichers. Jörg
Habe Jetzt mal so ein Hex File konvertiert, stimmt, sind tatsächlich nur 22kb, warum steht das blos nirgens in den manuals von phytec geschrieben, ihr flash programm geht auch standarmässig auf hex files, können in diesem Fall, die hex files grösser als 64 kB sein?
an Banker, Hast du eine kurze beschreibung was man beachten muss und was man einstellen muss, damit die Bankumschaltung funktioniert, und was man im Code einstellen muss, habe es bis jetzt geschafft, das der Linker mir 2 Hex files macht, für Bank 1 und Bank 2, der Commonbereich sollte der Linker ja selbst definieren so wie ich das bei Keil gelesen habe, die Programmteile die ich viel verwende sind jetzt einfach im Common bereich Wenn ich das Programm jetzt lade macht es mir zwar irgendetwas, aber nach dem ausführen der ersten routine stürzt mir das Programm ab...? Vielen Dank! Gruss Michi
Ja, habe ich. Ich muss die Seiten aber erst scannen. Ist aus dem Buch: Praxis mit dem Keil C51-Compiler Teil 2 von Michael Baldischweiler. Ich kann dir empfehlen beide Bücher zu kaufen, die sind extra-Klasse, da steht wirklich ALLES drin was man zum 8051 Programmieren mit dem KEIL Compiler benötigt. ISBN 3-9804331-7-x Praxis mit dem Keil C51-Compiler Teil 2 und ISBN 3-9804331-8-8 Der Keil C51-Compiler Einführung und Praxis Teil 1 Hier der Link dazu: http://www.c51.de
Vielen Dank für die Schnelle Antwort, auf diese Seite bin ich auch schon des öfteren gestossen, Wenn ich nach meinem Armeedienst weiter mit 8051ern arbeiten werde, lege ich mir diese Bücher zu! Wäre aber trotzdem sehr froh darüber wenn du mir die zutreffenden Seiten bei gelegenheit schon mal einscannen könntest, das wäre sehr nett! Ich denke das XDATA Port Prinzip wird bei mir der Fall sein: http://www.keil.com/support/man/docs/bl51/bl51_bk_example3.htm Für deine Bemühungen danke ich vielmals! Gruss Michi
In HEX FIles sind noch jede Menge andere Daten drin, außerdem werden die Zeichen in ASCII Form geschrieben (1Byte pro Zeichen) Ist also kein wunder dass die 64kb Datei größer ist.... Wurd aber schon gesagt
Wenn du nicht schon alle Einstellungen in uVision2/3 vorgenommen hast, hier eine meiner Batch Dateien: @echo off c51 main.c PP(main.LSI) DEBUG LARGE OT(6,Size) DF(MONITOR) c51 lcd_T6963.c PP(lcd_T6963.LSI) DEBUG LARGE OT(6,Size) DF(MONITOR) c51 lcd_420.c PP(lcd_420.LSI) DEBUG LARGE OT(6,Size) DF(MONITOR) c51 graphic.c PP(graphic.LSI) DEBUG LARGE OT(6,Size) DF(MONITOR) c51 class1.c PP(class1.LSI) DEBUG LARGE OT(6,Size) DF(MONITOR) c51 functions1.c PP(functions1.LSI) DEBUG LARGE OT(6,Size) DF(MONITOR) c51 functions2.c PP(functions2.LSI) DEBUG LARGE OT(6,Size) DF(MONITOR) c51 functions3.c PP(functions3.LSI) DEBUG LARGE OT(6,Size) DF(MONITOR) c51 functions4.c PP(functions4.LSI) DEBUG LARGE OT(6,Size) DF(MONITOR) c51 functions5.c PP(functions5.LSI) DEBUG LARGE OT(6,Size) DF(MONITOR) c51 measure.c PP(measure.LSI) DEBUG LARGE OT(6,Size) DF(MONITOR) c51 keyboard.c PP(keyboard.LSI) DEBUG LARGE OT(6,Size) DF(MONITOR) c51 menus.c PP(menus.LSI) DEBUG LARGE OT(6,Size) DF(MONITOR) c51 configuration.c PP(configuration.LSI) DEBUG LARGE OT(6,Size) DF(MONITOR) c51 servicemode1.c PP(servicemode1.LSI) DEBUG LARGE OT(6,Size) DF(MONITOR) c51 servicemode2.c PP(servicemode2.LSI) DEBUG LARGE OT(6,Size) DF(MONITOR) c51 settings.c PP(settings.LSI) DEBUG LARGE OT(6,Size) DF(MONITOR) c51 Icon1.c PP(Icon1.LSI) DEBUG LARGE OT(6,Size) DF(MONITOR) c51 Icon2.c PP(Icon2.LSI) DEBUG LARGE OT(6,Size) DF(MONITOR) c51 Icon3.c PP(Icon3.LSI) DEBUG LARGE OT(6,Size) DF(MONITOR) c51 Icon4.c PP(Icon3.LSI) DEBUG LARGE OT(6,Size) DF(MONITOR) c51 i240x128.c PP(i240x128.LSI) DEBUG LARGE OT(6,Size) DF(MONITOR) a51 startup.a51 DEBUG a51 l51_bank.a51 DEBUG ECHO COMMON{startup.obj,l51_bank.obj,lcd_T6963.obj,class1.obj, & > main.l51 ECHO keyboard.obj}, & >> main.l51 ECHO B1{menus.obj,main.obj,functions1.obj}, & >> main.l51 ECHO B2{graphic.obj,Icon1.obj,Icon2.obj,Icon3.obj,i240x128.obj,functions2.obj }, & >> main.l51 ECHO B3{measure.obj,functions3.obj}, & >> main.l51 ECHO B4{configuration.obj,servicemode1.obj}, & >> main.l51 ECHO B5{functions4.obj}, & >> main.l51 ECHO B6{functions5.obj, servicemode2.obj} & >> main.l51 ECHO to output NOOVERLAY RS(256) & >> main.l51 ECHO BANKAREA(02000H,0FFFFH) XD(0000H) & >> main.l51 ECHO CODE(0100H,?STARTUP_START(0000H)) >> main.l51 bl51 @main.l51 oc51 output oh51 output.b01 copy output.hex bank1.hex oh51 output.b02 copy output.hex bank2.hex oh51 output.b03 copy output.hex bank3.hex oh51 output.b04 copy output.hex bank4.hex oh51 output.b05 copy output.hex bank5.hex oh51 output.b06 copy output.hex bank6.hex
Hallo Banker, Diese Batch-Datei sagt mir jetzt nicht so viel, ich denke, das macht Keil von selbst, denn die hex files kommen bei mir als .h01, .h02 usw heraus, welche ich dan in hex1.hex, hex2.hex usw umbenenne. Im moment stehe ich bei den Target Einstellungen und bei den Einstellungen im L51_BANK.A51 an. Gruss Michi
... nu ja, so ganz automatisch machts auch der Keil (uVision) nicht, die Einstellungen mußt du ja zuvor richtig durchführen, und da steckt sehr, sehr, sehr wahrscheinlich auch der Wurm drin! Aber: Hier werden sie geholfen ;-) (sieh dir mal den Anhang an)
Ach ja, noch ein Tipp: Ich mache es nach Möglichkeit so: Hauptprogramm und alle dazu nötigen Funktionen in die erste Bank; den z.B. Service Mode in die nächste Bank, das Konfigurations (Parameter) Menü in die nächste Bank, also nach Möglichkeit so wenig wie möglich zwischen den Bänken switchen... Ach ja, die notwendigen A51 Dateien nicht vergessen (L51_bank.a51 und Startup.a51)
Hallo Banker, Habe das Banking erst mal eingestellt, da ich das Programm bis ende nächste woche fertig haben soll, und es ja jetzt trotzdem noch ohne das Bankumschalten geht. Ich werde mich aber nach, oder vieleicht auch während meinem Armeedienst an meinem Evaluation board damit auseinander setzen! (hab noch n Farb-LCD rumliegen...) Für eure Hilfe danke ich vielmals, ist echt ein tolles Forum, wie Banker so schön sagst, hier werden sie geholfen :D Also dann, viele Grüsse! M.Wicki
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.