Archiv verlassen und diese Seite im Standarddesign anzeigen : A<B oder B>A ?
Sauerbruch
11.05.2009, 16:54
Moin!
Wenn ich zwei Byte-variablen vergleichen möchte, ist es vom Effekt her ja egal ob ich
If A < B then... else...
oder
If B > A then... else...
schreibe.
Ich meine aber hier mal gelesen zu haben, dass eine der beiden Varianten erheblich mehr Code produziert - leider habe ich den Thread trotz intensiver Suche nicht mehr gefunden.
Weiß hierzu jemand etwas genaueres?
ein > sollte nicht verwendet werden, nur >= oder < (steht hier: https://www.roboternetz.de/wissen/index.php/Bascom#Wie_man_besonders_kompakten_Code_erzeugt , habs gestern selbst wieder nachgeschlagen weil ich das immer wieder verwechsel :) )
mfg
Hallo!
Im vorher genannten Link steht folgendes:
Vermeide a>b, verwende a>=c oder b<a (RISC-Prozessor kennt kein größer als)
Weiß jemand was der RISC-Prozessor statt "größer als" ausführt?
Vermeide Bit-Variable
Warum? Wenn ich zum Beispiel fünf Variablen in meinem Programm benötige, die nur den Wert 0 oder 1 beeinhalten, bin ich mit fünf Bit-Variablen sparsamer unterwegs als mit fünf Byte Variablen, weil dann die fünf BIT-Variablen nur 1 Byte Platz im SRAM verbrauchen.
Oder bin ich da komplett falsch unterwegs...
Grüße
Thomas
Sauerbruch
11.05.2009, 18:00
Danke, Netzman!
Genau diesen Link habe ich gesucht :-)
Werd´s mir gleich mal irgendwo aufschreiben!
Gruß,
Daniel
Hallo!
Weiß jemand was der RISC-Prozessor statt "größer als" ausführt?
Die Frage müsste lauten: Weiß jemand, wie Bascom das umsetzt?
Wenn der µC keinen Befehl dafür hat, kannst du ihm auch keinen schicken, den er dann durch etwas anderes ersetzt. Das muss schon dein Compiler machen.
Vermeide Bit-Variable
Warum? Wenn ich zum Beispiel fünf Variablen in meinem Programm benötige, die nur den Wert 0 oder 1 beeinhalten, bin ich mit fünf Bit-Variablen sparsamer unterwegs als mit fünf Byte Variablen, weil dann die fünf BIT-Variablen nur 1 Byte Platz im SRAM verbrauchen.
Oder bin ich da komplett falsch unterwegs...
Grüße
Thomas
Das macht der Compiler aber so nicht.
Legst du z.B. 5 Flags auf die Bits 0-4 einer Byte-Variablen My_flags, dann stimmt deine Vermutung. Für eine Bit-Variable werden tatsächlich 2 Byte im SRAM belegt.
Übrigens wird beim Verarbeiten von Bit-Typen häufig mehr Code erzeugt als mit Byte-Typen.
If A = B Then ...
erfordert z.B. 14 Cycle, wenn A und B Bit-Typen sind. Als Bytes nur 7 Cycle.
Kann man sich im Simulator übrigens sehr schön ansehen.
Gruß
Rolf
Was nimmt man dann für
If A <> B then
etwa
If not A=B then
???
eeeh bin zwar nicht mehr so wirklich im BASCOM-Proggen drin, würd aber auf das tippen:
if a==b then (keine Anweisung)
else
(tu was)
endif
Was nimmt man dann für
If A <> B then
etwa
If not A=B then
???
If A <> B then '9 Cycle
If A = B then '7 Cycle
Else '3Cycle
C = Not A '9 Cycle
Lohnt alles nicht, <> ist besser, es sei denn, du hast sowieso einen Else-Zweig.
Gruß
Rolf
A <> B bedeutet jetzt "A nicht B" oder?
Besserwessi
11.05.2009, 22:38
Für die AVRs sollte es egal sein ob man a>b oder b<a schreibt. Der Prozesor ist zwar RISC, hat aber trotzdem die Vergleich für beide Richtugen. Wenn einer der beiden Fälle anders ist, dann ist das höchstens eine Schwäche der Compilers.
A<>B steht für ungleich, sollte also das gleiche geben wie NOT (A=B).
kolisson
12.05.2009, 04:46
möchtest ne klare antwort auf die frage:
WARUM nicht BIT ?
hier ist die antwort:
du hast einen 8bit microcontroller. wie der name schon sagt,
arbeitet der mit 8-bit.
daraus schliessen wir, dass jeder speicherzugriff mit 8 bit erfolgt.
also .. es würde nix bringen, die sachen als BIT zu deklarieren, da ja immer ein byte geladen werden muss um das bit zu finden.
innerhalb des programmes kann man ja trotzdem bitweise arbeiten..
ein
dim flags as byte
stellt ja unter dem namen flags schon ein byte oder 8 bit zur verfügung.
ansprechen kann man die einzelnen bits dann wie bei den ports:
flags.0 =0
flags.1 =1
flags.2 =0
flags.3 =0
flags.4 =0
flags.5 =0
flags.6 =0
flags.7 =1
insofern sollte ein befehl "print flags" 130 erzeugen.
gruss kkaus
@kolission
Danke für die klare und hilfreiche Antwort. Das mit den "flags.0" kannte ich noch nicht.
Gruß
Thomas
:)
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.