    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26

    //! Loading user applications into memory

    /// Get the total number of applications.
    pub fn get_num_app() -> usize {
        extern "C" {
            fn _num_app();
        }
        unsafe { (_num_app as usize as *const usize).read_volatile() }
    }

    /// get applications data
    pub fn get_app_data(app_id: usize) -> &'static [u8] {
        extern "C" {
            fn _num_app();
        }
        let num_app_ptr = _num_app as usize as *const usize;
        let num_app = get_num_app();
        let app_start = unsafe { core::slice::from_raw_parts(num_app_ptr.add(1), num_app + 1) };
        assert!(app_id < num_app);
        unsafe {
            core::slice::from_raw_parts(
                app_start[app_id] as *const u8,
                app_start[app_id + 1] - app_start[app_id],
            )
        }
    }