📄 cpu_init.c
字号:
/* *---------------------------------------------------------------------- * T-Kernel * * Copyright (C) 2004 by Ken Sakamura. All rights reserved. * T-Kernel is distributed under the T-License. *---------------------------------------------------------------------- * * Version: 1.01.00 * Released by T-Engine Forum(http://www.t-engine.org) at 2004/6/28. * *---------------------------------------------------------------------- *//* * cpu_init.c (M32104) * CPU-Dependent Initialization/Finalization */#include "kernel.h"#include "task.h"#include "cpu_insn.h"/* For saving monitor exception handler */EXPORT MONHDR SaveMonHdr;/* available coprocessor */EXPORT ATR available_cop;/* * CPU-dependant initialization */EXPORT ER cpu_initialize( void ){IMPORT void dispatch_entry( void ); /* Dispatcher call */IMPORT void call_entry( void ); /* System call */IMPORT void _tk_ret_int( void ); /* 'tk_ret_int()' only call */IMPORT void call_dbgspt( void ); /* Debugger support call */ /* Save monitor exception handler */ SaveMonHdr.default_hdr = SCArea->intvec[VECNO_DEFAULT]; SaveMonHdr.monitor_hdr = SCArea->intvec[VECNO_MONITOR]; SaveMonHdr.break_hdr = SCArea->intvec[VECNO_BREAK]; SaveMonHdr.icu2_hdr = SCArea->intvec[VECNO_ICU2]; SaveMonHdr.int5_hdr = SCArea->intvec[VECNO_INT5]; /* No available coprocessor */ available_cop = TA_NULL; /* Register exception handler used on OS */ define_inthdr(EIT_TRAP(TRAP_SVC), call_entry); define_inthdr(EIT_TRAP(TRAP_RETINT), _tk_ret_int); define_inthdr(EIT_TRAP(TRAP_DISPATCH), dispatch_entry);#if USE_DBGSPT define_inthdr(EIT_TRAP(TRAP_DEBUG), call_dbgspt);#endif return E_OK;}/* * CPU-dependant finalization */EXPORT void cpu_shutdown( void ){ /* Restore saved monitor exception handler */ SCArea->intvec[VECNO_DEFAULT] = SaveMonHdr.default_hdr; SCArea->intvec[VECNO_MONITOR] = SaveMonHdr.monitor_hdr; SCArea->intvec[VECNO_BREAK] = SaveMonHdr.break_hdr; SCArea->intvec[VECNO_ICU2] = SaveMonHdr.icu2_hdr; SCArea->intvec[VECNO_INT5] = SaveMonHdr.int5_hdr;}/* ------------------------------------------------------------------------- *//* * Task exception handler startup reservation */EXPORT void request_tex( TCB *tcb ){ /* Cannot set to the task operating at protected level 0 */ if ( tcb->isysmode == 0 ) { tcb->reqdct = 0x80; }}/* * Task exception handler startup setting */EXPORT FP setup_texhdr( INT *p_texcd ){ FP texhdr; INT texcd; UINT m; /* Called in interrupt disable state */ ctxtsk->reqdct = 0; /* Free DCT */ /* Get exception code */ m = 0x00000001; for ( texcd = 0; texcd <= 31; texcd++ ) { if ( (ctxtsk->exectex & m) != 0 ) break; m <<= 1; } /* Exception does not occur /Exception is freed */ if ( texcd > 31 ) return NULL; ctxtsk->exectex = 0; ctxtsk->pendtex &= ~m; ctxtsk->texflg |= ( texcd == 0 )? TEX0_RUNNING: TEX1_RUNNING; texhdr = ctxtsk->texhdr; ENABLE_INTERRUPT; *p_texcd = texcd; return texhdr;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -