Forum: Compiler & IDEs c code optimieren


von Dude (Gast)


Lesenswert?

Hallo,

ich suche eine Optimierungsmöglichkeit auf Laufzeit für folgendes.

Es gibt einen Init Prozess (einmalig bei Anschalten) wo eine Variable 
var auf etwas bestimmtes gesetzt wird. Und einen zyklischen Task, wo in 
Abhängigkeit von der Variable etwas ausgeführt wird.

Init prozess:
Variable var wird auf einen Wert gesetzt.


Danach zyklische Ausführung:
1
Zyklischer_task
2
{
3
  if (var == 1)
4
  {
5
6
  }
7
}


Wenn es möglich ist - könnte man diese if Anweisung irgendwie 
effizienter machen, als immer wieder die gleiche (unveränderte) Variable 
abzufragen?

von (prx) A. K. (prx)


Lesenswert?

Die Task erst aktivieren, wenn var==1.
Alternativ 2 Tasks, eine für var==1 und eine für var!=1.

von optimize(code) (Gast)


Lesenswert?

Da zum Zeitpunkt des Compilerlaufs der Wert nicht feststeht, benötigst 
du die Auswertung zur Laufzeit.

Ob es bessere Varianten als 'if' gibt, ist nur aus dem vollständigen 
Zusammenhang ersichtlich. Also her mit dem Code.

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

Wenn isich die Variable nicht mehr ändert, dann ist das doch gleich mit
1
if (var == 1)
2
{
3
  Zyklischer_task
4
  {
5
6
  }
7
}

d.g. wenn var != 1 ist, braucht man die Task erst garnicht zu starten (/ 
initialisieren.

von amateur (Gast)


Lesenswert?

Denk mal über Funktionspointer nach.
Du hüpfst immer, das Ziel wackelt.

von Ralf G. (ralg)


Lesenswert?

Johann L. schrieb:
> Wenn isich die Variable nicht mehr ändert, dann ist das doch gleich mit
...

Ja klar! Nur was will er jetzt optimieren? Was hat er denn 
zeitkritisches, dass die Reihenfolge der Abfrage so einen Einfluss hat? 
Ein paar pushes und popes?

Mal so nachgedacht: Könnte es sein, dass das 'vollständige' Programm 
eher so sein soll?
1
Zyklischer_task
2
{
3
  if (var == 1)
4
  {
5
6
  }
7
  if (var == 2)
8
  {
9
10
  }
11
  if (var == 3)
12
  {
13
14
  }
15
// usw.
16
}

von Sven B. (scummos)


Lesenswert?

Es gibt dies hier: http://kerneltrap.org/node/4705
Ansonsten kann man da ohne weitere Infos imo nix zu sagen.

von Falk B. (falk)


Lesenswert?

@  Dude (Gast)

>Wenn es möglich ist - könnte man diese if Anweisung irgendwie
>effizienter machen, als immer wieder die gleiche (unveränderte) Variable
>abzufragen?

Warum? Die Abfrage so einer einfachen Variable dauert selbst auf der 
langsamsen 8 Bit Gurke nur ein handvoll Takte.

http://www.mikrocontroller.net/articles/AVR-GCC-Codeoptimierung#Prinzipien_der_Optimierung

von hanfsamen (Gast)


Lesenswert?

>Wenn es möglich ist - könnte man diese if Anweisung irgendwie
>effizienter machen, als immer wieder die gleiche (unveränderte) Variable
>abzufragen?

Interrupt?

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
Noch kein Account? Hier anmelden.