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

📄 main.c

📁 ADS环境下的类似linux内核的操作系统
💻 C
字号:
/* MShowTec - www.mshowtec.com
** msLinux main.c ver1.0
** 20051221 lmjx create limiao@mshowtec.com
** 
*/
#define MSLINUX_MAIN_C

#include "Align.h"
#include "sched.h"
#include "align.h"
#include "fork.h"
#include "sys.h"
#include "sem.h"
#include "msg.h"
#include "kernel.h"
#include "dev.h"
#include "lcddrv.h"
#include "tty.h"

#define TASK0_STACK_SIZE		(ALIGN4B(1025)-4+1)

DEFINE_TASK_STACK(stack0,TASK0_STACK_SIZE);

void init(void)
{
	int pid,i;
	
	printk("[ms-linux]:init \r\n");
	
	if (!(pid=_sys_fork())){
		WinMain();
		sys_exit(0);
	}

	while(1){
		if ((pid=_sys_fork())<0) {
			printk("Fork failed in init\r\n");
			continue;
		}
		if (!pid) {
			sys_setsid();
			CliMain();
			sys_exit(0);
		}
		while (1)
			if (pid == wait(&i))
				break;
		printk("\n\rchild %d died with code %04x\n\r",pid,i);

	}
	sys_exit(0);	/* NOTE! _exit, not exit() */
}

void Task0(void)
{
	printk("[ms-linux]:First task - task0 start\r\n");
	
	mslinux_enable_irq();
	
	if(!_sys_fork()){
		init();
	}	

	for(;;){
		sys_pause();
	}
	
}


/* void start_kernel(void)
** lmjx 051222 ver1.0
**/
void start_kernel(void)
{	
	mem_init();
	trap_init();
	time_init() ;
	sched_init();
	dev_init();

	tty_register();
	ioctrl(DEV_TTY,IOCTRL_INIT,0);

	lcd_register();
	ioctrl(DEV_LCD,IOCTRL_INIT,0);

	printk("[ms-linux]:Start kernel %s\r\n",MSLINUX_KERNEL_VER);
	
	mslinux_semaphore_init();
	mslinux_message_init();
	
	task0.stack.p_SP = (long)(task_stack0+TASK0_STACK_SIZE-1);
	task0.stack.p_TopOfStack = (long)task_stack0;
	task0.stack.L_Stack_SZ = TASK0_STACK_SIZE;
	task_stack0[0] = 0x55;
	move_to_user_mode(task0.stack.p_SP,Task0);

}

⌨️ 快捷键说明

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