diff options
author | 2020-03-15 19:40:37 +0000 | |
---|---|---|
committer | 2020-03-15 19:40:47 +0000 | |
commit | 539c6d00fffabaf7c3f61f2f8c1aaefa661fa500 (patch) | |
tree | a54c12251a7e7cbdafe6b2ee8909ab5acf63b492 /src/asm.rs | |
parent | 1cb6baf8bd46b602c01d51e7a3c5c6e77af9c8f2 (diff) | |
download | cortex-m-539c6d00fffabaf7c3f61f2f8c1aaefa661fa500.tar.gz cortex-m-539c6d00fffabaf7c3f61f2f8c1aaefa661fa500.tar.zst cortex-m-539c6d00fffabaf7c3f61f2f8c1aaefa661fa500.zip |
Add UDF instruction. Closes #199.
Diffstat (limited to 'src/asm.rs')
-rw-r--r-- | src/asm.rs | 24 |
1 files changed, 24 insertions, 0 deletions
@@ -81,6 +81,30 @@ pub fn nop() { } } + +/// Generate an Undefined Instruction exception. +/// +/// Can be used as a stable alternative to `core::intrinsics::abort`. +#[inline] +pub fn udf() { + match () { + #[cfg(all(cortex_m, feature = "inline-asm"))] + () => unsafe { asm!("udf" :::: "volatile") }, + + #[cfg(all(cortex_m, not(feature = "inline-asm")))] + () => unsafe { + extern "C" { + fn __udf(); + } + + __udf() + }, + + #[cfg(not(cortex_m))] + () => unimplemented!(), + } +} + /// Wait For Event #[inline] pub fn wfe() { |