PDA

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&uuml;r x51-Controller, die in der Datei &#39;math.asm&#39; auch dem Batronix Prog-Studio beiliegen, hingewiesen worden. <BR>Die Lorbeeren geb&uuml;hren Frieder Walther, der mir am vergangenen Wochenende deswegen eine Mail gesandt hat. Ohne ihn w&uuml;rde dieser Fehler wohl immer noch in den Routinen rumspuken und vielleicht auch einige Leute zur Verzweiflung treiben &#40;c: <BR> <BR>In aller K&uuml;rze: <BR>Die Routine div10.u, die eine vorzeichenlose 16-Bit-Zahl durch 10 teilt, enthielt einen Fehler, der sie nur f&uuml;r Zahlen &#60; 256, also solche mit dem höherwertigen Teil = 0 funktionieren ließ. F&uuml;r Werte, deren MSB ungleich Null ist, ergab sich eine Endlosschleife. <BR> <BR>Da diese Routine insbesondere f&uuml;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&uuml;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&uuml;nsche noch viel Spaß damit, und hoffe, ein Beispiel gegeben zu haben, wie man mit Bug-Reports umgehen sollte &#40;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&uuml;ngliche Routine war durchaus korrekt &#41;c: <BR> <BR>na ja, lest selbst nach: <BR><a href="http://bernd.linsel.org/x51/div10u.html" target="_blank">&uuml;berarbeitet und schöner zu lesen &#42;g&#42;</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 &#34;MOV direct,direct&#34; falsch ist, ist ein Bug des Batronix-Assemblers. <BR>D.h. alle anderen, die ich kenne &#40;Intel, Metalink, Keil&#41; 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-&#62;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 &#40;Ziel, Quelle und Quelle, Ziel kommen in der Literatur sowie in Datenblättern vor&#41;, lässt sich dieses in der Prog-Studio Software einstellen. <BR> <BR>Unter -&#62; &#34;Bearbeiten&#34; -&#62; &#34;Optionen&#34; -&#62; &#34;Assembler&#34; 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&uuml;hrt die gleiche Notation wie bei den anderen MOV Befehlen &#40;also Ziel, Quelle&#41; 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 &#40;okay, wird verbessert&#41;. Die Suche betrifft aber weiterhin auch die archivierten Beiträge... <BR>- Ich danke Dir f&uuml;r die vielen Beiträge aber ich bitte auch um einen etwas freundlicheren Umgangston... <BR> <BR>Mit freundlichen Gr&uuml;ßen <BR>André Bauer

Import-Script
11.12.2002, 10:56
is schon richtig, was André schreibt... ich hab&#39;s noch mit den Original Intel-Unterlagen, die damals zum 8051 mit dem ASM51 rausgegeben wurden, gelernt, und da stand tatsächlich f&uuml;r diesen Fall &#39;mov, Quelle, Ziel&#39;, während alle anderen mov-Befehle bekanntermaßen &#39;mov Ziel, Quelle&#39; lauten. Es handelt sich hier halt einfach um die direkte Abbildung des Opcodes, der da lautet &#39;85h, &#60;zieladdr&#62;, &#60;quelladdr&#62;&#39;. Man muß also einfach drauf hinweisen, dann kriegt man auch korrekten Code hin. Sorry f&uuml;r die ganze Aufregung.

Import-Script
11.12.2002, 11:03
@André: ähm... noch was ganz anderes: ich hab &uuml;brigens peinlicherweise meine Zugangsdaten zum Diskussions-Forum verlegt &#40;drum bin ich wieder mal unregistrierter Gast&#41;, ich war ja immerhin fast 1 Jahr nicht aktiv hier &#41;c: Könntest Du mir die mal zuschicken -- wär echt nett &#42;grins&#42;!

Import-Script
11.12.2002, 11:07
&#42;grins&#42; hab&#39;s doch alleine geschafft... irgendwie bin ich etwas daneben. Verzeiht mir einfach nochmal! <BR>Gr&uuml;ße!

Import-Script
12.12.2002, 08:55
Wie gesagt habe ich von offizieller Seite &#40;Intel, Atmel, Dallas, Siemens, Philips, ...&#41; bisher nur Programmbeispiele mit der &uuml;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 &#34;Mikrocontroller Kochbuch&#34;. Deshalb hatte Andre das in der ersten Batronix-Version so &uuml;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... &#40;versteckte Kritik&#41; <BR>unterst&uuml;tzte Batronix Makros und bedingte Assemblierung und w&uuml;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 &#42;fiesgrins&#42;?

Import-Script
12.12.2002, 18:15
Beide Punkte &#40;Makro&#39;s und bedingte Assemblierung&#41; sind f&uuml;r die 6&#39;er Versionen vorgesehen...