Archiv verlassen und diese Seite im Standarddesign anzeigen : Fehler in math.asm von Prog-Studio
Import-Script
11.12.2002, 02:05
Hallo, <BR> <BR>ich bin auf einen Fehler in den von mir vor ca. anderthalb Jahren entwickelten Rechenroutinen für x51-Controller, die in der Datei 'math.asm' auch dem Batronix Prog-Studio beiliegen, hingewiesen worden. <BR>Die Lorbeeren gebühren Frieder Walther, der mir am vergangenen Wochenende deswegen eine Mail gesandt hat. Ohne ihn würde dieser Fehler wohl immer noch in den Routinen rumspuken und vielleicht auch einige Leute zur Verzweiflung treiben (c: <BR> <BR>In aller Kürze: <BR>Die Routine div10.u, die eine vorzeichenlose 16-Bit-Zahl durch 10 teilt, enthielt einen Fehler, der sie nur für Zahlen < 256, also solche mit dem höherwertigen Teil = 0 funktionieren ließ. Für Werte, deren MSB ungleich Null ist, ergab sich eine Endlosschleife. <BR> <BR>Da diese Routine insbesondere für die Wandlung ins Dezimalformat, also z.B. die Ausgabe als String benutzt wird, ist der Fehler nicht gerade unwichtig. <BR> <BR>Ich habe daher die Routine neu entwickelt und -- damit auch mit der x51-Architektur unerfahrenere Leute mal sehen können, wie so etwas läuft -- den gesamten Entwicklungsweg vom Algorithmus bis zur optimierten Routine einmal komplett dokumentiert. <BR> <BR>Da selbst die Fehlerkorrektur alleine für dieses Forum ein wenig viel wäre, habe ich das ganze als einfache Textdatei auf einen Server gelegt und hier nur verlinkt: <a href="http://bernd.linsel.org/x51/div10u.txt" target="_blank">Fehlerkorrektur und Doku Neuentwicklung</a> <BR> <BR>ich wünsche noch viel Spaß damit, und hoffe, ein Beispiel gegeben zu haben, wie man mit Bug-Reports umgehen sollte (c: <BR> <BR>Bernd
Import-Script
11.12.2002, 03:44
ähm... ja, ich hab das Ding gerade mal neu als HTML formatiert und bin dabei auf was ganz doofes gestoßen: Die ursprüngliche Routine war durchaus korrekt )c: <BR> <BR>na ja, lest selbst nach: <BR><a href="http://bernd.linsel.org/x51/div10u.html" target="_blank">überarbeitet und schöner zu lesen *g*</a>
Import-Script
11.12.2002, 08:53
Hallo Bernd, <BR> <BR>das war schon einmal hier im Forum, aber es werden ja ältere Beiträge regelmäßig gelöscht. <BR> <BR>Das der Befehl "MOV direct,direct" falsch ist, ist ein Bug des Batronix-Assemblers. <BR>D.h. alle anderen, die ich kenne (Intel, Metalink, Keil) machen es korrekt: <BR> <BR>LOC OBJ LINE SOURCE <BR> <BR>0000 85F082 1 mov dpl, b <BR>0003 758201 2 mov dpl, #1 <BR> <BR>Ich glaube, in der neuesten Version des Batronix-Assembler ist dieser Bug behoben. <BR> <BR> <BR>Anbei eine Dezimalwandlung mit Division, die beliebig auf 24, 32 Bit usw. erweiterbar ist. <BR> <BR>Peter <BR> <BR><!--attachment: Bcd2-5364.unk*attachment_icon.gif*application/octet-stream*0.6*16Bit%2dBin%e4r%2d%26%2362%3b5Digit%2dD ezimal*Bcd2%2ea51 --><center><table border=1><tr><td><img src="http://progshop.com/elektronik/diskussion/icons/attachment_icon.gif" align=left alt="application/octet-stream">16Bit-Binär->5Digit-Dezimal<br><a href="http://progshop.com/elektronik/diskussion/messages/2066/Bcd2-5364.unk" target="_blank"><b>Bcd2.a51</b></a> (0.6 k)</td></tr></table></center><!--/attachment-->
Import-Script
11.12.2002, 09:19
Ich hab nochmal in die Intel-Programmbeispiele gesehen, da wird es auch richtig rum gemacht: <BR> <BR><a href="http://www.intel.com/design/mcs51/docs_mcs51.htm" target=_top>http://www.intel.com/design/mcs51/docs_mcs51.htm</a> <BR> <BR>Es gilt ausnahmslos: <BR> <BR>MOV Ziel, Quelle <BR> <BR> <BR>Und da Intel ja der 8051-Erfinder ist, muß das, was Du geschrieben hast, also falsch rum sein. <BR> <BR> <BR>Peter <BR>
Import-Script
11.12.2002, 09:45
Hallo Bernd und Peter, <BR> <BR>da durchaus beide Varianten des MOV direct, direct verbreitet sind (Ziel, Quelle und Quelle, Ziel kommen in der Literatur sowie in Datenblättern vor), lässt sich dieses in der Prog-Studio Software einstellen. <BR> <BR>Unter -> "Bearbeiten" -> "Optionen" -> "Assembler" kann man beim Mov direct, direct Befehle wählen, ob erst die Quelle und dann das Ziel oder anders herum angegeben werden soll. <BR> <BR>Meiner Meinung nach führt die gleiche Notation wie bei den anderen MOV Befehlen (also Ziel, Quelle) zu weniger Fehlern. Daher ist diese in der Prog-Studio Software als Standardeinstellung gewählt. <BR> <BR>@Peter: <BR>- Die Forumsbeiträge werden hier nicht gelöscht, sondern in den Archiv Ordner verschoben. Dieser ist leider nicht so leicht zu sehen (okay, wird verbessert). Die Suche betrifft aber weiterhin auch die archivierten Beiträge... <BR>- Ich danke Dir für die vielen Beiträge aber ich bitte auch um einen etwas freundlicheren Umgangston... <BR> <BR>Mit freundlichen Grüßen <BR>André Bauer
Import-Script
11.12.2002, 10:56
is schon richtig, was André schreibt... ich hab's noch mit den Original Intel-Unterlagen, die damals zum 8051 mit dem ASM51 rausgegeben wurden, gelernt, und da stand tatsächlich für diesen Fall 'mov, Quelle, Ziel', während alle anderen mov-Befehle bekanntermaßen 'mov Ziel, Quelle' lauten. Es handelt sich hier halt einfach um die direkte Abbildung des Opcodes, der da lautet '85h, <zieladdr>, <quelladdr>'. Man muß also einfach drauf hinweisen, dann kriegt man auch korrekten Code hin. Sorry für die ganze Aufregung.
Import-Script
11.12.2002, 11:03
@André: ähm... noch was ganz anderes: ich hab übrigens peinlicherweise meine Zugangsdaten zum Diskussions-Forum verlegt (drum bin ich wieder mal unregistrierter Gast), ich war ja immerhin fast 1 Jahr nicht aktiv hier )c: Könntest Du mir die mal zuschicken -- wär echt nett *grins*!
Import-Script
11.12.2002, 11:07
*grins* hab's doch alleine geschafft... irgendwie bin ich etwas daneben. Verzeiht mir einfach nochmal! <BR>Grüße!
Import-Script
12.12.2002, 08:55
Wie gesagt habe ich von offizieller Seite (Intel, Atmel, Dallas, Siemens, Philips, ...) bisher nur Programmbeispiele mit der üblichen Notation gesehen. <BR> <BR>Daher sollte man im eigenen Interesse auch diese verwenden, was auch der Batronix Standardeinstellung entspricht. <BR>Sonst könnte man bei der Übernahme von Beispielen aus dem Internet leicht auf die Nase fallen. <BR> <BR>Hauptschuld an der vertauschten Notation hat das "Mikrocontroller Kochbuch". Deshalb hatte Andre das in der ersten Batronix-Version so übernommen und dann aber korrigiert. <BR> <BR>Vielleicht beruht das Ganze nur auf einem Schreibfehler im ersten Intel ASM51-Manual. Und einmal publiziert läßt sich sowas nur schwer wieder ausmerzen. <BR> <BR> <BR>Peter <BR>
Import-Script
12.12.2002, 15:53
tjaaa... (versteckte Kritik) <BR>unterstützte Batronix Makros und bedingte Assemblierung und würden die Assembler-Einstellungen sich in entsprechenden Symbolen widerspiegeln, könnte man das ganze ja ganz elegant umschiffen mittels: <BR> <BR>#ifdef _totally_messed_up_obsolete_intel_syntax <BR><blockquote>mov b, dpl</blockquote> <BR>#else <BR><blockquote>mov dpl, b</blockquote> <BR>#endif <BR> <BR>na, is das mal ne Anregung *fiesgrins*?
Import-Script
12.12.2002, 18:15
Beide Punkte (Makro's und bedingte Assemblierung) sind für die 6'er Versionen vorgesehen...
Powered by vBulletin® Version 4.1.12 Copyright ©2012 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.