Forum: Compiler & IDEs ATTiny13 Timer0-CompareA-ISR wird nicht ausgeführt


von Marodeur (Gast)


Lesenswert?

Moinmoin
Ich will mich z.Z. mal wieder an nem Atmel probieren und dachte mir als 
kleine Fingerübung erstmal nen Pin-Toggel zu machen.
Als PWM auch kein Problem, aber er springt einfach nicht in die ISR 
rein.
Nachdem nix so funktioniert hat wie es soll hab ich mir einige 
Codestücke zusammengesucht, aber auch das bringt keine Besserung.
1
#include <avr/io.h>
2
#include <avr/interrupt.h>
3
4
5
int main(void)
6
{
7
  DDRB=0xFF;
8
    init_Timer0();
9
    sei();
10
11
    while(1)
12
    {
13
        asm("nop");
14
    }
15
}
16
17
void init_Timer0(void)
18
{
19
    TCCR0A = 0x02;          // CTC
20
    TCCR0B = 0x02;          // Prescaler =8 -> fTimer = 125kHz
21
    OCR0A = 0x7D;           // Comparevalue = 125
22
    TCNT0 = 0x00;           // reset Timer
23
    TIMSK0 =0x4;      // Enable compare interrupt
24
}
25
26
27
ISR (TIMER0_COMPA_vect)
28
{
29
  PORTB=0xFF;
30
}
Interessanterweise springt er nicht in die ISR, aber dafür ruft er 
init_Timer0() mehrfach auf(wenn ich mit F5 einfach laufen lasse). wtf? 
oO
Was überseh ich da?
Ach ja, Programmierumgebung ist Atmel Studio 6.

von Stefan E. (sternst)


Lesenswert?

Marodeur schrieb:
> Was überseh ich da?

Offenbar die Warnung des Compilers, dass "TIMER0_COMPA_vect" ein 
"misspelled handler" ist.

von Marodeur (Gast)


Lesenswert?

Dann muss der die Warnung aber sehr gut verstecken.
Bei mir steht nämlich nix mehr von wegen Warnung:
1
------ Build started: Project: Fototranse, Configuration: Debug AVR ------
2
Build started.
3
Project "Fototranse.cproj" (default targets):
4
Target "PreBuildEvent" skipped, due to false condition; ('$(PreBuildEvent)'!='') was evaluated as (''!='').
5
Target "CoreBuild" in file "C:\Program Files (x86)\Atmel\Atmel Studio 6.0\Vs\Compiler.targets" from project "C:\Users\Marodeur\Documents\Atmel Studio\Fototranse\Fototranse\Fototranse.cproj" (target "Build" depends on it):
6
  Using "RunCompilerTask" task from assembly "C:\Program Files (x86)\Atmel\Atmel Studio 6.0\Vs\Compiler.Task.dll".
7
  Task "RunCompilerTask"
8
    C:\Program Files (x86)\Atmel\Atmel Studio 6.0\make\make.exe all 
9
    make: Nothing to be done for `all'.
10
  Done executing task "RunCompilerTask".
11
  Using "RunOutputFileVerifyTask" task from assembly "C:\Program Files (x86)\Atmel\Atmel Studio 6.0\Vs\Compiler.Task.dll".
12
  Task "RunOutputFileVerifyTask"
13
        Program Memory Usage   :  232 bytes   22,7 % Full
14
        Data Memory Usage     :  0 bytes   0,0 % Full
15
  Done executing task "RunOutputFileVerifyTask".
16
Done building target "CoreBuild" in project "Fototranse.cproj".
17
Target "PostBuildEvent" skipped, due to false condition; ('$(PostBuildEvent)' != '') was evaluated as ('' != '').
18
Target "Build" in file "C:\Program Files (x86)\Atmel\Atmel Studio 6.0\Vs\Avr.common.targets" from project "C:\Users\Marodeur\Documents\Atmel Studio\Fototranse\Fototranse\Fototranse.cproj" (entry point):
19
Done building target "Build" in project "Fototranse.cproj".
20
Done building project "Fototranse.cproj".
21
22
Build succeeded.
23
========== Build: 1 succeeded or up-to-date, 0 failed, 0 skipped ==========

von Marodeur (Gast)


Lesenswert?

Aber danke, das war genau die richtige Antwort.
Nachdem ich von Hand nachgeschaut hab ich rausgefunden dass das 
eigentlich
"TIM0_COMPA_vect" heißen muss.
Nu gehts auch.
Warum der Compiler aber nicht gemeckert hat versteh ich nicht.

von Stefan E. (sternst)


Lesenswert?

Marodeur schrieb:
> Warum der Compiler aber nicht gemeckert hat versteh ich nicht.

Die Warnung kommt natürlich nur, wenn die Datei auch wirklich compiliert 
wird. Das passiert aber nicht, wenn du nach einem erfolgreichen Build 
bei unveränderter Datei nochmal auf “Build“ klickst (wie bei obigen 
Output). Ändere den Namen und probiere es dann nochmal, und du wirst 
eine Warnung bekommen.

von Marodeur (Gast)


Lesenswert?

Ah ok, jetzt hab ichs gefunden.
Ist aber auch gut versteckt.
Da hätte man dem Compiler aber auch ruhig mal ein Flag oder sowas 
spendieren können.

von Stefan E. (sternst)


Lesenswert?

Benutze -Werror. Das macht es dir unmöglich, nochmal irgendeine Warnung 
zu übersehen.

von lll (Gast)


Lesenswert?

Oder vor jedem build ein make clean ausführen, dann sind alle erzeugten 
Dateien gelöscht und alles wird neu gebaut :-D

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.