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

📄 task.c

📁 为AVR单片机提供的底层操作系统代码
💻 C
字号:
/*******************************************************************************
*
*   scheduler 
*   Soft version:   scheduler V1.00
*   File Name:      task.c
*   Author   :      zhaofei ( zhaozhiyuan@163.net )
*   creation date:  2006-05-17
*	module description: task creat and initialize and scheduler
*   Copyright (C) reserve
*
********************************************************************************/
#include "task.h"

// TODO 如果你的任务定义在别的文件里,请在这里引入你的任务所在的文件
#include "..\INC\initTask.h"

char TaskInitFlag; // 任务初始化标志,在任务切换时被自动清零,用户可以用此标志
                   // 位完成任务的启动初始化工作。初始化完毕后由用户自己置1
char TaskInitFlagS; 
volatile static voidFuncPtr TASKFunc[TASK_NUM+1];
volatile static unsigned char curTaskID;
/*******************************************************************************
Function: 		sch_scheduler_init()
Description: 	task scheduler initialization,creat task
Calls: 			
Called By: 		no
Input: 			no
Output: 		no
Return: 		no
Others: 		no
********************************************************************************/
void sch_scheduler_init(void)
{
	unsigned char chNum;
	
	// make sure task func array was initialized
	for (chNum = 0; chNum < TASK_NUM+1; chNum++)
		TASKFunc[chNum] = NULL;
	
	TASKFunc[0] = undefTask;
	curTaskID = 0;
		
	// TODO	这里用户添加自己创建任务工作
	CreatTask(&InitTaskID, InitTask); // 创建初始化任务
	
	// TODO	这里用户添加自己的任务初始化工作
	
	// TODO	这里用户启动自己的任务
	ChangeTask(InitTaskID);
}

/*******************************************************************************
Function: 		sch_scheduler()
Description: 	task scheduler
Calls: 			
Called By: 		no
Input: 			no
Output: 		no
Return: 		no
Others: 		no
********************************************************************************/
void sch_scheduler(void)
{
	for (; ;)
	{
		// 调度用户任务
		if (curTaskID < TASK_NUM+1)
		{
			TASKFunc[curTaskID]();
		}
		else
			;	// 处理非法的调度值
			
		// TODO	这里用户把IdelTask放在这里执行
		IdelTask();
	}
}

/*******************************************************************************
Function: 		CreatTask()
Description: 	创建任务
Calls: 			
Called By: 		no
Input: 			no
Output: 		no
Return: 		no
Others: 		no
********************************************************************************/
char CreatTask(unsigned char *TaskID, voidFuncPtr TFunc)
{
	unsigned char chNum;
	
	if (NULL == TFunc || NULL == TaskID)
		return 0;
		
	for (chNum = 1; chNum < TASK_NUM+1; chNum++)
	{
		if (NULL == TASKFunc[chNum])
		{
			TASKFunc[chNum] = TFunc;
			*TaskID = chNum;
			return 1;
		}
	}
	
	return 0;
}

/*******************************************************************************
Function: 		DeleteTask()
Description: 	删除任务
Calls: 			
Called By: 		no
Input: 			no
Output: 		no
Return: 		no
Others: 		no
********************************************************************************/
char DeleteTask(unsigned char *TaskID)
{	
	if (NULL == TaskID)
		return 0;

	if (*TaskID < TASK_NUM+1)
	{
		if (curTaskID == *TaskID)	// 禁止任务删除自己
			return 0;
		else
		{
			if (NULL == TASKFunc[*TaskID]) // 任务已经不存在也不需要删除
				return 0;
			else
			{
				TASKFunc[*TaskID] = 0;	// 回收任务资源
				*TaskID = 255;			// 确定系统不再调用任务
				return 1;
			}
		}
	}
	else
		return 0;
}

/*******************************************************************************
Function: 		ChangeTask()
Description: 	切换任务
Calls: 			
Called By: 		no
Input: 			no
Output: 		no
Return: 		no
Others: 		no
********************************************************************************/
char ChangeTask(unsigned char TaskID)
{
	if (TaskID < TASK_NUM+1)
	{
		curTaskID = TaskID;
		TaskInitFlag = 0;
		TaskInitFlagS = 0;
		return 1;
	}
	else
		return 0;
}

/*******************************************************************************
Function: 		GetCurTaskID()
Description: 	获取当前运行任务ID 
Calls: 			
Called By: 		no
Input: 			no
Output: 		no
Return: 		no
Others: 		no
********************************************************************************/
unsigned char GetCurTaskID(void)
{	
	return (curTaskID);
}

/*******************************************************************************
Function: 		undefTask()
Description: 	系统未定义任务,防止系统非法运行
Calls: 			
Called By: 		no
Input: 			no
Output: 		no
Return: 		no
Others: 		no
********************************************************************************/
TASK undefTask(void)
{
	
}

/* EOF */

⌨️ 快捷键说明

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