MSP430F1610 nop-Funktion

OP #2020178
Lesenswert?

Ich habe in meinem Quelltext diese Funktion stehen:
1
static void delay(uint16 d) 
2
{
3
  uint16 i;
4

5
  for (i = 0; i < d; i++) 
6
  {
7
        nop();
8
        nop();
9
        nop();
10
        nop();
11
  }
12
}

Wo bekomme ich diese NOPs her? Vor allem sieht man ja auch nicht, 
wielange dieses "Delay" dauern soll.
#2020183
Lesenswert?

nop() ist die nop Assembler Instruktion. Normal müsste dein Kompiler das 
auflösen und direkt den Assembler Befehl reinmachen. Aber je nach 
Kompiler gibts da verschiedene Schreibweisen, manchmal _nop() manchmal 
nur nop(), manchmal als Makro....wie lange ein Nop dauert, steht im User 
Guide des Prozessors, normalweise beim MSP430 1 Taktzyklus. Mit dem 
Schleifen-Overhead kommt man dann auf x Zyklen. Ich weiß jetzt nicht, wo 
du die Funktion her hast, aber ohne volatile für den zähler ist das eh 
witzlos.
Gast #2020306
Lesenswert?

Wenn du verlässliche Delays willst, schreib lieber ein bisschen 
Inline-Assembler bzw. nutze fertige Routinen. Ich benutze eine 
abgewandelte Art der Funktion brief_pause von 
http://mspgcc.sourceforge.net/manual/c1408.html

Ich habe da noch ein NOP hinzugefügt, sodass jeder Schleifendurchlauf 
vier Taktzyklen benötigt. Damit kann man dann bis zu ca. 262000 Zyklen 
verzögern, das reicht für fast alles.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren