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;
|
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)]
|
#[derive(Debug, Copy, Clone, Serialize, Deserialize)]
|
||||||
pub enum rtos_struct {
|
pub enum rtos_struct {
|
||||||
@ -555,3 +506,23 @@ pub enum rtos_struct {
|
|||||||
List_Item_struct(ListItem_t),
|
List_Item_struct(ListItem_t),
|
||||||
List_MiniItem_struct(MiniListItem_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