初始版本

This commit is contained in:
2026-04-23 13:49:53 +08:00
parent c1d6ebd38c
commit ac718a463a
257 changed files with 265681 additions and 0 deletions
+71
View File
@@ -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;
}