mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Assembly Error: ISRs undefniert (Symbol undefined)


Autor: Andreas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Andreas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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...

Autor: Stefan B. (stefan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielleicht gibt es nicht so viele CodeVisionAVR C-User oder die sind 
alle in Meetings oder die vermissen ein nachvollziehbares Projekt in 
Quellcodeform.

Autor: Andreas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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...

/*-spi.c---------------------------------------------------------------*/
#include "spi.h"

void InitSPI(void)
{
    // SPI initialization
    // SPI Type: Master
    // SPI Clock Rate: 2*1000,000 kHz
    // SPI Clock Phase: Cycle Half
    // SPI Clock Polarity: Low
    // SPI Data Order: MSB First
    SPCR=0xD1;
    SPSR=0x01;
    
    ClearSPI_InterruptFlag();
}
void ClearSPI_InterruptFlag(void)
{
    // Clear the SPI interrupt flag
    #asm
        in   r30,spsr
        in   r30,spdr
    #endasm
}


// SPI interrupt service routine
ISR(SPI_STC)
{
    unsigned char data;
    data = SPDR;
    // ..
}

/*-common.h-Auszug------------------------------------------------------*/
#include "macro.h"
#include "stdint.h"
#include "avr_compiler.h"

/*-main.c---------------------------------------------------------------*/
#include "common.h"
#include "init.h"
#include "timer.h"
#include "spi.h"
#include "sw_timer.h"

void init(void);
void main(void);

void init(void)
{
    //Init hardware/system
    InitSystem();
    InitPorts();
    
    InitTimer0();
    InitTimer1();
    InitTimer2();
    InitTimer3();
    
    InitExternalInterrupts();
    InitTimerInterrupts();

    InitUART1();
    InitSPI();
}

void main(void)
{
    init();
       
    // Global enable interrupts
    sei();
    
    while (1)
    {
        ;
    };
}

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> // 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...

Autor: Andreas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
gut, dann versteh ich aber folgendes Marco (in avr_compiler.h) / bzw. 
dessen Sinn nicht:
#define ISR(vec) interrupt[vec] void handler_##vec(void)

folglich wird mir folgende Fehlermeldung für
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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.