pub struct Core<'probe> { /* private fields */ }
Expand description
Generic core handle representing a physical core on an MCU.
This should be considere as a temporary view of the core which locks the debug probe driver to as single consumer by borrowing it.
As soon as you did your atomic task (e.g. halt the core, read the core state and all other debug relevant info) you should drop this object, to allow potential other shareholders of the session struct to grab a core handle too.
Implementations
sourceimpl<'probe> Core<'probe>
impl<'probe> Core<'probe>
sourcepub fn new(
core: impl CoreInterface + 'probe,
state: &'probe mut CoreState
) -> Core<'probe>
pub fn new(
core: impl CoreInterface + 'probe,
state: &'probe mut CoreState
) -> Core<'probe>
Create a new Core
.
sourcepub fn create_state(id: usize, options: CoreAccessOptions) -> CoreState
pub fn create_state(id: usize, options: CoreAccessOptions) -> CoreState
Creates a new CoreState
sourcepub fn wait_for_core_halted(&mut self, timeout: Duration) -> Result<(), Error>
pub fn wait_for_core_halted(&mut self, timeout: Duration) -> Result<(), Error>
Wait until the core is halted. If the core does not halt on its own,
a DebugProbeError::Timeout
error will be returned.
sourcepub fn core_halted(&mut self) -> Result<bool, Error>
pub fn core_halted(&mut self) -> Result<bool, Error>
Check if the core is halted. If the core does not halt on its own,
a DebugProbeError::Timeout
error will be returned.
sourcepub fn halt(&mut self, timeout: Duration) -> Result<CoreInformation, Error>
pub fn halt(&mut self, timeout: Duration) -> Result<CoreInformation, Error>
Try to halt the core. This function ensures the core is actually halted, and
returns a DebugProbeError::Timeout
otherwise.
sourcepub fn reset(&mut self) -> Result<(), Error>
pub fn reset(&mut self) -> Result<(), Error>
Reset the core, and then continue to execute instructions. If the core
should be halted after reset, use the reset_and_halt
function.
sourcepub fn reset_and_halt(
&mut self,
timeout: Duration
) -> Result<CoreInformation, Error>
pub fn reset_and_halt(
&mut self,
timeout: Duration
) -> Result<CoreInformation, Error>
Reset the core, and then immediately halt. To continue execution after
reset, use the reset
function.
sourcepub fn step(&mut self) -> Result<CoreInformation, Error>
pub fn step(&mut self) -> Result<CoreInformation, Error>
Steps one instruction and then enters halted state again.
sourcepub fn status(&mut self) -> Result<CoreStatus, Error>
pub fn status(&mut self) -> Result<CoreStatus, Error>
Returns the current status of the core.
sourcepub fn read_core_reg<T>(
&mut self,
address: impl Into<RegisterId>
) -> Result<T, Error> where
RegisterValue: TryInto<T>,
Result<T, <RegisterValue as TryInto<T>>::Error>: RegisterValueResultExt<T>,
pub fn read_core_reg<T>(
&mut self,
address: impl Into<RegisterId>
) -> Result<T, Error> where
RegisterValue: TryInto<T>,
Result<T, <RegisterValue as TryInto<T>>::Error>: RegisterValueResultExt<T>,
Read the value of a core register.
Remarks
T
can be an unsigned interger type, such as u32 or u64, or
it can be RegisterValue to allow the caller to support arbitrary
length registers.
To add support to convert to a custom type implement TryInto
Errors
If T
isn’t large enough to hold the register value an error will be raised.
sourcepub fn write_core_reg<T>(
&mut self,
address: RegisterId,
value: T
) -> Result<(), Error> where
T: Into<RegisterValue>,
pub fn write_core_reg<T>(
&mut self,
address: RegisterId,
value: T
) -> Result<(), Error> where
T: Into<RegisterValue>,
Write the value of a core register.
Errors
If T is too large to write to the target register an error will be raised.
sourcepub fn available_breakpoint_units(&mut self) -> Result<u32, Error>
pub fn available_breakpoint_units(&mut self) -> Result<u32, Error>
Returns all the available breakpoint units of the core.
sourcepub fn registers(&self) -> &'static RegisterFile
pub fn registers(&self) -> &'static RegisterFile
Returns a list of all the registers of this core.
sourcepub fn set_hw_breakpoint(&mut self, address: u64) -> Result<(), Error>
pub fn set_hw_breakpoint(&mut self, address: u64) -> Result<(), Error>
Set a hardware breakpoint
This function will try to set a hardware breakpoint att address
.
The amount of hardware breakpoints which are supported is chip specific,
and can be queried using the get_available_breakpoint_units
function.
sourcepub fn clear_hw_breakpoint(&mut self, address: u64) -> Result<(), Error>
pub fn clear_hw_breakpoint(&mut self, address: u64) -> Result<(), Error>
Set a hardware breakpoint
This function will try to clear a hardware breakpoint at address
if there exists a breakpoint at that address.
sourcepub fn clear_all_hw_breakpoints(&mut self) -> Result<(), Error>
pub fn clear_all_hw_breakpoints(&mut self) -> Result<(), Error>
Clear all hardware breakpoints
This function will clear all HW breakpoints which are configured on the target,
regardless if they are set by probe-rs, AND regardless if they are enabled or not.
Also used as a helper function in Session::drop
.
sourcepub fn architecture(&self) -> Architecture
pub fn architecture(&self) -> Architecture
Returns the architecture of the core.
sourcepub fn instruction_set(&mut self) -> Result<InstructionSet, Error>
pub fn instruction_set(&mut self) -> Result<InstructionSet, Error>
Determine the instruction set the core is operating in This must be queried while halted as this is a runtime decision for some core types
sourcepub fn fpu_support(&mut self) -> Result<bool, Error>
pub fn fpu_support(&mut self) -> Result<bool, Error>
Determine if an FPU is present. This must be queried while halted as this is a runtime decision for some core types.
Trait Implementations
sourceimpl<'probe> MemoryInterface for Core<'probe>
impl<'probe> MemoryInterface for Core<'probe>
sourcefn supports_native_64bit_access(&mut self) -> bool
fn supports_native_64bit_access(&mut self) -> bool
Does this interface support native 64-bit wide accesses Read more
sourcefn read_word_64(&mut self, address: u64) -> Result<u64, Error>
fn read_word_64(&mut self, address: u64) -> Result<u64, Error>
Read a 64bit word of at address
. Read more
sourcefn read_word_32(&mut self, address: u64) -> Result<u32, Error>
fn read_word_32(&mut self, address: u64) -> Result<u32, Error>
Read a 32bit word of at address
. Read more
sourcefn read_64(&mut self, address: u64, data: &mut [u64]) -> Result<(), Error>
fn read_64(&mut self, address: u64, data: &mut [u64]) -> Result<(), Error>
Read a block of 64bit words at address
. Read more
sourcefn read_32(&mut self, address: u64, data: &mut [u32]) -> Result<(), Error>
fn read_32(&mut self, address: u64, data: &mut [u32]) -> Result<(), Error>
Read a block of 32bit words at address
. Read more
sourcefn read_8(&mut self, address: u64, data: &mut [u8]) -> Result<(), Error>
fn read_8(&mut self, address: u64, data: &mut [u8]) -> Result<(), Error>
Read a block of 8bit words at address
.
sourcefn write_word_64(&mut self, addr: u64, data: u64) -> Result<(), Error>
fn write_word_64(&mut self, addr: u64, data: u64) -> Result<(), Error>
Write a 64bit word at address
. Read more
sourcefn write_word_32(&mut self, addr: u64, data: u32) -> Result<(), Error>
fn write_word_32(&mut self, addr: u64, data: u32) -> Result<(), Error>
Write a 32bit word at address
. Read more
sourcefn write_word_8(&mut self, addr: u64, data: u8) -> Result<(), Error>
fn write_word_8(&mut self, addr: u64, data: u8) -> Result<(), Error>
Write an 8bit word at address
.
sourcefn write_64(&mut self, addr: u64, data: &[u64]) -> Result<(), Error>
fn write_64(&mut self, addr: u64, data: &[u64]) -> Result<(), Error>
Write a block of 64bit words at address
. Read more
sourcefn write_32(&mut self, addr: u64, data: &[u32]) -> Result<(), Error>
fn write_32(&mut self, addr: u64, data: &[u32]) -> Result<(), Error>
Write a block of 32bit words at address
. Read more
sourcefn write_8(&mut self, addr: u64, data: &[u8]) -> Result<(), Error>
fn write_8(&mut self, addr: u64, data: &[u8]) -> Result<(), Error>
Write a block of 8bit words at address
.
sourcefn read_mem_64bit(&mut self, address: u64, data: &mut [u8]) -> Result<(), Error>
fn read_mem_64bit(&mut self, address: u64, data: &mut [u8]) -> Result<(), Error>
Reads bytes using 64 bit memory access. Address must be 64 bit aligned and data must be an exact multiple of 8. Read more
Auto Trait Implementations
impl<'probe> !RefUnwindSafe for Core<'probe>
impl<'probe> !Send for Core<'probe>
impl<'probe> !Sync for Core<'probe>
impl<'probe> Unpin for Core<'probe>
impl<'probe> !UnwindSafe for Core<'probe>
Blanket Implementations
sourceimpl<T> BorrowMut<T> for T where
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized,
const: unstable · sourcefn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more