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

📄 os_cpu.h

📁 一个uC/OS-II的simplest edition
💻 H
字号:
/*
*********************************************************************************************************
*                                              Kinix Kernel
*                                        A Teaching-Oriented Kernel
*
*                     (c) Copyright 2006, Kasicass, School of Software Engineering, CQU
*                                           All Rights Reserved
*
*                     Many codes & ideas come from uC/OS-II, for deeper study, referring to
*                     read its codes.
*
*                                       80x86 port, Protected Flat Mode
*                                              i386 gcc compiler
*
* File    : os_cpu.h
* By      : Kasicass
* Version : V1.00
*********************************************************************************************************
*/

#ifndef KINIX_I386_PM_H
#define KINIX_I386_PM_H

/* Kernel Specific */
typedef unsigned int			BOOLEAN;
typedef unsigned char			INT8U;
typedef char				INT8S;
typedef unsigned short			INT16U;
typedef short				INT16S;
typedef unsigned long			INT32U;
typedef long				INT32S;

typedef INT32U				OS_STK;

#define OS_ENTER_CRITICAL()		__asm("pushf;cli;")
#define OS_EXIT_CRITICAL()		__asm("popf;")

#define OS_STK_GROWTH			1
#define OS_TASK_SW()			__asm("int $0x30;")

#define INT_CTX_SW			0x30

/* GDT Selector */
#define CS_SELECTOR			0x08
#define DS_SELECTOR			0x10

// Intel 8259 ports
#define I8259_MASTER_0			0x20		/* 8259 #1, port #1 */
#define I8259_MASTER_1			0x21		/* 8259 #1, port #2 */
#define I8259_SLAVE_0			0xA0		/* 8259 #2, port #1 */
#define I8259_SLAVE_1			0xA1		/* 8259 #2, port #2 */


#define MAX_IDT_ENTRIES			0x40

/* 中断向量 */
#define	INT_VECTOR_DIVIDE		0x0
#define	INT_VECTOR_DEBUG		0x1
#define	INT_VECTOR_NMI			0x2
#define	INT_VECTOR_BREAKPOINT		0x3
#define	INT_VECTOR_OVERFLOW		0x4
#define	INT_VECTOR_BOUNDS		0x5
#define	INT_VECTOR_INVAL_OP		0x6
#define	INT_VECTOR_COPROC_NOT		0x7
#define	INT_VECTOR_DOUBLE_FAULT		0x8
#define	INT_VECTOR_COPROC_SEG		0x9
#define	INT_VECTOR_INVAL_TSS		0xA
#define	INT_VECTOR_SEG_NOT		0xB
#define	INT_VECTOR_STACK_FAULT		0xC
#define	INT_VECTOR_PROTECTION		0xD
#define	INT_VECTOR_PAGE_FAULT		0xE
#define	INT_VECTOR_COPROC_ERR		0x10

/* 中断向量 */
#define	INT_VECTOR_IRQ0			0x20
#define	INT_VECTOR_IRQ8			0x28

/* Gate type */
#define IDTGATE_TRAP			0x8f00	// Trap
#define IDTGATE_INT			0x8e00	// Interrupt
#define IDTGATE_TASK			0x8500	// Task


/*
 ***************************************************************************************
 *                                     STRUCTUREs
 ***************************************************************************************
 */

/* IDT的地址&个数信息 */
struct s_idt_desc
{
	INT16U	limit;
	INT32U 	base;
} __attribute__ ((packed));


/* 门描述符 */
struct s_gate
{
	INT16U	offset_low;	/* Offset Low */
	INT16U	selector;	/* Selector */
	INT16U	type;
	INT16U	offset_high;	/* Offset High */
} __attribute__ ((packed));


typedef struct s_idt_desc	IDT_DESC;
typedef struct s_gate		GATE;



/*
 ***************************************************************************************
 *                                     PROTOTYPEs
 ***************************************************************************************
 */

/* i386/port/os_cpu_c.c */
extern	void	OSCpuInit(void);

/* i386/port/os_cpu_a.s */
extern	void	out_byte(INT32U port, INT8U value);
extern	INT8U	in_byte(INT32U port);


#endif /* KINIX_I386_PM_H */

⌨️ 快捷键说明

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