-
-
Erfahrener Benutzer
Roboter Experte
Hallo,
hier mal was mir so beim ersten drüber schauen aufgefallen ist.
us_time hat 16Bit, der Controller kann pro Takt aber nur 8 Bit bearbeiten. Daher solltest du vor jedem Zugriff auf us_time ein cli(); und danach ein sei(); schreiben, außer in der Interruptroutine selber. Wenn du sonst Pech hast findet mitten im Lesen von us_time ein Interrupt statt. Daran wird es aber wohl nicht liegen.
return us_time/58;
Wofür ist das? Erst quälst du den Controller alle 16 Takte ein Interrupt ab, um dann durch 58 zu teilen? Das wird übrigens als integer berechnet. Wenn us_time = 45 ist, bekommst du eine 0 Zurück. Welche Werte erwartest du für us_time? Das ist hier übrigens mein Fehlerfavorit.
Wenn du den Code optimieren möchtest, schreib noch ein asm("nop"); in die while- Schleife. Und wenn du es wirklich gut meinst, noch ein return 0; am Ende des Programms, da int main (void) ja einen Rückgabewert haben sollte.
Gruß
Jens
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- Anhänge hochladen: Nein
- Beiträge bearbeiten: Nein
-
Foren-Regeln
Lesezeichen