Ja, wenn A <> 1 ist, wird die lange Formel übersprungen (nicht ausgeführt).
Gruß Dirk
Hallo!
Sorry für den Titel, mir fällt keine kurze, passende Beschreibung meiner Frage ein.... Ist ja auch schon spät und Ostern und so.....
Ich würde gerne folgendes wissen:
Angenommen in einem ATmega steht folgender PseudoCode
ist es dem Controller dann absolut egal was zwischen if und endif steht solange A <> 1 ? Wenn A also <> 1 wird dann durch diese lange Kalkulation keine Rechenzeit verbraucht?Code:if A = 1 then Y=sin(x)^10*PI*cos(y)^e*.....*.....*.... end if
Ich würde das gerne wissen weil ich in der Hauptschleife eine Taste per Inkey() abfrage und danach dann viele Select Case Fälle kommen. Diese ganze Abfrage soll aber möglichst keine Rechenzeit verbrauchen, da der ATmega32 nebenbei einen Stepper im 1/16 Mikroschritt antreibt und ein dementsprechend schnelles Clocksignal erzeugt bzw. ziemlich ausgelastet ist.
Vielen Dank für eure Antworten,
viele Grüße,
William
Ja, wenn A <> 1 ist, wird die lange Formel übersprungen (nicht ausgeführt).
Gruß Dirk
Danke, das ist ja prima
Gibt es eigentlich einen Unterschied ob man fragt
if A = true then ...
und
if A <> false then ...
Beim ersten Fall muss der µC ja gucken ob A genau "true" ist, beim zweiten Fall muss er ja "nur" gucken ob A irgendetwas anderes als "false" ist.
Sorry für die evtl. leicht bescheuert anmutenden Fragen, aber ich bin programmiertechnisch relativ ahnungsbefreit...
Viele Grüße,
William
Das kommt ganz drauf an, was A für ein Datentyp ist. Am schnellsten testet sich theoretisch (Assembler), ob ein Register gleich oder ungleich Null ist. Aber was dein Compiler draus macht, muss du im Listfile nachschauen.
[Der Unterschied dürfte aber nur wenige Takte ausmachen].
in C soll man statt "a == TRUE" auch mal eher "a != FALSE" verwenden; FALSE ist immer 0, TRUE aber manchmal 1, manchmal -1, 0xFF,... irgendwas ungleich 0 eben.
#ifndef MfG
#define MfG
Noch eine Ergänzung weils grad gut passt: Bei mehrfachen Verknüpfungen wird sofort abgebrochen wenn das Ergebniss nicht mehr true werden kann:
if (a*wurzel(x)-sin(y) < b) && (a!=0)
Der Unsinn wird immer ausgerechnet, aber
if (a!=0) && (a*wurzel(x)-sin(y) < b)
berechnet nix wenn a==0 :)
Irgendwo habe ich das mal aufgeschnappt:
false=(1==0);
true=!false;
Wie der Kompiler das speichert ist nicht festgelegt.
Gruß
mic
Bild hier
Atmel’s products are not intended, authorized, or warranted for use
as components in applications intended to support or sustain life!
Es gibt aber auch Compiler, die rechnen erst gnadenlos alles aus, was in der If Bedingung steht. (VB macht das z.B. so). Was Bascom daraus macht, weiß ich nicht.
Wenn man also sicher gehen will: IFs verschachteln und außen die Bedingung abfragen, die am einfachsten und deren Erfüllung am unwahrscheinlichsten ist.
Gruß
pctoaster
Gruß
pctoaster
Super, da ist ja jetzt einiges an Tipps zusammengekommen. Vielen Dank!
William
Lesezeichen