We are running a survey to help us improve the experience for all of our members. If you see the survey appear, please take the time to tell us about your experience if you can.
I have a product running RTX with 16 tasks
when I started the project I was relaxed about the RAM of the micro (STM32F205ZE) but in a recent code review I decided to look at the RAM usage and clean it up and make it "lean"
so I have a function to Start each task e.g.
void StartTPMTask(void) { #ifdef C_STACK_TEST memset(&TPM_task_stk[0],0xAA,(C_TPM_TASK_STK_SIZE*8)); #endif /*************************************/ if(OS_TPM_Task_id == 0) { OS_TPM_Task_id = os_tsk_create_user(TPM_task,eTask_Priority_TPM,&TPM_task_stk[0],sizeof(TPM_task_stk)); if(OS_TPM_Task_id) { #ifdef C_STACK_TEST AddStackToTest("TPM",OS_TPM_Task_id,&TPM_task_stk[0],C_TPM_TASK_STK_SIZE); #endif } } } <\pre> where as you can see I fill the stack RAM with a known value, that is later then examined when the task it "stopped" and the last thing before shutdown of the system all the stack data is written to a SD card e.g. an example of the print out *************** * Stack Data * 10:54:46 ************* 71.4% Used-00080 Size-00112 ID-02 Battery Monitoring Task 89.3% Used-00800 Size-00896 ID-03 Display Task Task 84.0% Used-01344 Size-01600 ID-04 Data Manager Task 17.2% Used-00088 Size-00512 ID-05 ALARM Task 71.4% Used-01096 Size-01536 ID-06 GSM Task 63.9% Used-00184 Size-00288 ID-07 TPM Task 67.2% Used-00344 Size-00512 ID-08 Can TX Task 64.3% Used-00072 Size-00112 ID-09 GSM Timeout Task 75.0% Used-00072 Size-00096 ID-10 Send Data Timer Task 28.0% Unused Total 5664 unused 1584 I leave the system running for at least 48 hours before I use the data to hopefully try and catch the exceptions where more stack data may be used than normal I feel "safe" only using 80% of the task stack but it grates to see that I roughly don't use 30% of the RAM allocated to stacks How do others go about setting task stack size and what safety margin do you use ?