Имеется следующий код (Cortex-M3)
Код
static Process prlist[2];
...
uint32_t *p = (uint32_t*)0x10000000;
prlist[0].context.sp = *p;
...
void _proc_stack_init(int id)
{
_proc_stack_push(&prlist[id].context.sp, 0x01000000);
_proc_stack_push(&prlist[id].context.sp, 0);
_proc_stack_push(&prlist[id].context.sp, 0);
}
...
uint32_t *p = (uint32_t*)0x10000000;
prlist[0].context.sp = *p;
...
void _proc_stack_init(int id)
{
_proc_stack_push(&prlist[id].context.sp, 0x01000000);
_proc_stack_push(&prlist[id].context.sp, 0);
_proc_stack_push(&prlist[id].context.sp, 0);
}
Который вызывает ассемблерную функцию
Код
_proc_stack_push:
/* R0 - stack, R1 - value */
push {r2}
ldr r2, [r0] // Грузим в R2 содержимое по адресу [R0]
stmdb r2!,{r1} // Сохраняем по адресу в R2 с преддекрементом содержимое R1, в R2 записывается новое значение
str r2, [r0] // Сохраняем R2 по адресу [R0]
pop {r2}
bx lr
/* R0 - stack, R1 - value */
push {r2}
ldr r2, [r0] // Грузим в R2 содержимое по адресу [R0]
stmdb r2!,{r1} // Сохраняем по адресу в R2 с преддекрементом содержимое R1, в R2 записывается новое значение
str r2, [r0] // Сохраняем R2 по адресу [R0]
pop {r2}
bx lr
Хочу переписать все это на чистом Си, но что-то не получается.
Код
void _proc_stack_init(int id)
{
uint32_t *sp_ptr = &prlist[id].context.sp;
*--sp_ptr = 0x01000000;
*--sp_ptr = 0;
*--sp_ptr = 0;
}
{
uint32_t *sp_ptr = &prlist[id].context.sp;
*--sp_ptr = 0x01000000;
*--sp_ptr = 0;
*--sp_ptr = 0;
}
Такое ощущение, что здесь нужно использовать двойной указатель, но вот как - ума не приложу. В общем, заблудился в трех соснах.
Подскажите, пожалуйста