Module drone_cortexm::sv [−][src]
The Supervisor module.
Supervisor is an abstraction for the SVC
assembly instruction, which means
SuperVisor Call, and the SV_CALL
exception.
Usage
use drone_cortexm::{sv, sv::Supervisor, thr}; sv::pool! { /// Pool of services. pool => SERVICES; /// Supervisor type. supervisor => pub Sv; // Attached services. services => { // SwitchContextService; // SwitchBackService; } } thr::nvic! { thread => pub Thr {}; local => pub ThrLocal {}; index => pub Thrs; vtable => pub Vtable; init => pub ThrsInit; supervisor => Sv; threads => { exceptions => { // Define an external function handler for the SV_CALL exception. naked(Sv::handler) sv_call; }; }; } #[no_mangle] pub static VTABLE: Vtable = Vtable::new(reset); unsafe extern "C" fn reset() -> ! { loop {} }
Predefined Services
If SwitchContextService
and SwitchBackService
are defined for the
supervisor, Switch::switch_context
and Switch::switch_back
functions
become available to switch the program stack.
use drone_cortexm::sv::{Switch, SwitchBackService, SwitchContextService}; use drone_cortexm::sv; sv::pool! { /// Pool of services. pool => SERVICES; /// The supervisor type. supervisor => pub Sv; // Attached services. services => { SwitchContextService; SwitchBackService; } } unsafe { // Allocate the stack. let stack = Box::<[u8]>::new_uninit_slice(0x800).assume_init(); // `stack_ptr` will store the current stack pointer. let mut stack_ptr = stack.as_ptr(); let mut data = Box::<u32>::new(0); let mut data_ptr = &mut *data as *mut u32; Sv::switch_context(data_ptr, &mut stack_ptr); // ------------------- // Using the new stack. // ------------------- Sv::switch_back(&mut data_ptr); }
Macros
pool | Defines the supervisor type. |
Structs
SwitchBackService | A service to switch back from a process stack. |
SwitchContextService | A service to switch to a process stack. |
Traits
Supervisor | Generic supervisor. |
SvCall | A supervisor call. |
SvService | Generic supervisor service. |
Switch | Extends |
Functions
service_handler⚠ | This function is called by [ |
sv_call⚠ | Calls |