<div dir="ltr"><div dir="ltr">On Wed, Jun 5, 2019 at 8:21 AM Dimitrios Chr. Ioannidis via fpc-devel <<a href="mailto:fpc-devel@lists.freepascal.org">fpc-devel@lists.freepascal.org</a>> wrote:<br></div><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><br>
Στις 2/6/2019 5:46 μ.μ., ο Jeppe Johansen έγραψε:<br>
> On 6/1/19 3:37 PM, Dimitrios Chr. Ioannidis via fpc-pascal wrote:<br>> procedure AtomicWnrite(var value: word; new_value: word); inline;<br>
> var<br>
>   b: Byte;<br>
> begin<br>
>   b:=avr_save;<br>
>   value:=new_value;<br>
>   avr_restore(b);<br>
> end;<br>
><br>
> function AtomicRead(var value: word): word; inline;<br>
> var<br>
>   b: Byte;<br>
> begin<br>
>   b:=avr_save;<br>
>   AtomicRead:=value;<br>
>   avr_restore(b);<br>
> end;<br>
<br>
Can I use those inside an interrupt handler ? What about nested interrupts ?<br></blockquote><div><br></div><div>In my opinion not required for a normal ISR, since the global interrupt flag is disabled anyway. Obviously if you enable the global interrupt flag inside an ISR tor nesting interrupts then you would need the above functions for atomic access to variables. </div><div><br></div><div>For new architectures such as tinyAVR1 or megaAVR0 series the interrupt systems are a bit more involved (not sure how one would ensure atomic access if a normal ISR is interrupted by a non-maskable interrupt).</div></div></div>