Этот код работает для установки счетчика программы на адрес vector_table
в архитектуре ARM:
static mut JUMP: Option<extern "C" fn()> = None;
JUMP = Some(core::mem::transmute(vector_table));
(JUMP.unwrap())();
Я вычисляю таблицу векторов, используя let vector_table = *((address + 4) as * const u32);
Есть ли способ выразить то же самое в чистом коде Rust?
Эквивалентный код C:
((void (*)(void))address[1])();
address
- это uint32_t *address
, поэтому вы смещаетена 4 байта попасть в таблицу векторов.