реклама на сайте
подробности

 
 
> Помогите разобраться с указателями
Harvester
сообщение Mar 25 2016, 14:46
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 338
Регистрация: 1-02-06
Из: Королев, М.О.
Пользователь №: 13 846



Добрый день.
Имеется следующий код (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);
}

Который вызывает ассемблерную функцию
Код
_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

Хочу переписать все это на чистом Си, но что-то не получается.
Код
void _proc_stack_init(int id)
{
    uint32_t *sp_ptr = &prlist[id].context.sp;

    *--sp_ptr = 0x01000000;
    *--sp_ptr = 0;
    *--sp_ptr = 0;
}

Такое ощущение, что здесь нужно использовать двойной указатель, но вот как - ума не приложу. В общем, заблудился в трех соснах.
Подскажите, пожалуйста


--------------------
-Да как так-то?/-Да как-то так/-Ну так-то да
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
gosha-z
сообщение Mar 29 2016, 18:41
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 327
Регистрация: 30-10-05
Пользователь №: 10 288



Какой-то взрыв мозга. А декремент-то зачем тут предполагается???
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 14:15
Рейтинг@Mail.ru


Страница сгенерированна за 0.01359 секунд с 7
ELECTRONIX ©2004-2016