<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
<meta name="Generator" content="Microsoft Exchange Server">
<!-- converted from rtf -->
<style><!-- .EmailQuote { margin-left: 1pt; padding-left: 4pt; border-left: #800000 2px solid; } --></style>
</head>
<body>
<font face="Calibri" size="2"><span style="font-size:11pt;">
<div>Hi everyone,</div>
<div> </div>
<div>I use RTEMS on a MicroBlaze processor (implemented in a Spartan6 FPGA, on a SP605 evaluation kit), and I can’t create two tasks. I have tried this simple code :</div>
<div> </div>
<div><font face="Courier New" size="3"><span style="font-size:12pt;">rtems_task Init(</span></font></div>
<div><font face="Courier New" size="3"><span style="font-size:12pt;">  rtems_task_argument ignored</span></font></div>
<div><font face="Courier New" size="3"><span style="font-size:12pt;">)</span></font></div>
<div><font face="Courier New" size="3"><span style="font-size:12pt;">{   </span></font></div>
<div><font face="Courier New" size="3"><span style="font-size:12pt;">  rtems_status_code status_rtems;</span></font></div>
<div><font face="Courier New" size="3"><span style="font-size:12pt;"> </span></font></div>
<div><font face="Courier New" size="3"><span style="font-size:12pt;">  printf("\n*** Test begins *** \n\n");</span></font></div>
<div><font face="Courier New" size="3"><span style="font-size:12pt;"> </span></font></div>
<div><font face="Courier New" size="3"><span style="font-size:12pt;">  Task_name[ 1 ] = rtems_build_name( 'T', 'A', '1', ' ' );</span></font></div>
<div><font face="Courier New" size="3"><span style="font-size:12pt;">  Task_name[ 2 ] = rtems_build_name( 'T', 'A', '2', ' ' );</span></font></div>
<div><font face="Courier New" size="3"><span style="font-size:12pt;"> </span></font></div>
<div><font face="Courier New" size="3"><span style="font-size:12pt;">  /* Creating and executing task 1 */</span></font></div>
<div><font face="Courier New" size="3"><span style="font-size:12pt;">  status_rtems = rtems_task_create(</span></font></div>
<div><font face="Courier New" size="3"><span style="font-size:12pt;">                                   Task_name[ 1 ], 1, RTEMS_MINIMUM_STACK_SIZE * 2, RTEMS_DEFAULT_MODES,</span></font></div>
<div><font face="Courier New" size="3"><span style="font-size:12pt;">                                   RTEMS_DEFAULT_ATTRIBUTES, &Task_id[ 1 ]</span></font></div>
<div><font face="Courier New" size="3"><span style="font-size:12pt;">                                   );</span></font></div>
<div><font face="Courier New" size="3"><span style="font-size:12pt;">  printf("\n At the end of task create 1, status_rtems = %d\n",(int)status_rtems);</span></font></div>
<div><font face="Courier New" size="3"><span style="font-size:12pt;"> </span></font></div>
<div><font face="Courier New" size="3"><span style="font-size:12pt;">  status_rtems = rtems_task_start( Task_id[ 1 ], print1, 1 );</span></font></div>
<div><font face="Courier New" size="3"><span style="font-size:12pt;">  printf("\n At the end of task start 1, status_rtems = %d\n",(int)status_rtems);</span></font></div>
<div><font face="Courier New" size="3"><span style="font-size:12pt;"> </span></font></div>
<div><font face="Courier New" size="3"><span style="font-size:12pt;">  /* Creating and executing task 2 */</span></font></div>
<div><font face="Courier New" size="3"><span style="font-size:12pt;">  status_rtems = rtems_task_create(</span></font></div>
<div><font face="Courier New" size="3"><span style="font-size:12pt;">                                    Task_name[ 2 ], 1, RTEMS_MINIMUM_STACK_SIZE * 2, RTEMS_DEFAULT_MODES,</span></font></div>
<div><font face="Courier New" size="3"><span style="font-size:12pt;">                                    RTEMS_DEFAULT_ATTRIBUTES, &Task_id[ 2 ]</span></font></div>
<div><font face="Courier New" size="3"><span style="font-size:12pt;">                                    );</span></font></div>
<div><font face="Courier New" size="3"><span style="font-size:12pt;">  printf("\n At the end of task create 2, status_rtems = %d\n",(int)status_rtems);</span></font></div>
<div><font face="Courier New" size="3"><span style="font-size:12pt;"> </span></font></div>
<div><font face="Courier New" size="3"><span style="font-size:12pt;">  status_rtems = rtems_task_start( Task_id[ 2 ], print2, 1 );</span></font></div>
<div><font face="Courier New" size="3"><span style="font-size:12pt;">  printf("\n At the end of task start 2, status_rtems = %d\n",(int)status_rtems);</span></font></div>
<div><font face="Courier New" size="3"><span style="font-size:12pt;"> </span></font></div>
<div><font face="Courier New" size="3"><span style="font-size:12pt;">  rtems_task_delete(RTEMS_SELF);</span></font></div>
<div><font face="Courier New" size="3"><span style="font-size:12pt;">}</span></font></div>
<div><font face="Courier New" size="3"><span style="font-size:12pt;"> </span></font></div>
<div><font face="Courier New" size="3"><span style="font-size:12pt;">rtems_task print1(rtems_task_argument unused){</span></font></div>
<div><font face="Courier New" size="3"><span style="font-size:12pt;">  printf("\nTask 1 is executing !\n");</span></font></div>
<div><font face="Courier New" size="3"><span style="font-size:12pt;"> </span></font></div>
<div><font face="Courier New" size="3"><span style="font-size:12pt;">  while(1){}</span></font></div>
<div><font face="Courier New" size="3"><span style="font-size:12pt;">}</span></font></div>
<div><font face="Courier New" size="3"><span style="font-size:12pt;"> </span></font></div>
<div><font face="Courier New" size="3"><span style="font-size:12pt;">rtems_task print2(rtems_task_argument unused){</span></font></div>
<div><font face="Courier New" size="3"><span style="font-size:12pt;">  printf("\nTask 2 is executing !\n");</span></font></div>
<div><font face="Courier New" size="3"><span style="font-size:12pt;"> </span></font></div>
<div><font face="Courier New" size="3"><span style="font-size:12pt;">  while(1){}</span></font></div>
<div><font face="Courier New" size="3"><span style="font-size:12pt;">}</span></font></div>
<div><font face="Times New Roman" size="3"><span style="font-size:12pt;"> </span></font></div>
<div><font face="Times New Roman" size="3"><span style="font-size:12pt;"> </span></font></div>
<div><font size="3"><span style="font-size:12pt;">And in my terminal I’ve got this : </span></font></div>
<div><font face="Times New Roman" size="3"><span style="font-size:12pt;"> </span></font></div>
<div><font face="Times New Roman" size="3"><span style="font-size:12pt;"> </span></font></div>
<div><font face="Times New Roman" size="3"><span style="font-size:12pt;"> </span></font></div>
<div><font face="Courier New" size="3"><span style="font-size:12pt;">*** Test begins ***</span></font></div>
<div><font face="Courier New" size="3"><span style="font-size:12pt;"> </span></font></div>
<div><font face="Courier New" size="3"><span style="font-size:12pt;">At the end of task create 1, status_rtems = 0</span></font></div>
<div><font face="Courier New" size="3"><span style="font-size:12pt;"> </span></font></div>
<div><font face="Courier New" size="3"><span style="font-size:12pt;">At the end of task start 1, status_rtems = 0</span></font></div>
<div><font face="Courier New" size="3"><span style="font-size:12pt;"> </span></font></div>
<div><font face="Courier New" size="3"><span style="font-size:12pt;">At the end of task create 1, status_rtems = 13</span></font></div>
<div><font face="Courier New" size="3"><span style="font-size:12pt;"> </span></font></div>
<div><font face="Courier New" size="3"><span style="font-size:12pt;">At the end of task start 1, status_rtems = 14</span></font></div>
<div><font face="Courier New" size="3"><span style="font-size:12pt;"> </span></font></div>
<div><font face="Courier New" size="3"><span style="font-size:12pt;">Task 1 is executing </span></font></div>
<div><font face="Times New Roman" size="3"><span style="font-size:12pt;"> </span></font></div>
<div><font face="Times New Roman" size="3"><span style="font-size:12pt;"> </span></font></div>
<div><font size="3"><span style="font-size:12pt;">As you can see, task 1 is created, and executes fine. But the creating of task 2 return the status : <font face="Courier New" size="2"><span style="font-size:10pt;">RTEMS_UNSATISFIED</span></font><font face="Liberation Serif">
- not enough memory for stack/FP context</font><font face="Liberation Serif">.</font></span></font></div>
<div><font size="3"><span style="font-size:12pt;">However, I have plenty of space left on my RTEMS Workspace, and I do not use floating point context.</span></font></div>
<div><font size="3"><span style="font-size:12pt;">Going deeper with GDB, I have found that is the allocation in the heap that goes bad :</span></font></div>
<div><font size="3"><span style="font-size:12pt;">In function _<i>Heap_Allocate_</i><i>aligned_with</i><i>_boundary</i> (in cpukit/score/src/heapallocate.c), the Heap_Block “block” and “free_list_tail” have their fields <i>next </i>and <i>prev</i> pointing
to themself. </span></font></div>
<div><font face="Times New Roman" size="3"><span style="font-size:12pt;"> </span></font></div>
<div><font size="3"><span style="font-size:12pt;">I also tried to delete task 1 after the creation (the deleting was successful), but I have got the same error when creating task 2.</span></font></div>
<div><font face="Times New Roman" size="3"><span style="font-size:12pt;"> </span></font></div>
<div><font size="3"><span style="font-size:12pt;">As anyone of you has an explication ?</span></font></div>
<div><font size="3"><span style="font-size:12pt;"> </span></font></div>
<div><font size="3"><span style="font-size:12pt;">Thanks a lot,</span></font></div>
<div><font size="3"><span style="font-size:12pt;">Dimitri Tuaz</span></font></div>
<div><font face="Times New Roman" size="3"><span style="font-size:12pt;"> </span></font></div>
<div><font face="Times New Roman" size="3"><span style="font-size:12pt;"> </span></font></div>
<div><font face="Times New Roman" size="3"><span style="font-size:12pt;"> </span></font></div>
<div> </div>
<div> </div>
</span></font>
</body>
</html>

<table><tr><td bgcolor=#ffffff><font color=#000000><pre>***************************************************************
Ce courriel (incluant ses eventuelles pieces jointes) peut contenir des informations confidentielles et/ou protegees ou dont la diffusion est restreinte. Si vous avez recu ce courriel par erreur, vous ne devez ni le copier, ni l'utiliser, ni en divulguer le contenu a quiconque. Merci d'en avertir immediatement l'expediteur et d'effacer ce courriel de votre systeme. Airbus Defence and Space et les sociétés Airbus Group declinent toute responsabilite en cas de corruption par virus, d'alteration ou de falsification de ce courriel lors de sa transmission par voie electronique.
This email (including any attachments) may contain confidential and/or privileged information or information otherwise protected from disclosure. If you are not the intended recipient, please notify the sender immediately, do not copy this message or any attachments and do not use it for any purpose or disclose its content to any person, but delete this message and any attachments from your system. Airbus Defence and Space and Airbus Group companies disclaim any and all liability if this email transmission was virus corrupted, altered or falsified. 
---------------------------------------------------------------------
Airbus Defence and Space SAS (393 341 516 RCS Versailles) - Capital: 16.587.728 EUR - Siege social: 51-61 Route de Verneuil, 78130 Les Mureaux, France</pre></font></td></tr></table>