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 Supervisor types with switch_context and switch_back methods.

Functions

service_handler

This function is called by [Sv::handler] for the supervisor service T. Parameter T is based on the number num in the SVC num instruction.

sv_call

Calls SVC num instruction.