📄 systask.c
字号:
#define SYSTASK_GLOBAL
#include "includes.h"
struct TASKSSTRUCT *Usertasklist;
struct TASKSSTRUCT *Freetasklist;
//------------------------------------------------------
//initialize systask.c
void Init_Systask(void)
{
uchar i;
Usertasklist = NULL;
Freetasklist = NULL;
for(i=0; i<MAX_TASK_NUM; i++)
{
task[i].initproc = NULL;
task[i].entryproc = NULL;
task[i].taskid = 0;
task[i].status = TASK_REMOVED;
}
for(i=0; i<MAX_TASK_TCB; i++)
{
task_tcb[i].msgid = 0;
task_tcb[i].msgptr = NULL;
task_tcb[i].taskid = 0xff;
task_tcb[i].next = Freetasklist;
Freetasklist = &task_tcb[i];
}
}
//find a task
uchar Find_Task(void)
{
uchar i;
for(i=0; i<MAX_TASK_NUM; i++)
{
if(task[i].status==TASK_REMOVED)
{
return i;
}
}
return 0xff;
}
//build a task
uchar Create_Task(void far (*initproc)(),void far (*entryproc)())
{
uchar taskid;
taskid = Find_Task();
if(taskid==0xff) return 0xff;
task[taskid].initproc = initproc;
task[taskid].entryproc = entryproc;
task[taskid].taskid = taskid;
task[taskid].status = TASK_CREATE;
if(initproc!=NULL)initproc();
return taskid;
}
//delete a task
void Remove_Task(uchar taskid)
{
if(taskid >= MAX_TASK_NUM) return;
task[taskid].initproc = NULL;
task[taskid].entryproc = NULL;
task[taskid].taskid = 0xff;
task[taskid].status = TASK_REMOVED;
}
// send a task msg
uchar Send_Taskmsg(uchar taskid,uchar msgid,uchar *msgptr)
{
TASK_STRUCT *task_ptr,*free_ptr;
OS_ENTER_CRITICAL();
if(Freetasklist==NULL)
{
OS_EXIT_CRITICAL();
return TASK_FAIL;
}
free_ptr = Freetasklist;
Freetasklist = Freetasklist->next;
free_ptr->msgid = msgid;
free_ptr->msgptr = msgptr;
free_ptr->taskid = taskid;
#ifdef DEBUG_SYS
u1tb = msgid;
#endif
free_ptr->next = NULL;
task_ptr = Usertasklist;
if(task_ptr == NULL)
{
Usertasklist = free_ptr;
}
else
{
while(task_ptr->next!=NULL)
{
task_ptr = task_ptr->next;
}
task_ptr->next = free_ptr;
}
OS_EXIT_CRITICAL();
return TASK_SUCCESS;
}
// delete a task
void Remove_Taskmsg(void)
{
TASK_STRUCT *task_ptr;
OS_ENTER_CRITICAL();
task_ptr = Usertasklist;
if(task_ptr==NULL)
{
OS_EXIT_CRITICAL();
return ;
}
Usertasklist = Usertasklist->next;
//u1tb = task_ptr->msgid;
//task_ptr->msgid = 0;
//task_ptr->msgptr = NULL;
//task_ptr->taskid = 0xff;
task_ptr->next = Freetasklist;
Freetasklist = task_ptr;
OS_EXIT_CRITICAL();
}
void Task_Schedule(void)
{
TASK_STRUCT *task_ptr;
while(1)
{
//OS_ENTER_CRITICAL();
task_ptr = Usertasklist;
OS_EXIT_CRITICAL();
// if(Usertasklist!=NULL)
// {
// //u1tb = 0xff;
// }
// clr_watchdog();
if(task_ptr!=NULL)
{
Current_Tskmsg = task_ptr;
if(task[Current_Tskmsg->taskid].status==TASK_CREATE)
{
if(task[Current_Tskmsg->taskid].entryproc!=NULL)
{
task[Current_Tskmsg->taskid].entryproc();
clr_watchdog();
}
}
Remove_Taskmsg();
}
Timer_Entry();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -