Questions about THD_WORKING_AREA_SIZE

Discussions and support about ChibiOS/RT, the free embedded RTOS.
josesimoes
Posts: 91
Joined: Sat Feb 18, 2017 11:50 am
Has thanked: 43 times
Been thanked: 23 times

Questions about THD_WORKING_AREA_SIZE

Postby josesimoes » Sat May 26, 2018 4:35 pm

Hi,

I would like to understand what exactly fits into the THD_WORKING_AREA_SIZE.
Trying to optimize a project and can't find enough documentation to help on this.
How can one know (or estimate) the proper size for this?

Thanks!

User avatar
Giovanni
Site Admin
Posts: 14444
Joined: Wed May 27, 2009 8:48 am
Location: Salerno, Italy
Has thanked: 1074 times
Been thanked: 921 times
Contact:

Re: Questions about THD_WORKING_AREA_SIZE

Postby Giovanni » Sat May 26, 2018 6:57 pm

Hi,

The parameter is the stack size reserved for the thread. The system then adds:
- Space for a thread_t structure.
- Space for port_intctx and port_extctx structures.
- Space for IRQ servicing, architecture dependent.
- Space for stack alignment enforcing, architecture dependent.

Note that he space for IRQ servicing is modifiable with a PORT option, it is set very conservatively by default, you may trim that down but consider that the required space may change depending on compiler version/settings.

Code: Select all

/**
 * @brief   Per-thread stack overhead for interrupts servicing.
 * @details This constant is used in the calculation of the correct working
 *          area size.
 * @note    In this port this value is conservatively set to 64 because the
 *          function @p chSchDoReschedule() can have a stack frame, especially
 *          with compiler optimizations disabled. The value can be reduced
 *          when compiler optimizations are enabled.
 */
#if !defined(PORT_INT_REQUIRED_STACK) || defined(__DOXYGEN__)
#define PORT_INT_REQUIRED_STACK         64
#endif


Giovanni

josesimoes
Posts: 91
Joined: Sat Feb 18, 2017 11:50 am
Has thanked: 43 times
Been thanked: 23 times

Re: Questions about THD_WORKING_AREA_SIZE

Postby josesimoes » Sat May 26, 2018 7:09 pm

OK got you! I'll look into that piece of code closelly.

What goes into that "thread stack"?
Are there any hints on how to estimate the proper size for it?

Or perhaps a better question would be: how do I know that a var goes into the thread stack and not onto the "regular" stack? ;)

User avatar
Giovanni
Site Admin
Posts: 14444
Joined: Wed May 27, 2009 8:48 am
Location: Salerno, Italy
Has thanked: 1074 times
Been thanked: 921 times
Contact:

Re: Questions about THD_WORKING_AREA_SIZE

Postby Giovanni » Sat May 26, 2018 10:51 pm

Hi,

Each thread has a separate stack, there is no "regular stack", that is the stack of the main thread.

The stack must be large enough to contain all stack frames of functions called by the thread, the worst case depth. If in doubt make it very large, run your program making sure in uses all code paths then measure stack usage using the debug plugin.

Giovanni

josesimoes
Posts: 91
Joined: Sat Feb 18, 2017 11:50 am
Has thanked: 43 times
Been thanked: 23 times

Re: Questions about THD_WORKING_AREA_SIZE

Postby josesimoes » Sat May 26, 2018 11:32 pm

understood! that was very helpful


Return to “ChibiOS/RT”

Who is online

Users browsing this forum: No registered users and 11 guests