Кто любит RISC в жизни, заходим, не стесняемся.
Пн янв 07, 2019 18:04:05
Камень stm32f103c8t6
Есть некий код по адресу 0x08000A000 и он там есть. Код не сгенерирован кейлом, он просто там лежит. Программа сама его туда предварительно кладёт.
Прошивка пытается его запустить таким образом:
const unsigned char *prog = rom+(24*1024);
typedef int func(void);
func* f = (func*)(prog);
f();
В дебаггере код запускается через BLX R5
В регистре R5 лежит адрес 0x08000A000
И тут в общем-то проблема - срабатывает прерывание MemManage HardFault. Именно на BLX R5, то есть до самого кода даже не хододит.
Долго пытался допереть и всё проверял, пока не наткнулся на инфу об MPU. Но по нему не так много инфы, вроде бы есть геристры, но там только ноли.
Terminal::sendNumber(*((unsigned int*)0xE000ED90), true);
Terminal::sendNumber(*((unsigned int*)0xE000EDA4), true);
Terminal::sendNumber(*((unsigned int*)0xE000ED98), true);
Terminal::sendNumber(*((unsigned int*)0xE000ED9C), true);
Печалька в общем.
Пн янв 07, 2019 18:17:01
В дебаггере код запускается через BLX R5
В регистре R5 лежит адрес 0x08000A000
Нулевой бит адреса должен быть 1.
Пн янв 07, 2019 18:38:32
Reflector писал(а): Размер шрифта:
Я пробовал этот вариант. PC намертво зависает на адресе команды BLX никуда не переходя, а дебагер не даёт двигаться дальше. То есть это то, как он и должен себя вести? Оу. Возможно это ограничения бесплатной версии... только сейчас об этом подумал. Спасибо, наверное, действительно так.