Камень 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);
Печалька в общем.
Есть некий код по адресу 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);
Печалька в общем.
Собираю самопальный мини-компьютер
