emu lookup as macro
This commit is contained in:
parent
44faa80556
commit
1650545424
@ -498,55 +498,6 @@ pub trait emu_lookup {
|
||||
fn lookup(emu: &Emulator, addr: ::std::os::raw::c_uint) -> Self;
|
||||
}
|
||||
|
||||
impl emu_lookup for xLIST_ITEM {
|
||||
fn lookup(emu: &Emulator, addr: ::std::os::raw::c_uint) -> xLIST_ITEM {
|
||||
let mut tmp : [u8; std::mem::size_of::<xLIST_ITEM>()] = [0u8; std::mem::size_of::<xLIST_ITEM>()];
|
||||
unsafe {
|
||||
emu.read_mem(addr.into(), &mut tmp);
|
||||
std::mem::transmute::<[u8; std::mem::size_of::<xLIST_ITEM>()], xLIST_ITEM>(tmp)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl emu_lookup for TCB_t {
|
||||
fn lookup(emu: &Emulator, addr: ::std::os::raw::c_uint) -> TCB_t {
|
||||
let mut tmp : [u8; std::mem::size_of::<TCB_t>()] = [0u8; std::mem::size_of::<TCB_t>()];
|
||||
unsafe {
|
||||
emu.read_mem(addr.into(), &mut tmp);
|
||||
std::mem::transmute::<[u8; std::mem::size_of::<TCB_t>()], TCB_t>(tmp)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl emu_lookup for void_ptr {
|
||||
fn lookup(emu: &Emulator, addr: ::std::os::raw::c_uint) -> void_ptr {
|
||||
let mut tmp : [u8; std::mem::size_of::<void_ptr>()] = [0u8; std::mem::size_of::<void_ptr>()];
|
||||
unsafe {
|
||||
emu.read_mem(addr.into(), &mut tmp);
|
||||
std::mem::transmute::<[u8; std::mem::size_of::<void_ptr>()], void_ptr>(tmp)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl emu_lookup for List_t {
|
||||
fn lookup(emu: &Emulator, addr: ::std::os::raw::c_uint) -> List_t {
|
||||
let mut tmp : [u8; std::mem::size_of::<List_t>()] = [0u8; std::mem::size_of::<List_t>()];
|
||||
unsafe {
|
||||
emu.read_mem(addr.into(), &mut tmp);
|
||||
std::mem::transmute::<[u8; std::mem::size_of::<List_t>()], List_t>(tmp)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl emu_lookup for MiniListItem_t {
|
||||
fn lookup(emu: &Emulator, addr: ::std::os::raw::c_uint) -> MiniListItem_t {
|
||||
let mut tmp : [u8; std::mem::size_of::<MiniListItem_t>()] = [0u8; std::mem::size_of::<MiniListItem_t>()];
|
||||
unsafe {
|
||||
emu.read_mem(addr.into(), &mut tmp);
|
||||
std::mem::transmute::<[u8; std::mem::size_of::<MiniListItem_t>()], MiniListItem_t>(tmp)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Debug, Copy, Clone, Serialize, Deserialize)]
|
||||
pub enum rtos_struct {
|
||||
@ -555,3 +506,23 @@ pub enum rtos_struct {
|
||||
List_Item_struct(ListItem_t),
|
||||
List_MiniItem_struct(MiniListItem_t),
|
||||
}
|
||||
|
||||
#[macro_export]
|
||||
macro_rules! impl_emu_lookup {
|
||||
($struct_name:ident) => {
|
||||
impl $crate::freertos::emu_lookup for $struct_name {
|
||||
fn lookup(emu: &Emulator, addr: ::std::os::raw::c_uint) -> $struct_name {
|
||||
let mut tmp : [u8; std::mem::size_of::<$struct_name>()] = [0u8; std::mem::size_of::<$struct_name>()];
|
||||
unsafe {
|
||||
emu.read_mem(addr.into(), &mut tmp);
|
||||
std::mem::transmute::<[u8; std::mem::size_of::<$struct_name>()], $struct_name>(tmp)
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
}
|
||||
impl_emu_lookup!(TCB_t);
|
||||
impl_emu_lookup!(List_t);
|
||||
impl_emu_lookup!(ListItem_t);
|
||||
impl_emu_lookup!(MiniListItem_t);
|
||||
impl_emu_lookup!(void_ptr);
|
Loading…
x
Reference in New Issue
Block a user