📄 arm.c
字号:
/*
* 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 + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -