I am currently running version 7.0.2 on a dsPIC33. We recently upgraded from
version 5.3.1 and aside from slightly more RAM and Flash usage everything seems
OK. We have recently found that when we attempt to get the real time stats on
the tasks we are getting strange results. When we request the stats the first
time, everything seems to work fine. All subsequent requests for the stats returns
0% or <1% CPU usage for all tasks. This code worked perfectly under 5.3.1.
Any suggestions on where to look for the problem?
Thank you
Keith
_____________________________________________________________________________________
You are receiving this email because you elected to monitor this topic or entire forum.
To stop monitoring this topic visit:
https://sourceforge.net/projects/freertos/forums/forum/382005/topic/4831360/unmonitor
To stop monitoring this forum visit:
https://sourceforge.net/projects/freertos/forums/forum/382005/unmonitor
What is the run time stats code? Can you post it?
To start with, I have configGENERATE_RUN_TIME_STATS set to 1 in freeRTOSConfig.h.
Here is the code for setting up the timer, reading the timer, and the timer
interrupt. The code that calculates the stats is in the FreeRTOS code and was
not modified.
[code]void vConfigureTimerForRunTimeStats( void )
{
const unsigned long ulCompareMatch = ( configCPU_CLOCK_HZ / 8 ) / configTICK_RATE_HZ
/ 10;
runTimeStatsTicker = 0;
T4CON = 0;
TMR4 = 0;
PR4 = ( unsigned portSHORT ) ulCompareMatch;
/* Setup timer 1 interrupt priority. */
IPC6bits.T4IP = configKERNEL_INTERRUPT_PRIORITY;
/* Clear the interrupt as a starting condition. */
IFS1bits.T4IF = 0;
/* Enable the interrupt. */
IEC1bits.T4IE = 1;
/* Setup the prescale value. */
T4CONbits.TCKPS0 = 1;
T4CONbits.TCKPS1 = 0;
/* Start the timer. */
T4CONbits.TON = 1;
} // vConfigureTimerForRunTimeStats
// ulGetTimerForRunTimeStats
unsigned long ulGetTimerForRunTimeStats( void )
{
return( runTimeStatsTicker );
} // ulGetTimerForRunTimeStats
// ulGetTimerForRunTimeStats
void __attribute__((__interrupt__, auto_psv)) _T4Interrupt( void )
{
/* Clear the timer interrupt. */
IFS1bits.T4IF = 0;
runTimeStatsTicker++;
} // _T4Interrupt[/code]
Looks ok, I think. Have you checked that _T4Interrupt is actually executing
at the expected frequency?
Yes, That was one of the first things I checked. The interrupt is being triggered
and the runTimeStatsTicker variable is being incremented.
Anyone else have any suggestions? I have hit a wall.