Forum: Mikrocontroller und Digitale Elektronik R8C / HEW - Rücksprung


von Andreas W. (Firma: andreas-weschenfelder.de.vu) (rupplyn) Benutzerseite


Lesenswert?

Hallo zusammen,

arbeite gerade mit dem R8C und dem HEW. Leider habe ich das Problem, 
dass funktionen zwar aufgrufen werden, allerdings am Ende der Fkt nicht 
mehr in die Main-Routine zurueckgesprungen wird...

Beispiel

void main(void)
{

test();
//hier kommt man nicht mehr an
}

void test(void)
{

//Bis hier läuft alles
}

jemand ne idee woran das liegen könnte?

von olaf (Gast)


Lesenswert?

Vermute mal du hast dir irgendwie deinen Stack vergurkt.

Olaf

von Rudi (Gast)


Lesenswert?

Hallo Andreas,

du hast aber schon eine Endlosschleife eingebaut??

Etwa so:

void main (void)
{
  while(1)
  {
    test();
  }
}


void test(void)
{

//Bis hier läuft alles
}

...ansonsten läuft der Programmzeiger 'theoretisch' ins unendliche....

Rudi

von Tobias P. (hubertus)


Lesenswert?

vielleicht solltest du beim Beenden deiner Funktion ein return; 
hinsetzen. weiss nicht, ob das einen Unterschied macht, sollte 
eigentlich nicht, aber probieren geht ja bekanntlich über studieren.

viel spass, gruss
  Tobias

von Andreas W. (Firma: andreas-weschenfelder.de.vu) (rupplyn) Benutzerseite


Lesenswert?

hatte ich au mal versucht... beim anlegen des projects "use heap memory" 
raus und schon funktionierts...

von *.* (Gast)


Lesenswert?

Tu mal test() über main().

von gast (Gast)


Lesenswert?

Hi,
ich habe habe auch so ein seltsames Verhalten feststellen können. 
Interessanterweise funktioniert ein Rücksprung im Simulator-Mode 
einwandfrei, verwende ich aber den E8-Emulator im Debugger Mode erfolgt 
nach Beendigung der "ersten" Funktion (zu einer zweiten bin ich im 
Emulator-Mode nie gekommen!!!) ein Rücksprung auf eine ILLEGAL 
INSTRUCTION mit der Bezeichnung UND im Disassembler. Habe es mit der HEW 
x.42 und x.43 getestet, beide zeigten ein gleiches Verhalten.

von zonendoedel (Gast)


Lesenswert?

Moin moin,

ich würde mal die sect30.inc untersuchen.
Klingt so als wenn der Stackpointer keinen RAM mehr unter seinen Füssen 
hat.

C-Compiler für MCUs erzeugen eigentlich automatisch eine 
while(1)-Schleife in der main() aufgerufen wird, d.h. wenn main() 
verlassen wird, wird main() neu gestartet.

Und wech...

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.