|
本帖最后由 hongkong 于 2013-8-15 14:32 编辑
typedef struct {
void (* pTask)(void);
uint Delay;
uint Period;
uchar RunMe;
}sTask;
#define OS_MAX_TASKS (14)
#define ERROR_OS_MANY_TASKS 1
#define ERROR_OS_DELETE_TASK 2
#define RETURN_ERROR 1
#define RETURN_OK 0
sTask OS_tasks_G[OS_MAX_TASKS];
uchar Error_code_G=0;
uchar old_Error_code_G=0;
/*********************************************************/
void OS_Dispatch_Tasks(void)
{
uchar Index;
for (Index=0;Index<OS_MAX_TASKS;Index++)
{
if(OS_tasks_G[Index].RunMe>0)
{
(*OS_tasks_G[Index].pTask)();
OS_tasks_G[Index].RunMe-=1;
if(OS_tasks_G[Index].Period==0)
{
OS_Delete_Task(Index);
}
}
}
}
unsigned char OS_ADD_Task(void (*pFunction)(),const uint DELAY,const uint PERIOD)
{
uchar Index=0;
while ((OS_tasks_G[Index].pTask!=0)&&(Index<OS_MAX_TASKS))
{
Index++;
}
if(Index==OS_MAX_TASKS)
{
Error_code_G=ERROR_OS_MANY_TASKS;
return OS_MAX_TASKS;
}
OS_tasks_G[Index].pTask=pFunction;
OS_tasks_G[Index].Delay=DELAY;
OS_tasks_G[Index].Period=PERIOD;
OS_tasks_G[Index].RunMe=0;
return Index;
}
uchar OS_Delete_Task(const uchar TASK_INDEX)
{
uchar Return_code;
if(OS_tasks_G[TASK_INDEX].pTask==0)
{
Error_code_G=ERROR_OS_DELETE_TASK;
Return_code=RETURN_ERROR;
}
else
{
Return_code=RETURN_OK;
}
OS_tasks_G[TASK_INDEX].pTask=0x0000;
OS_tasks_G[TASK_INDEX].Delay=0;
OS_tasks_G[TASK_INDEX].Period=0;
OS_tasks_G[TASK_INDEX].RunMe=0;
return Return_code;
}
void Sch(void)
{
uchar Index;
for(Index=0;Index<OS_MAX_TASKS;Index++)
{
if(OS_tasks_G[Index].pTask)
{
if(OS_tasks_G[Index].Delay==0)
{
OS_tasks_G[Index].RunMe+=1;
if(OS_tasks_G[Index].Period)
{
OS_tasks_G[Index].Delay=OS_tasks_G[Index].Period;
}
}
else
{
OS_tasks_G[Index].Delay-=1;
}
}
}
} |
阿莫论坛20周年了!感谢大家的支持与爱护!!
你熬了10碗粥,别人一桶水倒进去,淘走90碗,剩下10碗给你,你看似没亏,其实你那10碗已经没有之前的裹腹了,人家的一桶水换90碗,继续卖。说白了,通货膨胀就是,你的钱是挣来的,他的钱是印来的,掺和在一起,你的钱就贬值了。
|