Size: a a a

2021 February 08

НТ

Никита Тыманович... in Embedded Group
не, ресет не нужен) Я делаю прыжок на произвольную функцию без возраста базируясь на том, как я понимаю, процессор это делает в самом начальне програмы при старте
источник

НТ

Никита Тыманович... in Embedded Group
но очевидно, что мое представление идет вразрез с правдой. Вот и интересно, почему помимо pc и sp ему еще что-то нужно
источник

AK

Andrew K in Embedded Group
на асме пишешь??
источник

НТ

Никита Тыманович... in Embedded Group
хотя грубое mov pc, <my_func> при уже том же пустом стеке работает отлично
источник

НТ

Никита Тыманович... in Embedded Group
Andrew K
на асме пишешь??
а иначе я хз, как)
источник

НТ

Никита Тыманович... in Embedded Group
ну вообще там почти все на расте, но именно эта часть на асьме
источник

AK

Andrew K in Embedded Group
cmsis можно
источник

НТ

Никита Тыманович... in Embedded Group
Andrew K
cmsis можно
цмсис дает доступ к ронам?
источник

AK

Andrew K in Embedded Group
стек изменить можно, но удобнее конечно на асме
источник

НТ

Никита Тыманович... in Embedded Group
если там обернутая асьма, то будет шило на мыло замена) у меня тут проблема больше не с асьмой, а осмыслением хитрого м3 ядра
источник

AK

Andrew K in Embedded Group
так перед прыжком еще сбрось стек
источник

AK

Andrew K in Embedded Group
но это не при выходе из прерывания
источник

AK

Andrew K in Embedded Group
из прерывания выходишь bx lr?
источник

TB

Taras Bezditnyi in Embedded Group
Leonid Zaliubovskii
смотрю про выкусить или выкинуть уже были предложения. Штож, я опоздал
А вариант с оплёткой не проходит? Выпаивается гребёнка на ура...
источник

НТ

Никита Тыманович... in Embedded Group
Andrew K
из прерывания выходишь bx lr?
asm!
                   (
                       "mov r0, {0}",
                       "mov sp, {1}",
                       "str r0,   [sp, #+24]",
                       "mov lr,    0xFFFFFFF9",
                       "bx  lr",
                       in(reg) func,
                       in(reg) &kernel_stack[388] as *const u8 as usize,  
                       in("r0") 0,
                   );
источник

НТ

Никита Тыманович... in Embedded Group
1)адрес на фунцию идет в r0
2)нужный выровненный на 16 адрес зануленого стека идет в r1
3)адрес функции из r0 идет в sp, чтобы при возврате из прерывания arm подхватил ее в pc.Это происходит
4) код возвращения из прерывания в нормальный мод с продолжением использования msp идет в lr
5)прыгаем, а на следующем шаге получаем сегфолт
источник

AK

Andrew K in Embedded Group
а в параметрах что в цифрах
источник

НТ

Никита Тыманович... in Embedded Group
все по нулям, кроме sp и pc. Сейчас до пк дойду, воспроизведу, если ничего не успел разобрать по коду
источник

AK

Andrew K in Embedded Group
что в sp пытаешся передать?
источник

НТ

Никита Тыманович... in Embedded Group
Andrew K
что в sp пытаешся передать?
адрес некоторой ячейки пустого массива
источник