Hans-joachim Beck schrieb:
> OK, also es ist so - ein <avr/interrupt.h> behebt das Problem.
> Mich wundert nur, warum das der Cmopiler nicht erkennt,
> denn er sollte eigentlich TIMER0_COMPB_vect nicht auflösen können.
Und wass soll er da für einen Fehler bringen? TIMER0_COMPB_vect wird
definiert in avr/io.h und der Compiler kann nicht wissen, daß ISR als
Makro aus einem nicht-includeten Header angedacht ist...
Wenn du
1 | #include <avr/io.h>
|
2 |
|
3 | ISR (TIMER0_COMPB_vect)
|
4 | {
|
5 | }
|
durch den Päprozessor schichst, bleibt folgendes davon über:
Dies definiert also eine int- Funktion mit einem int-Parameter:
1 | int ISR (int __vector_15)
|
2 | {
|
3 | }
|
was dir auch die Compilerwarnungen flüstern:
1 | warning: return type defaults to 'int' [-Wreturn-type]
|
2 | In function 'ISR':
|
3 | warning: type of '__vector_15' defaults to 'int' [-Wmissing-parameter-type]
|
4 | warning: unused parameter '__vector_15' [-Wunused-parameter]
|
5 | warning: control reaches end of non-void function [-Wreturn-type]
|
Um sowas zu vermeiden, compiliere zB mit -Werror=strict-prototypes
-Werror=return-type -Werror=missing-parameter-type und du bekommst nicht
einen Fehler, sondern gleich vier
1 | error: return type defaults to 'int' [-Werror=return-type]
|
2 | error: function declaration isn't a prototype [-Werror=strict-prototypes]
|
3 | In function 'ISR':
|
4 | error: type of '__vector_15' defaults to 'int' [-Werror=missing-parameter-type]
|
5 | warning: unused parameter '__vector_15' [-Wunused-parameter]
|
6 | error: control reaches end of non-void function [-Werror=return-type]
|