初始版本
This commit is contained in:
@@ -0,0 +1,71 @@
|
||||
/*
|
||||
* Implementation of automatic protothreads initialization and scheduling
|
||||
*/
|
||||
|
||||
#include "pt_task.h"
|
||||
#include "stdio.h"
|
||||
|
||||
static int task_start_sch_entry(pt_t *p)
|
||||
{
|
||||
PT_BEGIN(p);
|
||||
|
||||
PT_END(p);
|
||||
}
|
||||
PT_TASK_START(task_start_sch_entry);
|
||||
|
||||
|
||||
static int task_end_sch_entry(pt_t *p)
|
||||
{
|
||||
PT_BEGIN(p);
|
||||
|
||||
|
||||
|
||||
PT_END(p);
|
||||
}
|
||||
PT_TASK_END(task_end_sch_entry);
|
||||
|
||||
bool pt_task_is_active(pt_task_t *task)
|
||||
{
|
||||
if( ( task->status < PT_WAITING ) &&
|
||||
(task->status< PT_EXITED) ){
|
||||
|
||||
return 1;
|
||||
|
||||
}else{
|
||||
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Schedule all registered task functions
|
||||
*/
|
||||
void pt_task_schedule(void)
|
||||
{
|
||||
pt_task_t* start = (pt_task_t*) PT_TASK_OBJ_START;
|
||||
pt_task_t* end = (pt_task_t*) PT_TASK_OBJ_END;
|
||||
|
||||
for (pt_task_t* task = start; task < end; task++)
|
||||
{
|
||||
if (task->fn_entry && task->pt && task->status < PT_ENDED)
|
||||
{
|
||||
task->status = task->fn_entry(task->pt);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
bool pt_task_all_idle(void)
|
||||
{
|
||||
bool is_idle = true;
|
||||
pt_task_t* start = (pt_task_t*)PT_TASK_OBJ_START;
|
||||
pt_task_t* end = (pt_task_t*)PT_TASK_OBJ_END;
|
||||
for (pt_task_t* task = start; task < end; task++) {
|
||||
if (task->pt && pt_task_is_active(task)) {
|
||||
is_idle = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
return is_idle;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user