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

📄 cpu_support.s

📁 嵌入式系统开发 TOPPERS and JSP Kernel Release 1.3 TOPPERS = Toyohashi Open Platform for Embedded Real-Tim
💻 S
字号:
/* *  TOPPERS/JSP Kernel *      Toyohashi Open Platform for Embedded Real-Time Systems/ *      Just Standard Profile Kernel * *  Copyright (C) 2000,2001 by Embedded and Real-Time Systems Laboratory *                              Toyohashi Univ. of Technology, JAPAN *  Copyright (C) 2002 by Monami software, Limited Partners. * *  惧淡螟侯涪荚は·Free Software Foundation によって给山されている *  GNU General Public License の Version 2 に淡揭されている掘凤か·笆 *  布の(1)×(4)の掘凤を塔たす眷圭に嘎り·塑ソフトウェア∈塑ソフトウェ *  アを猖恃したものを崔むˉ笆布票じ∷を蝗脱ˇ剩澜ˇ猖恃ˇ浩芹邵∈笆布· *  网脱と钙ぶ∷することを痰浸で钓满するˉ *  (1) 塑ソフトウェアをソ〖スコ〖ドの妨で网脱する眷圭には·惧淡の螟侯 *      涪山绩·この网脱掘凤および布淡の痰瘦沮惮年が·そのままの妨でソ〖 *      スコ〖ド面に崔まれていることˉ *  (2) 塑ソフトウェアを浩网脱材墙なバイナリコ〖ド∈リロケ〖タブルオブ *      ジェクトファイルやライブラリなど∷の妨で网脱する眷圭には·网脱 *      に燃うドキュメント∈网脱荚マニュアルなど∷に·惧淡の螟侯涪山绩· *      この网脱掘凤および布淡の痰瘦沮惮年を非很することˉ *  (3) 塑ソフトウェアを浩网脱稍材墙なバイナリコ〖ドの妨または怠达に寥 *      み哈んだ妨で网脱する眷圭には·肌のいずれかの掘凤を塔たすことˉ *    (a) 网脱に燃うドキュメント∈网脱荚マニュアルなど∷に·惧淡の螟侯 *        涪山绩·この网脱掘凤および布淡の痰瘦沮惮年を非很することˉ *    (b) 网脱の妨轮を·侍に年める数恕によって·惧淡螟侯涪荚に鼠桂する *        ことˉ *  (4) 塑ソフトウェアの网脱により木儡弄または粗儡弄に栏じるいかなる禄 *      巢からも·惧淡螟侯涪荚を倘勒することˉ * *  塑ソフトウェアは·痰瘦沮で捏丁されているものであるˉ惧淡螟侯涪荚は· *  塑ソフトウェアに簇して·その努脱材墙拉も崔めて·いかなる瘦沮も乖わ *  ないˉまた·塑ソフトウェアの网脱により木儡弄または粗儡弄に栏じたい *  かなる禄巢に簇しても·その勒扦を砷わないˉ * *  @(#) $Id: cpu_support.S,v 1.3 2002/04/11 04:37:48 honda Exp $ */#define _MACRO_ONLY#include "jsp_kernel.h"#include "offset.h"	.globl activate_ractivate_r:	sti	popl	%eax	jmp	*%eax/* *  Task dispatcher */	.text	.globl dispatch	.globl exit_and_dispatchdispatch:	pusha	movl	runtsk, %ebx	movl	%esp, TCB_esp(%ebx)	movl	$dispatch_r, %eax	movl	%eax, TCB_eip(%ebx)exit_and_dispatch:dispatch_loop:		movl	schedtsk, %ebx	movl	%ebx, runtsk	cmpl	$0, %ebx	jne	dispatch_1	movl	$0, enadsp	sti	hlt	cli	movl	$1, enadsp	jmp	dispatch_loopdispatch_1:	movl	TCB_esp(%ebx), %esp	movl	TCB_eip(%ebx), %eax	jmp	*%eaxdispatch_r:	call	calltex	popa	ret#define CALL_HANDLER(x) incl nest; sti; call x; cli; decl nest/* *   充哈みハンドラの叫掐庚借妄 * *   叫掐庚借妄のマクロからハンドラの戎孟を%eaxに掐れて钙び叫される。 */	.text	.globl interruptinterrupt:	cmpl	$0, nest	jne	interrupt_2		/* 柒娄のハンドラ */	/* 嘲娄のハンドラ */	movl	runtsk, %ebx		/* 充り哈み脱スタックに磊り仑える。 */	movl	%esp, TCB_esp(%ebx)	movl	STACKTOP, %espinterrupt_2:					CALL_HANDLER(*%eax)	cmpl	$0, nest	jne	interrupt_3	cmpl	$1, reqflg	je	ret_int	movl	runtsk, %ebx	movl	TCB_esp(%ebx), %esp	jmp	interrupt_3ret_int:	movl	$0, reqflg	cmpl	$0, enadsp	je	ret_int_r	movl	runtsk, %ebx	cmpl	%ebx, schedtsk	je	ret_int_r	movl	$ret_int_r, %eax	movl	%eax, TCB_eip(%ebx)	jmp	dispatch_loopret_int_r:	call	calltexinterrupt_3:		popa	iret/* *   CPU毋嘲ハンドラの叫掐庚借妄 *//* %ecxに毋嘲戎规 *//* %edxにCPU毋嘲に簇する攫鼠を淡脖している挝拌の黎片戎孟 */	.extern exc_table__exception_1:	movl	%esp, %ebx	movl	12(%ebx), %edxexception:	cmpl	$0, nest	jne	exception_2	movl	runtsk, %ebx	movl	%esp, TCB_esp(%ebx)	movl	STACKTOP, %espexception_2:	pushl	%edx	movl	exc_table(,%ecx,4), %eax	CALL_HANDLER(*%eax)	addl	$4, %esp	cmpl	$0, nest	jne	exception_3	cmpl	$1, reqflg	je	ret_exc	movl	runtsk, %ebx	movl	TCB_esp(%ebx), %esp	jmp	exception_3ret_exc:	movl	$0, reqflg	cmpl	$0, enadsp	je	ret_exc_r	movl	runtsk, %ebx	cmpl	%ebx, schedtsk	je	ret_exc_r	movl	$ret_exc_r, %eax	movl	%eax, TCB_eip(%ebx)	jmp	dispatch_loopret_exc_r:	call	calltexexception_3:	popa	addl	$4, %esp	iret#define	exception(excno)	 \	.global exception##excno ; \exception##excno:		; \	pushl	$0		; \	pusha			; \	movl	$excno, %ecx	; \	jmp	__exception_1#define	error_exception(excno)	 \	.global exception##excno ; \exception##excno:		; \	pusha			; \	movl	$excno, %ecx	; \	jmp	__exception_1	; \	exception(0)	exception(1)	exception(2)	exception(3)	exception(4)	exception(5)	exception(6)	exception(7)	error_exception(8)		error_exception(9)	error_exception(10)	error_exception(11)	error_exception(12)	error_exception(13)	error_exception(14)	exception(16)	error_exception(17)	exception(18)	exception(19)

⌨️ 快捷键说明

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