HCS12 wait schleife/funktion

Gast #436370
Lesenswert?
• ▲
▼
Hallo zusammen,

ich versuche mich gerade an der Progammierung eine HCs12. Ich wollte nun 
eine "Wait"-Funktion einfügen. Einfach eine For-Schleife die von einer 
bestimmten zahl runter zählt. Das Programm läuft, aber die Funktion wird 
anscheined nicht aufgerufen, also es wird quasi nicht gewartet. Hat 
jemand einen Tip, woran das liegen könnte?

Vielen Dank.

Gruß
Maik
Gast #436373
Lesenswert?
• ▲
▼
Hi,
wenns wirklich nicht wartet, hast du möglicher weise in deiner For 
-Schleife nichts drin stehen. Und der Optimizer deines compilers wirft 
dann diese scheinbar sinnlose schleife einfach raus.
Am besten du schreibst in die schleife etwas rein, wie z.B ein assembler 
"NOP". Dann wird das klappen.

Marc989
#436382
Lesenswert?
• ▲
▼
Ansonsten liegt der Fehler vielleicht in Zeile 12?!

Ohne Code wird das nicht viel. Ein entsprechender Codeauszug wäre nett. 
Vielleicht hast ja nen gedanklichen Fehler drin?

Schonmal kontrolliert, ob er überhaupt in die For Schleife reingeht? Z.B 
über UART senden, LED blinken lassen oder (im Idealfall) debuggen per 
Compiler und Breakpoint. Das geht doch recht easy mit dem HCS12, solang 
du diesen Programmer hast.
#436383
Lesenswert?
• ▲
▼
>      for(ii=1; ii < zahl; ii++)
>      {
>         for(ii=1; ii < zahl; ii++)
>          {
>           _asm("NOP");
>          }
>         _asm("NOP");
>       }

Wartet er gar nicht oder ist nur die Zeit zu kurz?
Die äussere for-Schleife bewirkt hier nämlich gar
nichts, weil ihre Endbedingung durch die innere
for Schleife mit ausgelöst wird.
-> 2 verschiedene Variablen benutzen.
#436384
Lesenswert?
• ▲
▼
Also zumindest di äußere For-Schleife kannst du dir schenken. Denn wenn 
er aus der inneren For Schleife raus geht, ist ii mit sicherheit schon 
größer als zahl.

Somit wird deine äußere Schleife genau 1x aufgerufen.

Btw: Wie groß ist "zahl" üblicherweise? Deine MCU läuft mit (laut 
mystischer Glaskugel) 16MHz. Da muss Zahl schon reichlich groß sein, 
dass du selber was mit warten bemerkst.
Gast #436387
Lesenswert?
• ▲
▼
Hi,

wenn du zwei mal ii als zähler nimmst, löscht die innerer schleife den 
wert der äußeren. Ich würde unterschiedliche variablen nehmen.
Des weitern wäre noch interessant welcher Wert in Zahl steht und wieviel 
bittig die variable ist. (8-bit, 16 bit...)

Marc989
#436407
Lesenswert?
• ▲
▼
Dann musst du in der Schleife irgendwas anderes machen, was
der Compiler nicht wegoptimieren kann. Eine Funktion aufrufen
bei der der Compiler den Funktionsrumpf nicht sieht und
daher nicht inlinen kann, ist zb. immer ein guter Kandidat:

static void wait_1( int time );
static void wait_2();

void wait( int time )
{
  int i;

  for( i = 0; i < time; ++i )
    wait_1( time );
}

void wait_1( int time )
{
  int i;
  for( i = 0; i < time; ++i )
    wait_2();
}

void wait_2()
{
  asm( "NOP" );
}
Gast #436420
Lesenswert?
• ▲
▼
bist du sicher das dein int 16 bit gross ist?
Ich programmiere oft mit 8Bit controllern und da ist das int eben nur 8 
bit gross, also nur (0...255).
dann könntest du so eine große zahl nicht reinladen. dann bliebe nicht 
mehr viel davon übrig.

Weiss nicht mehr ob der HC12 8Bit oder 16Bit controller ist.

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.