📄 main.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 "tty.h"
#define TASK0_STACK_SIZE (ALIGN4B(1025)-4+1)
DEFINE_TASK_STACK(stack0,TASK0_STACK_SIZE);
struct task_struct *sleep;
void delay_test(int tic)
{
while(tic-->0){
__asm{nop};
}
}
void test0()
{
while(1){
semaphore_take(USER_SEM_TEST_0);
show_stat();
semaphore_give(USER_SEM_TEST_1);
}
}
void test1()
{
semaphore_give(USER_SEM_TEST_0);
while(1){
semaphore_take(USER_SEM_TEST_1);
printk("test1 get semaphone\r\n");
delay_test(100000);
semaphore_give(USER_SEM_TEST_0);
}
}
void test2()
{
while(1){
__asm{nop};
}
}
void init(void)
{
int pid,i;
printk("[ms-linux]:init \r\n");
while(1){
if ((pid=_sys_fork())<0) {
printk("Fork failed in init\r\n");
continue;
}
if (!pid) {
sys_setsid();
test0();
sys_exit(0);
}
if (!_sys_fork()) {
test1();
sys_exit(0);
}
if (!_sys_fork()) {
test2();
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)
{
int i;
int irq_save;
printk("[ms-linux]:First task - task0 start\r\n");
mslinux_enable_irq();
if(!_sys_fork()){
init();
}
for(;;){
sys_pause();
}
}
void user_semaphore_init()
{
semaphore_init(USER_SEM_TEST_0,1,0);
semaphore_init(USER_SEM_TEST_1,1,0);
semaphore_init(USER_SEM_TEST_2,1,0);
}
/* void start_kernel(void)
** lmjx 051222 ver1.0
**/
void start_kernel(void)
{
mem_init();
trap_init();
time_init() ;
sched_init();
dev_init();
//dev_user_init();
tty_register();
ioctrl(DEV_TTY,IOCTRL_INIT,0);
printk("\r\nwww.mshowtec.com\r\n\r\n");
printk("Welcom to ms-Linux World\r\n");
printk("[ms-linux]:Start kernel %s\r\n",MSLINUX_KERNEL_VER);
mslinux_semaphore_init();
mslinux_message_init();
user_semaphore_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 + -