高级会员
- 积分
- 821
- 金钱
- 821
- 注册时间
- 2013-6-5
- 在线时间
- 141 小时
|
发表于 2017-4-15 19:00:44
|
显示全部楼层
unsigned char task_id; /*当前活动任务号*/
unsigned char task_sp[MAX_TASKS]; /*任务的栈指针,实际就是每个任务的SP*/
unsigned int task_sleep[MAX_TASKS]; /*任务休眠计时器*/
unsigned char idata task_stack[MAX_TASKS][MAX_TASK_DEP]; /*任务私栈*/
void os_task_switch(void) /*任务切换函数(任务调度器)*/
{
task_sp[task_id] = SP;
while(1)
{
task_id++;
if(task_id == MAX_TASKS) task_id = 0;
if (task_sleep[task_id]==0) break;
}
SP = task_sp[task_id];
}
void os_task_load(unsigned int fn, unsigned char tid) /*任务装入函数.将指定的函数(参数1)装入指定(参数2)的任务槽中.*/
{
task_stack[tid][0] = (unsigned int)fn & 0xff;
task_stack[tid][1] = (unsigned int)fn >> 8;
task_sp[tid] = task_stack[tid]+1; /*准备 RETURN 的数据,SP将等于task_stack[tid][1]的地址*/
task_sleep[tid]=0;
}
|
|