Forum: Compiler & IDEs XC8 - Vorabdeklaration nicht anerkannt??


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Rudi R. (microwitsch)


Bewertung
0 lesenswert
nicht lesenswert
[c]:0:: error: (499) undefined symbol:
  _myTimerIsr(dist/default/production\Interrupt_TMR1.X.production.o)
make[2]: *** [dist/default/production/Interrupt_TMR1.X.production.hex] 
Error 1
make[1]: *** [.build-conf] Error 2
make: *** [.build-impl] Error 2 [c]



Hi,

Ich habe alles nach einem Beispiel eingegeben und hier will er bei"void 
myTimerISR(void)" nicht weiterarbeiten.

Die Deklaration steht aber in maib.c über "void main..." so wie man es 
machen sollte!?

Woran kann das denn liegen?
Wo muss ich vielleicht im einem Hexfile noch eine Definition zufügen?

von Teo (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Welche Version?
CX8 hatte meiner Erfahrung nach, Probleme mit der Implementierung von 
C99 und hat solche Fehler produziert. Sollte aber seit der 
vorletzten(?) Version behoben sein.

von Andras H. (kyrk)


Bewertung
0 lesenswert
nicht lesenswert
extern void asdf(void); eventuell?

von Rudi R. (microwitsch)


Bewertung
0 lesenswert
nicht lesenswert
Teo schrieb:
> Welche Version?
> CX8 hatte meiner Erfahrung nach, Probleme mit der Implementierung von
> C99 und hat solche Fehler produziert. Sollte aber seit der
> vorletzten(?) Version behoben sein.

Jou, das kann ich mir gut vorstellen,ich habe nämlich schon 
gedowngraded.
Ich habe jetzt v 2.31 und das Beispiel was ich gerade durch wollte wurde 
mit 1.31 betrieben.

Ich glaube ich hau mir wieder Mplab 4.15 rauf und nehme dann auch die 
alte Version von CX8..die meisten Beispile aus die man im Internet 
lernen könnte sind natürlich auch auf 8Bit-MCUs basierend.
Mir reicht sicherlich auch eine 8-Bitter für das was ich so vorhabe.
Ich habe übrigens den PIC16F18877...der kann schon ne ganze Menge...

von Rudi R. (microwitsch)


Bewertung
-1 lesenswert
nicht lesenswert
Andras H. schrieb:
> extern void asdf(void); eventuell?

Hi,
was meinste denn damit??

von Teo (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Rudi R. schrieb:
> Ich glaube ich hau mir wieder Mplab 4.15 rauf und

Blödsinn
Zeig mal (hoch laden) den gesamten Code!

von Nop (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Rudi R. schrieb:
> [c]:0:: error: (499) undefined symbol:
>   _myTimerIsr
[...]
> "void myTimerISR(void)"

Da ist ein Unterstrich, und außerdem ist C case-sensitiv.

von Rudi R. (microwitsch)


Bewertung
0 lesenswert
nicht lesenswert
Nop schrieb:
>> [c]:0:: error: (499) undefined symbol:
>>   _myTimerIsr
> [...]
>> "void myTimerISR(void)"
>
> Da ist ein Unterstrich, und außerdem ist C case-sensitiv.

Der Strich ist im Orginal nicht, das macht hier der Compiler dazu!?
ich habe im Übrigen auch ein Problem mit der " #include <alloca.h> "
Wenn ich der Problemmeldung mit " #include <xc.h> * folge!?
Die kann der Compiler hier nicht finden??

Was ist das für ein Tool <alloca.h> ?

von Nop (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Rudi R. schrieb:

> Der Strich ist im Orginal nicht, das macht hier der Compiler dazu!?

Aber die Groß-Kleinschreibung wird er ja wohl nicht auch noch verändern.

> Die kann der Compiler hier nicht finden??

Dann sind Deine Pfade wohl nicht korrekt.

> Was ist das für ein Tool <alloca.h> ?

Zur Allokation von dynamischen Speicher auf dem Stack.

Viel mehr kann man dazu nicht sagen, weil Dein Code halt geheim ist.

von Rudi R. (microwitsch)


Bewertung
0 lesenswert
nicht lesenswert
Nop schrieb:
> Viel mehr kann man dazu nicht sagen, weil Dein Code halt geheim ist.
1
void myTimerISR(void);
2
3
void main(void)
4
{
5
            // initialize the device
6
    SYSTEM_Initialize();
7
    TMR1_SetInterruptHandler(myTimerISR);    //Define interrupt Handler
8
9
            // When using interrupts, you need to set the Global and Peripheral Interrupt Enable bits
10
            // Use the following macros to:
11
12
             // Enable the Global Interrupts
13
    INTERRUPT_GlobalInterruptEnable();
14
15
            // Enable the Peripheral Interrupts
16
    INTERRUPT_PeripheralInterruptEnable();
17
    
18
    void myTimerISR(void);
19
    {
20
     IO_RA2_Toggle();
21
    }
22
            // Disable the Global Interrupts
23
            //INTERRUPT_GlobalInterruptDisable();
24
25
            // Disable the Peripheral Interrupts
26
            //INTERRUPT_PeripheralInterruptDisable();
27
28
    while (1)
29
     {
30
            // Add your application code    
31
     }
32
   }
33
    
34
 /**
35
 End of File
36
 */

Hier issa der main.c...doch was soll da jetzt zu finden sein?
Meine Deklaration gefällt dem Compiler ja leider nicht. :(

Zur Funktion: Timer 1-Interrupt soll eine LED toggeln.

: Bearbeitet durch Moderator
von Nick M. (Gast)


Bewertung
-1 lesenswert
nicht lesenswert
Rudi R. schrieb:
> void myTimerISR(void);
>     {
>      IO_RA2_Toggle();
>     }

Was soll denn das? Mitten im main? Ist das Pascal?

von Nop (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Rudi R. schrieb:

> Meine Deklaration gefällt dem Compiler ja leider nicht. :(

Mitten in der main() findet sich das hier:
1
void myTimerISR(void);
2
{
3
 IO_RA2_Toggle();
4
}

Du kannst in C keine Funktion in einer anderen Funktion schachteln, und 
außerdem gehört das Semikolon nur beim Prototypen hinter die Funktion, 
nicht bei deren Definition.

von Rudi R. (microwitsch)


Bewertung
0 lesenswert
nicht lesenswert
Nick M. schrieb:
> Was soll denn das? Mitten im main? Ist das Pascal?

Die Deklaration dafür steht oben bei main!?
Also muss auch die Funktion im Programm aufgerufen werden oder?

von Nop (Gast)


Bewertung
2 lesenswert
nicht lesenswert
Rudi R. schrieb:

> Also muss auch die Funktion im Programm aufgerufen werden oder?

Befaß Dich mal mit den Grundlagen von C, so hat das keinen Zweck.

von Nick M. (Gast)


Bewertung
-1 lesenswert
nicht lesenswert
Rudi R. schrieb:
> Also muss auch die Funktion im Programm aufgerufen werden oder?

Nur, das ist kein Aufruf, sondern nur wieder eine Deklaration.
Irgendwie eine mir unbekannte afterwards-forward? Strichpunkte sind 
übrigens ein wichtiger Teil der C-Syntax.

Grundlagen! Buch kaufen, durcharbeiten.

von 2⁵ (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Probier das mal: (und ja, du musst die C-Grundlagen lernen!)
(Aber: Da fehlen noch die includes. Also ein paar Zeilen #include <...> 
vorneweg. Ich kenn mich aber mit dem PICs nicht so aus...)
1
void myTimerISR(void)
2
{
3
    IO_RA2_Toggle();
4
}
5
6
void main(void)
7
{
8
    // initialize the device
9
    SYSTEM_Initialize();
10
    TMR1_SetInterruptHandler(myTimerISR);    //Define interrupt Handler
11
12
    // When using interrupts, you need to set the Global and Peripheral Interrupt Enable bits
13
    // Use the following macros to:
14
15
    // Enable the Global Interrupts
16
    INTERRUPT_GlobalInterruptEnable();
17
18
    // Enable the Peripheral Interrupts
19
    INTERRUPT_PeripheralInterruptEnable();
20
21
    // Disable the Global Interrupts
22
    //INTERRUPT_GlobalInterruptDisable();
23
24
    // Disable the Peripheral Interrupts
25
    //INTERRUPT_PeripheralInterruptDisable();
26
27
    while (1)
28
    {
29
            // Add your application code
30
    }
31
}

von Rudi R. (microwitsch)


Bewertung
0 lesenswert
nicht lesenswert
2⁵ schrieb:
> Probier das mal: (und ja, du musst die C-Grundlagen lernen!)
> (Aber: Da fehlen noch die includes. Also ein paar Zeilen #include <...>
> vorneweg. Ich kenn mich aber mit dem PICs nicht so aus...)

Ich bin doch aber nach einem Beispiel von Mikrochip gegangen,welchen man 
hier auch einsehen 
kann:[[https://microchip.wikidot.com/projects:mcu1101-project-10]]

von John Doe (Gast)


Bewertung
2 lesenswert
nicht lesenswert
Du musst nicht nur C lernen, sondern auch Lesen...

Unter Completed main.c steht doch eine funktionierende Version.

von Rudi R. (microwitsch)


Bewertung
0 lesenswert
nicht lesenswert
Hey ich glaub es nicht! :) nach „2 hoch 5“ (im Iphone mal schlecht mit 
hoch 5 einzugeben)

Es funktioniert!!!

Und guckt euch mal nun das Beispiel bei Microchip bitte an!?
Was machen die denn da bitte mit mir und uns!??
Man man man...wenn man selbst da nicht alles glauben darf!?

Ich danke ihnen Herr 2 hoch 5!Sie haben mir sehr geholfen...bin ich 
wieder ein kleines Stück schlauer geworden.

Und Microchip ist doof...sorry...;o)

von Nick M. (Gast)


Bewertung
-1 lesenswert
nicht lesenswert
Rudi R. schrieb:
> Und Microchip ist doof...sorry...;o)

So richtig doof bist aber du.
Lies nochmal den source von Absatz 11 durch.

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]
  • [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.

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