一言不合直接上代码,代码如下所示:
void sTaskListInit(void)
{
p_head = NULL;
}
bool sTaskListAdd(INT16U handle, INT32U period, INT32U tick, TaskFunc_Type func, void *para)
{
ListTask_Type *pvTaskHandle = (ListTask_Type *)malloc(sizeof(ListTask_Type));
if(pvTaskHandle == NULL)
{
return false;
}
else
{
memset(pvTaskHandle, 0x00, sizeof(ListTask_Type));
}
ListTask_Type *pvTaskPoint = p_head;
pvTaskHandle->handle = handle;
pvTaskHandle->period = period;
pvTaskHandle->tick = tick;
pvTaskHandle->func = func;
pvTaskHandle->para = para;
pvTaskHandle->p_next = NULL;
pvTaskHandle->n_next = NULL;
if(pvTaskPoint == NULL)
{
p_head = pvTaskHandle;
}
else
{
while (pvTaskPoint->p_next)
{
pvTaskPoint = pvTaskPoint->p_next;
}
pvTaskPoint->p_next = pvTaskHandle; //链表最后加入了新节点
}
return true;
}
void sTaskExecute(ListTask_Type *pvTaskHandle, INT32U tick)
{
switch(pvTaskHandle->line)
{
case 0:
{
while(1)
{
do
{
pvTaskHandle->tick = tick;
pvTaskHandle->line = 1;
case 1:
{
if(tick - pvTaskHandle->tick > pvTaskHandle->period)
{
pvTaskHandle->func(pvTaskHandle->para);
pvTaskHandle->line = 0;
break;
}
return;
}
}while(0);
}
}
default:
pvTaskHandle->line = 0;
break;
}
}
void sTaskSchedule(void)
{
ListTask_Type *pvTaskHandle;
for(;;)
{
pvTaskHandle = p_head;
do
{
sTaskExecute(pvTaskHandle, ultick);
pvTaskHandle = pvTaskHandle->p_next;
}while(pvTaskHandle);
}
}
|