📅  最后修改于: 2023-12-03 15:20:41.201000             🧑  作者: Mango
TSSN(Task-switched Stack Navigator)是一种存储程序控制技术,用于管理程序控制和数据存储。TSSN将程序控制分解成一个个任务,每个任务都维护了自己的运行栈和数据区。通过不同任务之间的切换和参数传递,实现了程序控制的高度分离和灵活性。
一个TSSN程序由多个任务组成,可以通过tssn_task_struct
结构体定义任务。
struct tssn_task_struct {
char name[TSSN_TASK_NAME_SIZE];
uint32_t stack_size;
tssn_entry_t entry;
void *arg;
void *stack;
#if TSSN_ENABLE_CALLCC
tssn_continuation_t *continuation;
#endif
};
其中,name
是任务的名字(用于调试和输出),stack_size
是任务的栈大小,entry
是任务入口函数,arg
是任务入口函数参数,stack
是任务栈指针,continuation
是协程恢复点(可选)。
在使用TSSN之前,需要初始化TSSN。
int tssn_init(void);
可以通过tssn_create_task
函数创建任务,并指定任务的入口函数和参数。
int tssn_create_task(tssn_task_t *task, const tssn_task_struct_t *task_struct);
可以通过tssn_start
函数启动TSSN。调用该函数将启动TSSN任务调度器,开始执行任务。
int tssn_start(void);
可以通过tssn_stop
函数停止TSSN。调用该函数将停止执行任务,并释放所有资源。
int tssn_stop(void);
可以通过tssn_schedule
函数切换任务。调用该函数将保存当前任务上下文,恢复下一个任务的上下文,并开始执行下一个任务。注意,tssn_schedule
函数必须在任务上下文中调用,否则会导致未定义行为。
void tssn_schedule(void);
可以通过tssn_exit
函数退出当前任务。调用该函数将保存当前任务上下文,回收任务资源,并切换到下一个任务。
void tssn_exit(void);
可以通过tssn_current_task
函数获取当前正在执行的任务。
tssn_task_t *tssn_current_task(void);
TSSN是一种存储程序控制技术,通过将程序划分成多个任务,并在任务之间保存和恢复运行状态和数据区,实现了程序控制的高度分离和灵活性。TSSN可以应用于各种场景,如多线程调度、协程等。