<div dir="ltr"><div dir="auto">Thanks a lot for your reply.</div><div dir="auto"><br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">But that code is okay because the floating point unit is not used during that sequence. it is untouched and up to a point it doesn't matter when the floating point unit is restored as long as it's before the thread needs it. And RTEMS should not be using floating point operations except in very special places in the code base.<br>not sure that helps but the floating point unit and the integer unit are separate and most of the time can be contact switched separately completely safely.</blockquote><div>I understand. This is smart.</div><div><br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">The _Context_Switch() function changes the thread stack and the<br>non-volatile (callee save) registers. So, the value of the executing<br>local variable changes with a call to _Context_Switch().</blockquote><div>I understand. Thank you. </div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Mon, Nov 2, 2020 at 11:48 AM Sebastian Huber <<a href="mailto:sebastian.huber@embedded-brains.de">sebastian.huber@embedded-brains.de</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">On 31/10/2020 16:50, Richi Dubey wrote:<br>
<br>
><br>
> I want to learn more about how context switching works in RTEMS. I saw <br>
> the following lines in theaddispatch.c:<br>
><br>
>     _Thread_Save_fp( executing );<br>
>     _Context_Switch( &executing->Registers, &heir->Registers );<br>
>     _Thread_Restore_fp( executing );<br>
><br>
> I do not understand how it works. Here, the executing process saves <br>
> its context by calling _Thread_Save_fp( executing ), then if a <br>
> different process resumes execution after the context switch, why does <br>
> it get the context of previous process (executing)?<br>
The _Context_Switch() function changes the thread stack and the <br>
non-volatile (callee save) registers. So, the value of the executing <br>
local variable changes with a call to _Context_Switch().<br>
<br>
-- <br>
Sebastian Huber, embedded brains GmbH<br>
<br>
Address : Dornierstr. 4, D-82178 Puchheim, Germany<br>
Phone   : +49 89 189 47 41-16<br>
Fax     : +49 89 189 47 41-09<br>
E-Mail  : <a href="mailto:sebastian.huber@embedded-brains.de" target="_blank">sebastian.huber@embedded-brains.de</a><br>
PGP     : Public key available on request.<br>
<br>
Diese Nachricht ist keine geschäftliche Mitteilung im Sinne des EHUG.<br>
<br>
</blockquote></div>