Hallo beisammen, Infos vorab: CodeVisionAVR / C Jede ISR wird nach der Kompilierung als undefined bezeichnet, z.B. Error: D:\...asm(1071) Undefined symbol: _usart1_rx_isr ISR (z.B. in uart.c): interrupt [USART1_RXC] void usart1_rx_isr(void){...} ebenso wird main nicht gefunden, obwohl es vorhanden ist. avr_compiler.h ist inkludiert... Woran kann dies liegen? MfG
Mehr Infos? bin ich in ein Fettnäpfchen getreten? Kann leider nichts verständliches zu der Fehlermeldung finden. Der Ordner für die Libraries ist richtig...
Vielleicht gibt es nicht so viele CodeVisionAVR C-User oder die sind alle in Meetings oder die vermissen ein nachvollziehbares Projekt in Quellcodeform.
Das ganze Projekt würde verwirren ;) Ich verwende einfach mal das SPI Modul als Bsp. Alles absolut banal, evtl. eine Option/include welche/s ich vergessen hab? Leider aber nicht so einfach... fast ein ganzer Tag ist schon rum...
1 | /*-spi.c---------------------------------------------------------------*/
|
2 | #include "spi.h" |
3 | |
4 | void InitSPI(void) |
5 | {
|
6 | // SPI initialization
|
7 | // SPI Type: Master
|
8 | // SPI Clock Rate: 2*1000,000 kHz
|
9 | // SPI Clock Phase: Cycle Half
|
10 | // SPI Clock Polarity: Low
|
11 | // SPI Data Order: MSB First
|
12 | SPCR=0xD1; |
13 | SPSR=0x01; |
14 | |
15 | ClearSPI_InterruptFlag(); |
16 | }
|
17 | void ClearSPI_InterruptFlag(void) |
18 | {
|
19 | // Clear the SPI interrupt flag
|
20 | #asm
|
21 | in r30,spsr |
22 | in r30,spdr |
23 | #endasm
|
24 | }
|
25 | |
26 | |
27 | // SPI interrupt service routine
|
28 | ISR(SPI_STC) |
29 | {
|
30 | unsigned char data; |
31 | data = SPDR; |
32 | // ..
|
33 | }
|
34 | |
35 | /*-common.h-Auszug------------------------------------------------------*/
|
36 | #include "macro.h" |
37 | #include "stdint.h" |
38 | #include "avr_compiler.h" |
39 | |
40 | /*-main.c---------------------------------------------------------------*/
|
41 | #include "common.h" |
42 | #include "init.h" |
43 | #include "timer.h" |
44 | #include "spi.h" |
45 | #include "sw_timer.h" |
46 | |
47 | void init(void); |
48 | void main(void); |
49 | |
50 | void init(void) |
51 | {
|
52 | //Init hardware/system
|
53 | InitSystem(); |
54 | InitPorts(); |
55 | |
56 | InitTimer0(); |
57 | InitTimer1(); |
58 | InitTimer2(); |
59 | InitTimer3(); |
60 | |
61 | InitExternalInterrupts(); |
62 | InitTimerInterrupts(); |
63 | |
64 | InitUART1(); |
65 | InitSPI(); |
66 | }
|
67 | |
68 | void main(void) |
69 | {
|
70 | init(); |
71 | |
72 | // Global enable interrupts
|
73 | sei(); |
74 | |
75 | while (1) |
76 | {
|
77 | ;
|
78 | };
|
79 | }
|
> // SPI interrupt service routine > ISR(SPI_STC) Das ist ja auch AVR-GCC-Syntax und nicht CodeVision! Das versteht CodeVision nicht. Schau mal bitte im Manual von CodeVision nach, wie da die Syntax ist! Übrigens steht in Deinem ersten Posting schon ein syntaktisch korrektes Beispiel...
gut, dann versteh ich aber folgendes Marco (in avr_compiler.h) / bzw. dessen Sinn nicht:
1 | #define ISR(vec) interrupt[vec] void handler_##vec(void)
|
folglich wird mir folgende Fehlermeldung für
1 | ISR(TIM3_CAPT) |
ausgegeben: Error: D:\subversion_projects\ppp09\software\q_avr_test\src\gen\files\List\PPP0 9_simulation.asm(1066) Undefined symbol: _handler_28
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.