⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cpu_init.c

📁 日本著名的的嵌入式实时操作系统T-Kernel的源码及用户手册。
💻 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 + -