<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"><html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'Console'; font-size:12pt; font-weight:400; font-style:normal;">Hello, all (mainly Joel :-)<br /><br>
I used the following code to stop the running system for "snapshot":<br />--------------------------------<br />inline rtems_id GetSelfTaskId()   {<br />return(_Thread_Executing->Object.id); <br />}<br /><br>
inline void __help_suspend__(Thread_Control *the_thread) {<br />if (GetSelfTaskId() != the_thread->Object.id) <br />     rtems_task_suspend(the_thread->Object.id);<br />}<br /><br>
inline void AllTasks() {<br />    rtems_iterate_over_all_threads(__help_suspend__);<br />}<br />--------------------------------<br />And then the following code to run this:<br /><br>
AllTasks();<br />rtems_wake_after(400);<br />Reset();<br /><br>
When I stop after AllTasks() and print out the tasks state, I see that all tasks except the current one are suspended - OK.<br />Now, when I try to sleep, the application hangs.<br />Looking into debugger, I see that control reaches the _Thread_Dispatch function via _Thread_Set_state() and _Thread_Calculate_heir().<br />The last does<br />  _Thread_Heir = (Thread_Control *)<br />    _Thread_Ready_chain[ _Priority_Get_highest() ].first;<br /><br>
and returns very small value (0xc8), which goes to the _Thread_Heir value with the crash result at the end.<br /><br>
---<br>
I substituted call to AllTasks() with the code:<br>
        for(uint i = 0x0a010001; i <= 0x0a010020; i++) {<br>
                if (i == _Thread_Executing->Object.id) continue;<br>
                rtems_task_suspend(i); }<br>
And everything worked fine.<br>
<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; -qt-user-state:0;"><br></p>My assumption is that _Priority_Get_highest() does not return correct value (as there are no tasks), but...<br /><br>
<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; -qt-user-state:0;"><br></p>Many thanks ahead for any comment.<br /><br>
Leon</p></body></html>