[En-Nut-Discussion] arm port (RFC: Changing ARM mode)

Rocendo Bracamontes del toro rocendob at gmail.com
Tue Jan 13 23:33:36 CET 2009


On Tue, Jan 13, 2009 at 2:26 PM, Adam Dybkowski <adybkows at wp.pl> wrote:

> Alain M. wrote:
>
> >>   void NutSleep (uint32_t ms)
> >>    {
> >>        ENTRY_KERNEL_MODE(); // change mode to supervisor when applicable
> >>
> >>       ..... code execute at kernel level here ....
> >>
> >>        EXIT_KERNEL_MODE(); exit supervisor mode, enter user mode when
> >> applicable
> >>   }
> >
> > I am no expert in the matter, but in my undertanding this is not very
> > good. The problem is that SWI is a CALL, not a command has one parameter
> > for the function and parametters have to be fetch from the user stack.
> > This calls for an entire different achitecture.
>
> I think this is not a real problem because SWI call works similar to
> interrupt - CPU suddenly jumps to address 0x08, switches to Supervisor
> and ARM mode (if it was in Thumb). The SWI handler could extract the
> return address and jump there in priviledged Supervisor mode (extra
> bonus: own system stack) or switch into System mode (the same as User
> mode but priviledged). EXIT_KERNEL_MODE will be much easier because we
> have only to switch to User mode (restore CPSR as it was before
> ENTRY_KERNEL_MODE), without using SWI to do it.
>

 Agree ...



>
> --
> Adam Dybkowski
>                adybkows at wp.pl
>                http://dybkowski.net/
> _______________________________________________
> http://lists.egnite.de/mailman/listinfo/en-nut-discussion
>



More information about the En-Nut-Discussion mailing list