AVR- Studio- Simulator, startet neu

Gast #657659
Hallo ich habe folgendes Problem, wenn ich im AVR- Studio simuliere, 
startet es den den Controller neu, sprich er beginnt wieder in Main, 
allerdings werden die Werte im TCNT0- Register nicht resetet. Ich 
programmiere mit dem aktuellsten WinAVR in C, der Controller ist ein 
ATMEGA 162, mit der Quarzfrequenz 3.6864 MHz, welche auch im Debugger 
eingestellt ist, dürfte aber eigentlich nichts zur Sache tun, weil das 
selbige Problem auch bei 4.00 MHz auftritt. Der Neustart passiert 
meistens, bei der Folgenden Code- Sequenz:
1
void init_measurment ()
2
{
3
  //sicherstellen, dass kein Interrupt stört
4
  //PCINT 0 deaktivieren
5
  GICR&=~(1<<PCIE0);
6
  //TC2 Overflow interrupt deaktivieren
7
  TIMSK&=~(1<<TOIE2);
8
  //TC2 OC interrupt aktivieren
9
  TIMSK|=(1<<OCIE2);
10
  //TC2, prescaler 8
11
  TCCR2&=0x00;;
12
  TCCR2|=(1<<CS21);  
13
}
 die Funktion rufe ich folgendermaßen auf:
1
init_measurment();
 allerdings habe ich Funktionen bisher immer so aufgerufen, wenn die 
Parameterliste leer ist. Vielleicht hat noch jemand einen Link zum 
nachlesen, wie man Funktionen aufruft, weil ich entsinne mich dunkel, 
dass manche in der Parameterliste auch void Funktion (*variable) stehen 
haben...

Schon mal danke für Eure Hilfe
Gast
Hilfe, ich bin am Verzeifeln, warum will das nicht gehen, mein Code ist 
nicht geheim, dachte nur, dass der Fehler vermutlich in diesem 
Ausschnitt liegen wird, also hier nocheinmal der komplette Code, im 
Anhang, vielleicht findet ja jemand das Problem, ich tue es leider 
nicht. Ein Makefile besitze ich nicht, bzw. besitzen schon, allerding 
verwende ich das vom AVR- Studio automatisch generierte.
Angehängte Dateien:
Gast
Hallo Magnus, nein das habe ich nicht, weil ich eigentlich nur das 
OutputCompare- Flag benötige. Ist es erforderlich, dass ich die 
InterruptRoutine dazu schreibe?
Wenn ja, reicht es aus einfach eine leere Routine zu schreiben?
Gast
Student wrote:
> Hallo Magnus, nein das habe ich nicht, weil ich eigentlich nur das
> OutputCompare- Flag benötige. Ist es erforderlich, dass ich die
> InterruptRoutine dazu schreibe?
> Wenn ja, reicht es aus einfach eine leere Routine zu schreiben?

Wenn du nur das OC-Flag benötigst, musst du nicht extra den Interrupt 
freigeben. Schlimmer noch: wenn du den Interrupt frei gibst, dann wird 
der Controller beim Auftreten des Interrupts den entsprechenden 
Interruptvektor anspringen. In diesem Falle gibt es dann 3 
Möglichkeiten:

1) Du hast einen entsprechenden Interrupthandler implementiert. Dieser
   Handler wird auch angesprungen und abgearbeitet --> OK

2) Du hast keinen entsprechenden Interrupthandler implementiert. Der
   Compiler setzt für diesen Interrupt ggf. einen Sprung auf den Pro-
   grammanfang --> sieht aus wie ein Reset --> nicht schön --> schlecht

3) Du hast keinen entsprechenden Interrupthandler implementiert. Der
   Compiler setzt für diesen Interrupt ggf. ein RETI ein, was bewirkt,
   dass der Controller nach einer "Pause" von wenigen Taktzyklen wieder
   seinen normalen Aufgaben nachgeht... --> wäre dann nicht ganz soo
   schlimm ;)

Ich werde an dieser Stelle bestimmt noch von anderen Forenmitgliedern 
korrigiert (die Ausführungen sind wahrscheinlich nicht gaaanz korrekt), 
aber im Prinzip dürfte Punkt 2 auf dein Programm zutreffen.

Gruß,
Magnetus

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 19 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

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.