Re: NutEnterCriticalLevel

Uwe Bonnes <bon-1JbLm1bU5j5ZIx36JBfelj3+ndqKAYMe9FMPySWZwLkb1SvskN2V4Q@public.gmane.org> Tue, 16 Jan 2018 13:41:48 +0100
Newsgroups gmane.comp.hardware.microcontrollers.ethernut
Message-ID <[email protected]>
Dear Dušan,
>>>>> "Dušan" == Dušan  <[email protected]> writes:

    Dušan> Uwe, I feel we've got on a wrong path :-).

    Dušan> Why you concentrate on the NutEnterCriticalLevel ? Let's forget
    Dušan> about it for a while.  I suggest to start with NutEnterCritical
    Dušan> for m68k platform. This is the initially issue, we started to
    Dušan> talk about.  I attached 2 emails below.

    Dušan> Let's look at the include\arch\arm\ atom.h.  Here ccodes are also
    Dušan> stored into a temp variable.

No, this temp variable is only used to not destroy R0. Look at the log entry
for Rev 1897:
"Bug #1757410 fixed. NutEnter/ExitCritical destroyed ARM register R0."

temp is also only inside a stack frame, so it is lost when NutEnter|Exit
Critical() when the stack frame and that function is exited.

    Dušan> That's exactly what we are doing on the m68k platform.

    Dušan> ---------- But with m68k gcc, we have a problem, when there is a
    Dušan> nested NutEnterCritical.  The temp variable is compiled as 2
    Dušan> different registers, 1st level goes e.g. into d1, 2nd level into
    Dušan> d2. Then leaving the 2nd level restores status word from d1,
    Dušan> which is a problem This is why we started to use NutUseCritical
    Dušan> macro.

I don't see any nested NutEnterCritical in the common code. Can you point
me at such a use?

If not, I think that some form of nested critical section is a case for a
new function, but not for NutEnterCritical().
You can implement that new function for your arch as you like. Name it like
NutEnterCriticalLevel or NutEnterNestedCritical, etc. 

Bye

-- 
Uwe Bonnes                bon-1JbLm1bU5j5ZIx36JBfelj3+ndqKAYMe9FMPySWZwLkb1SvskN2V4Q@public.gmane.org

Institut fuer Kernphysik  Schlossgartenstrasse 9  64289 Darmstadt
--------- Tel. 06151 1623569 ------- Fax. 06151 1623305 ---------
_______________________________________________
http://lists.egnite.de/mailman/listinfo/en-nut-discussion