XC8 - Vorabdeklaration nicht anerkannt??

#6591536
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?
#6591642
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...
#6591672
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> ?
Gast #6591675
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.
#6591693
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.
Gast #6591704
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.
Gast #6591730
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.
Gast #6591779
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
}
#6591844
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)

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren