ARM (Thumb Mode) _CPU_Context_switch_arm

Joel Sherrill joel.sherrill at OARcorp.com
Tue Feb 26 20:39:11 UTC 2013


On 2/26/2013 2:42 AM, Sebastian Huber wrote:
> On 02/25/2013 09:45 PM, Joel Sherrill wrote:
>> On 2/25/2013 2:14 PM, Matthew J Fletcher wrote:
>>> Joel,
>>>
>>> _CPU_Context_Initialize in cpu.c uses a hardcoded (to 0x13, not even
>>> using a #define) arm_cpu_mode variable to define the cpsr.
>>>
>>> #define ARM_PSR_M_SVC 0x13
>>>
>>> from cpu.h might be a good start.
>>>
>>> Although i just noticed the changelog,... oops.
>>>
>>> 2008-04-17    Joel Sherrill <joel.sherrill at oarcorp.com>
>>>
>>>      * cpu.c: Add arm_cpu_mode so ARM BSP can overrid default value for cpsr.
>>>
>>> Maybe if this was an extern and the BSP defined the variable and
>>> initialised it it would be easier to notice. I never thought of looking
>>> in cpu.c for places to modify.
>>>
>> Wow! I don't remember that change at all. It doesn't even sound like the
>> way I would normally solve this problem. :(
>>
>> Sebastian.. do you remember this?
> I always wondered why we have this arm_cpu_mode variable.
>
>> is there a better way to accomplish this?
> I would simply remove this and use:
The only BSP changing that variable is the nds

   /* set the cpu mode to system user */
   arm_cpu_mode = 0x1f;

What's the impact of 0x13 (default) versus 0x1f?
>
> void _CPU_Context_Initialize(
>     Context_Control *the_context,
>     uint32_t *stack_base,
>     uint32_t size,
>     uint32_t new_level,
>     void *entry_point,
>     bool is_fp
> )
> {
>     the_context->register_sp = (uint32_t) stack_base + size ;
>     the_context->register_lr = (uint32_t) entry_point;
>     the_context->register_cpsr = new_level | ARM_PSR_M_SVC;
> }
>


-- 
Joel Sherrill, Ph.D.             Director of Research & Development
joel.sherrill at OARcorp.com        On-Line Applications Research
Ask me about RTEMS: a free RTOS  Huntsville AL 35805
Support Available                (256) 722-9985




More information about the users mailing list