此代码用于将程序计数器设置为ARM体系结构上的vector_table
的地址:
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个字节以命中向量表。