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


von Rudi R. (microwitsch)


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)


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)


Lesenswert?

extern void asdf(void); eventuell?

von Rudi R. (microwitsch)


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)


Lesenswert?

Andras H. schrieb:
> extern void asdf(void); eventuell?

Hi,
was meinste denn damit??

von Teo (Gast)


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)


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)


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)


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)


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)


Lesenswert?

Rudi R. schrieb:
> void myTimerISR(void);
>     {
>      IO_RA2_Toggle();
>     }

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

von Nop (Gast)


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)


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)


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)


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)


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)


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)


Lesenswert?

Du musst nicht nur C lernen, sondern auch Lesen...

Unter Completed main.c steht doch eine funktionierende Version.

von Rudi R. (microwitsch)


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)


Lesenswert?

Rudi R. schrieb:
> Und Microchip ist doof...sorry...;o)

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

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.