📄 system.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 + -