arm.c

来自「一个基于ARM9的操作系统, 实现了很多的功能,包括内存管理,进程创建等」· C语言 代码 · 共 69 行

C
69
字号
/*
* file:
*       arm.c
* description:
*       implementation code depend on architecture.
*/

#define SYS_MODE        0x1f


/*
* extern functions
*/
extern void _exit_thread(int exit_code);
extern void _dbg_print(const char* format, ...);


void _thread_context_init(thread_context* context, void* proc,
            void* param, unsigned int stack_top, unsigned int stack_bottom)
{
    context->_cpsr= SYS_MODE;
    context->_r4  = (unsigned int)_exit_thread;
    context->_r5  = (unsigned int)proc;
    context->_r6  = (unsigned int)param;
    context->_r7  = 0;
    context->_r8  = 0;
    context->_r9  = 0;
    context->_r10 = stack_bottom;
    context->_r11 = 0;
    context->_ip  = 0;
    context->_sp  = stack_top;
    context->_lr  = (unsigned int)_start_thread;
}


void Isr_UndefineHandler(unsigned int addr)
{
    _dbg_print("EXCEPTION : UNDEFINED INSTRUCTION !!!\n");
    _dbg_print("  pc : [<%08x>]\n", addr);
    while(1);
}


void Isr_SwiHandler(unsigned int addr, unsigned int swi_no)
{
    _dbg_print("EXCEPTION : SOFTWARE INTERRUPT !!!\n");
    _dbg_print("  pc : [<%08x>]    number : %d\n", addr, swi_no);
    while(1);
}


void Isr_PrefetchAbortHandler(unsigned int addr)
{
    _dbg_print("EXCEPTION : PREFETCH ABORT !!!\n");
    _dbg_print("  pc : [<%08x>]\n", addr);
    while(1);
}


void Isr_DataAbortHandler(unsigned int addr)
{
    _dbg_print("EXCEPTION : DATA ABORT !!!\n");
    _dbg_print("  pc : [<%08x>]\n", addr);
    while(1);
}


/* end of file */

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?