Error on C18 port?
Hello all,
I´ve been dealing some time with different errors in FreeRTOS with C18 port.
Looking in the port i´ve found this:
#pragma code high_vector=0x08
static void prvLowInterrupt( void )
{
/* Was the interrupt the tick? */
if( PIR1bits.CCP1IF )
{
_asm
goto prvTickISR
_endasm
}
/* Was the interrupt a byte being received? */
if( PIR1bits.RCIF )
{
_asm
goto vSerialRxISR
_endasm
}
/* Was the interrupt the Tx register becoming empty? */
if( PIR1bits.TXIF )
{
if( PIE1bits.TXIE )
{
_asm
goto vSerialTxISR
_endasm
}
}
}
#pragma code
In accordance with C18 manual the pragma code place obviously code in the specified direction, but in the case of the interrupt it´s mean to be used just for a computed goto to the isr routine because the next positions (0x18) are mean for the low interrupt service.
I think the previous code is writing beyond his range, also if you want to use priority level it definitely wont fit.
Here I post a modified example:
#pragma code high_vector=0x08
static void highIsr( void )
{
_asm
goto prvHighInterrupt
_endasm
}
#pragma code
#pragma code low_vector=0x18
static void lowIsr( void )
{
_asm
goto prvLowInterrupt
_endasm
}
#pragma code
#pragma interrupt prvHighInterrupt //save=PRODH, PRODL, TABLAT, section(".tmpdata")
static void prvHighInterrupt( void )
{
/*Timer Related Interrupt*/
if( PIR1bits.CCP1IF )
{
_asm
goto prvTickISR
_endasm
}
}
#pragma interruptlow prvLowInterrupt //save=PRODH, PRODL, TABLAT, section(".tmpdata")
static void prvLowInterrupt( void )
{
/* Was the interrupt a byte being received? */
if( PIR1bits.RCIF )
{
_asm
goto vSerialRxISR
_endasm
}
/* Was the interrupt the Tx register becoming empty? */
if( PIR1bits.TXIF )
{
if( PIE1bits.TXIE )
{
_asm
goto vSerialTxISR
_endasm
}
}
}
Two more method def are required prvHighInterrupt and prvLowInterrupt.
Regards
Error on C18 port?
PIC18? – eek.
Error on C18 port?
Yeap, PIC18 with MCC18.
Does anyone have a newer working example for this micro?
I mean MCC18 3.2 FreeRTOS 5.0.4 and a new micro (like PIC18F2620).
I can not manage to get it working properly with this micro and compiler.
In some point I always get a stack under-over flow reset or a read over a wrong code place.