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

📄 system.c

📁 minitos是一个实时的嵌入式操作系统
💻 C
字号:
/*
	miniTOS V0.1.3  1998-2004 (c) 林良水 (Lin LS)
	miniTOS是一个开放源码的软件,授权LGPL,但开发人员不保证本软件的可靠性,
以及对您的损失负任何责任。
	www.minitos.com

	本文实现miniTOS系统内部进程,包刮Idle进程,monitor进程等。

	create by Lin LS ,2004.8
	Bug Report: mail to(林良水)testmyself@163.net
*/


#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdarg.h>
#include <ctype.h>
#include <time.h>

#include "./arch/arm/arm.h"
#include "extdefine.h"

#include "proctbl.h"

void idle1(void);
void idle2(void);
void idle_forever(void);


char KnlStk[1024];
char SysProcStk[N_SYSPROC][100*4];
void (*SysProcess[N_SYSPROC])(void)=
{			//这里默认系统进程数N_SYSPROC=3
  //idle1,
  idle_forever,		//这个一定要建立。
  //idle2,
  idle_forever,		//这个一定要建立。
  idle_forever		//这个一定要建立。
};
void lock_int(void)
{
}
void unlock_int(void)
{
}
char MsgBuf[100];
MAILBOX		m1;
MAILBOX	* ptrM1;
SEMPORE s1,* ptrs1;

extern PROC *pUserTest;

/*
//任务1
void idle1(void)
{
        
        int i=0;
//	ptrM1=CreateMailBox(&m1,MsgBuf);		//2 --IPC MailBox
//	ptrs1=CreateSempore(&s1,1);
	for(;;)
	{
//		SendOneChar(1,'1');
//		ReceiveMessageSuspend(MsgBuf);  // 1---IPC Message 
//		ReceiveMailBoxSuspend(ptrM1,MsgBuf);  //2--IPC MailBox
//		SemporeWaitSuspend(&s1);
		//Sleep(1);
		DelayTicks(100);
		if(i++==10)
		{
		        ResumeProcess(pUserTest);
		}
	//	unlock_int();
	}
}

void idle2(void)
{
	//int i;
	for(;;)

	{
		//SendOneChar(1,'2');
//		SendMessage(&Proc[0],MsgBuf);	//1--IPC Message,dest = Proc[0]=idle1
//		i=SendMailBox(&Proc[0],ptrM1,MsgBuf);  //2--IPC MailBox
//		i=ReleaseSempore(&s1);
//		i=i+'0';
		DelayTicks(250);
//		unlock_int();
	}
}
*/
void idle_forever(void)
{
	for(;;)
        {	
        }
}

//初始化PROC,并建立系统进程
void MO_InitSystem(void)
{
	int i;
	InitTaskRdyPtrToNULL();
//	InitProcIPtoNULL();	//初始化所有的外部进程为NULL		
	SysProcess[0]=idle_forever;	
	for (i=0;i<N_SYSPROC;i++)
  	{				//初始化系统进程表
		SysProcess[i]=idle_forever;	

		SysProc[i].SP=SysProcStk[i];
		SysProc[i].SP+=(100-1)*4;	//stack bottom,little endian,bug????

		SysProc[i].IP=SysProcess[i];	//task
		SysProc[i].CPSR=SVCMODE;	//CPSR value bug???????  SVCMODE
		SysProc[i].SPSR=SVCMODE;
		SysProc[i].r0=0x30;
		SysProc[i].r1=0x31;
		SysProc[i].r2=0x32;
		SysProc[i].r3=0x33;
		SysProc[i].r4=0x34;
		SysProc[i].r5=0x35;
		SysProc[i].r6=0x36;
		SysProc[i].r7=0x37;
		SysProc[i].r8=0x38;
		SysProc[i].r9=0x39;
		SysProc[i].r10=0x3a;
		SysProc[i].r11=0x3b;
		SysProc[i].r12=0x3c;
		SysProc[i].lr=0x3e;
	}
	
	ptrIdle= &SysProc[2];	//Idle3 will run forever
	SysProc[2].priority=IDLE_PRIO;		
//Now Idle proc have been created.	
//Create Other System proc.

//#define TESTIPC
#ifdef TESTIPC
	SysProc[0].priority=PROC_PRIO;//SERVER_PRIO;
	SysProc[0].RunTicksInit=1;
	SysProc[0].RunTicksCount=SysProc[0].RunTicksInit;

	SysProc[1].priority=PROC_PRIO;
	SysProc[1].RunTicksInit=1;
	SysProc[1].RunTicksCount=SysProc[1].RunTicksInit;

	ready(&SysProc[0]);
	ready(&SysProc[1]);
#endif
}

⌨️ 快捷键说明

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