Quality RTOS & Embedded Software

 Real time embedded FreeRTOS RSS feed 
Quick Start Supported MCUs PDF Books Trace Tools Ecosystem TCP & FAT




Loading

Can usTaskCheckFreeStackSpace() be right?

Posted by JohnnyBosc on October 21, 2008
I'm a tad confused abt. the usTaskCheckFreeStackSpace() function in task.c. Allow me to quote it in full (sry 'bout that) from the provided source code:

unsigned portSHORT usTaskCheckFreeStackSpace( const unsigned portCHAR * pucStackByte )
{
register unsigned portSHORT usCount = 0;

while( *pucStackByte == tskSTACK_FILL_BYTE )
{
pucStackByte -= portSTACK_GROWTH;
usCount++;
}

usCount /= sizeof( portSTACK_TYPE );

return usCount;
}


Now, on a PIC32 MCU portSTACK_GROWTH is = -4, i.e. every iteration in the while() loop will increase the tested address by 4 -- looks very much like we're counting 32-bit integers, doesn't it?

However, on exiting the while() loop the count of 32-bit integers in usCount is divided by sizeof(portSTACK_TYPE)!

In the PIC32 port, sizeof(portSTACK_TYPE) is = 4. In other words, I end up with a stack high water mark that is 4 TIMES TOO SMALL. This is borne out by setting a breakpoint in usTaskCheckFreeStackSpace() and just doing a memory dump of the memory being scanned.

Am I missing something really silly here, or is this a bona fide bug?

RE: Can usTaskCheckFreeStackSpace() be right?

Posted by Richard on October 21, 2008
Yes it 'was' a bug. It got fixed in the SVN copy a few days ago but is not yet in the download.

Apologies for any inconvenience caused.

Regards.

RE: Can usTaskCheckFreeStackSpace() be right?

Posted by JohnnyBosc on October 21, 2008
Thanks for the practically instantaneous answer.

Now, if I'd only bothered to read grahamfclark's post from just a couple of days ago...

RE: Can usTaskCheckFreeStackSpace() be right?

Posted by JohnnyBosc on October 21, 2008
Richard,

While you're at it can you confirm (or dis-) that the various forms of the macro taskCHECK_FOR_STACK_OVERFLOW() in task.c will in fact detect a stack *underflow* when portSTACK_GROWTH > 0? Granted, not that I know about a whole lot of CPU:s where the stack grows "upwards".

RE: Can usTaskCheckFreeStackSpace() be right?

Posted by Richard on October 21, 2008
As per your original question - the current SVN version handles cases where the stack grows up from low memory (portSTACK_GROWTH > 0), but the current release version doesn't.

The SVN repository is public (read only).

Regards.


[ Back to the top ]    [ About FreeRTOS ]    [ Sitemap ]    [ ]




Copyright (C) Amazon Web Services, Inc. or its affiliates. All rights reserved.

Latest News

FreeRTOS kernel V10 is available for immediate download. Now MIT licensed.


FreeRTOS Partners

ARM Connected RTOS partner for all ARM microcontroller cores

IAR Partner

Microchip Premier RTOS Partner

RTOS partner of NXP for all NXP ARM microcontrollers

STMicro RTOS partner supporting ARM7, ARM Cortex-M3, ARM Cortex-M4 and ARM Cortex-M0

Texas Instruments MCU Developer Network RTOS partner for ARM and MSP430 microcontrollers

OpenRTOS and SafeRTOS