Sida 1 av 1

void __interrupt (high_priority) tick(void)

Postat: 20 november 2021, 15:45:08
av tomashag
Jag kör MPLAB X v5.45 och XC8. Om jag skriver som i rubriken så får jag att en varning att kompilatorn ignorerar high_priority, om jag tar bort det så blir det kompileringsfel. Hur ska det stå?

Re: void __interrupt (high_priority) tick(void)

Postat: 20 november 2021, 16:05:38
av TomasL
Det beror väl på vilken processor du kör, även också om det är gratisversionen av XC8 eller den betalda, då det är rätt stor skillnad mellan dessa

Re: void __interrupt (high_priority) tick(void)

Postat: 20 november 2021, 16:13:05
av TomasL
Använder du C90 eller C99 syntax, XC8 kan konfigureras att använda den ena eller den andra, och det ser olika ut beroende på.
Vilken version av XC8

Vilket felmeddelande får du?

Re: void __interrupt (high_priority) tick(void)

Postat: 20 november 2021, 16:19:48
av tomashag
XC8 2.31. Felmeddelande :

anniela3.c:90:6: error: variable has incomplete type 'void'
void __interrupt tick(void)
^
anniela3.c:90:17: error: expected ';' after top level declarator

Hur ser man om man kör C90 3ll3r C99?

Re: void __interrupt (high_priority) tick(void)

Postat: 20 november 2021, 16:28:40
av sodjan
> Om jag skriver som i rubriken...

Sannolikt bättre att fixa ett litet komplett kodexempel som visar problemet.
Då kan den som är intresserad ladda det i sin egen miljö och testa. Det behöver
inte vara just din applikation som sådan, bara ett exempel som visar problemet.
Dock ett komplett exempel som kan kompileras.

Att visa kod genom att lägga det i rubriken är inte speciellt bra eller tydligt.

Re: void __interrupt (high_priority) tick(void)

Postat: 20 november 2021, 16:43:12
av tomashag
Varningsmeddelandet är : anniela3.c:90:: warning: (1421) ignoring argument "high_priority" used by "__interrupt" attribute/specifier.
Koden är :

void __interrupt (high_priority) tick(void)
{
extern byte tick_cntr;

TMR1IF = 0;
TMR1ON = 0;
TMR1L = 0xef;
TMR1H = 0xd8; // 10 msek
TMR1ON = 1; // Starta om ticket
tick_cntr++;
return;
}
Koden fungerar, jag är bara nyfiken varför jag får varningen.

Re: void __interrupt (high_priority) tick(void)

Postat: 20 november 2021, 16:44:48
av TomasL
tomashag skrev: 20 november 2021, 16:19:48 XC8 2.31. Felmeddelande :

anniela3.c:90:6: error: variable has incomplete type 'void'
void __interrupt tick(void)
^
anniela3.c:90:17: error: expected ';' after top level declarator

Hur ser man om man kör C90 3ll3r C99?
Det kallas för CCI-mode, finns under kompilatorns optioner i projektets egenskaper
https://microchipsupport.force.com/s/ar ... and-Issues
https://www.microforum.cc/topic/38-help ... type-void/

Re: void __interrupt (high_priority) tick(void)

Postat: 20 november 2021, 16:46:11
av TomasL
tomashag skrev: 20 november 2021, 16:43:12 Koden fungerar, jag är bara nyfiken varför jag får varningen.
Kan ju vara så att din processor inte stöder prioritet.
Eller att gratisversionen av XC 8 inte stöder det.

Re: void __interrupt (high_priority) tick(void)

Postat: 20 november 2021, 16:47:43
av TomasL
tomashag skrev: 20 november 2021, 16:19:48 XC8 2.31. Felmeddelande :

anniela3.c:90:6: error: variable has incomplete type 'void'
void __interrupt tick(void)
^
anniela3.c:90:17: error: expected ';' after top level declarator

Hur ser man om man kör C90 3ll3r C99?
Du måste ha () efter void __interrupt, dvs
void __interrupt() MyISR(void)

Re: void __interrupt (high_priority) tick(void)

Postat: 20 november 2021, 17:26:31
av tomashag
Jo, då fungerade det utan varning. Tack för hjälpen, TomasL

Re: void __interrupt (high_priority) tick(void)

Postat: 20 november 2021, 17:28:51
av TomasL
inom parentesen kan man ange prioritet om det stöds av processor/kompilator (vilket du hade gjort i det första exemplet), dock kan det vara så att den prioritetsnivån du hade valt inte stöds.