pub fn init(map_table: &mut MapTable) {
        let _satp = map_table.get_initial_satp(0);
        let frame;
        unsafe {
            frame = &mut KERNEL_TRAP_FRAME[0];
        }
        frame.satp = map_table.get_initial_satp(0);
        // El scratch apunta al contexto de mi frame
        let scratch_val = frame as *const TrapFrame as usize;
        super::mscratch_write(scratch_val);
        let trap_stack_mem = Box::<u8>::new(0);
        let trap_stack = Box::<u8>::into_raw(trap_stack_mem);
        unsafe {
            // Reservo memoria para el stack de mi trap handler
            // Como el stack crece de arriba hacia abajo, le paso la dirección del final del stack
            frame.trap_stack = trap_stack.add(PAGE_SIZE);
            map_table.range_map(
                scratch_val,
                scratch_val + size_of::<TrapFrame>(),
                EntryBits::ReadWrite.val(),
            );
        }
        // sincronizo memoria
        super::satp_fence_asid(0);
    }
/// inicializa el trap frame del hart 0
inicializa el trap frame del hart 0
inicializa el trap frame del hart 0
pub fn init(map_table: &mut MapTable) {
        let _satp = map_table.get_initial_satp(0);
        let frame;
        unsafe {
            frame = &mut KERNEL_TRAP_FRAME[0];
        }
        frame.satp = map_table.get_initial_satp(0);
        // El scratch apunta al contexto de mi frame
        let scratch_val = frame as *const TrapFrame as usize;
        super::mscratch_write(scratch_val);
        let trap_stack_mem = Box::<u8>::new(0);
        let trap_stack = Box::<u8>::into_raw(trap_stack_mem);
        unsafe {
            // Reservo memoria para el stack de mi trap handler
            // Como el stack crece de arriba hacia abajo, le paso la dirección del final del stack
            frame.trap_stack = trap_stack.add(PAGE_SIZE);
            map_table.range_map(
                scratch_val,
                scratch_val + size_of::<TrapFrame>(),
                EntryBits::ReadWrite.val(),
            );
        }
        // sincronizo memoria
        super::satp_fence_asid(0);
    }
pub fn init ( map_table : & mut MapTable ) { let _satp = map_table . get_initial_satp ( 0 ) ; let frame ; unsafe { frame = & mut KERNEL_TRAP_FRAME [ 0 ] ; } frame . satp = map_table . get_initial_satp ( 0 ) ; // El scratch apunta al contexto de mi frame let scratch_val = frame as * const TrapFrame as usize ; super :: mscratch_write ( scratch_val ) ; let trap_stack_mem = Box :: < u8 > :: new ( 0 ) ; let trap_stack = Box :: < u8 > :: into_raw ( trap_stack_mem ) ; unsafe { // Reservo memoria para el stack de mi trap handler // Como el stack crece de arriba hacia abajo, le paso la dirección del final del stack frame . trap_stack = trap_stack . add ( PAGE_SIZE ) ; map_table . range_map ( scratch_val , scratch_val + size_of :: < TrapFrame > ( ) , EntryBits :: ReadWrite . val ( ) , ) ; } // sincronizo memoria super :: satp_fence_asid ( 0 ) ; }
inicializa el trap frame del hart 0
inicializa el trap frame del hart 0
map_table
&mut MapTable
map_table
&mut MapTable