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

📄 os.c

📁 描述嵌入式系统中最最基本的操作系统框架,由此可以写自己的嵌入式操作系统
💻 C
字号:
/// 1、任务控制
#define MAX_TASK	3				//一共几个任务
#define __task
#define OSWaitSignal(N) TCB[N].CurDelay = 65535
#define OSSendSignal(N)	TCB[N].CurDelay = 1

typedef const void (*Task)(void);	//任务变量
uchar CurTaskId;					//当前执行的任务

struct _TCB{
	ushort Delay;					//需要延时的长度
	ushort CurDelay;				//倒计时,到0了就执行任务
	Task* pTask;					//任务过程
} TCB[MAX_TASK];

/// 2、操作系统时钟中断服务程序

void TimeTickISR() __irq {
	uchar i;
	for (i=0; i<MAX_TASK; i++){
		_TCB* pTCB = TCB[i];
		CurTaskId = i;
		/// if(pTCB->CurDelay == 65535) continue; //如需等待信号,就用这个
		pTCB->CurDelay--;
		if(pTCB->CurDelay == 0){
			pTCB->CurDelay = pTCB->Delay;
			pTask();
		}
	}
}

//定义任务
//参数:任务号,延时时间间隔,任务服务程序
void OSDefineTask(char TaskNum, ushort Delay, Task* pTask){
	_TCB* pTCB = TCB[TaskNum];
	pTCB->Delay = pTCB->CurDelay = Delay;
	pTCB->pTask = pTask;
}

/// 3、初始化任务
void Task1() __task{
	PIO ^= 1;
}

void Task2() __task{
	PIO ^= 2;
}

void Task3() __task{
	PIO ^= 4; 
}

void main(){
	OSDefineTask(0, 100, Task1);		//任务1每100Tick触发一次
	OSDefineTask(0, 200, Task2);		//任务2每200Tick触发一次
	OSDefineTask(0, 300, Task3);		//任务3每300Tick触发一次
	while(1);
}

⌨️ 快捷键说明

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