//每个任务堆栈的初始化,其中cs必须是0x08, ss则是0x10 eflags是0x206
unsigned int *task_stk_init(void (*task)(), unsigned int *task_stk )
{
unsigned int *stk;
int i;
int j;
stk = task_stk;
*stk-- = 0x10; /*ss*/
*stk-- = (unsigned int)task_stk; /*esp*/
*stk-- = 0x206; /*eflags enable sw interrupt*/
*stk-- = 0x08; /*cs*/
*stk-- = (unsigned int)task; /*eip*/
*stk-- = 0x10; /*ds*/
*stk-- = 0x10; /*es*/
*stk-- = 0x10; /*fs*/
*stk-- = 0x10; /*gs*/
*stk-- = 0x1111; /*ebp*/
*stk-- = 0x2222; /*edi*/
*stk-- = 0x3333; /*esi*/
*stk-- = 0xdddd; /*edx*/
*stk-- = 0xcccc; /*ecx*/
*stk-- = 0xbbbb; /*ebx*/
*stk = 0xaaaa;/*eax*/
return stk;
}
建立3个task:rx_task, main_task和task2,当前这3个task都只暂时做打印。具体功能等任务调度功能调试OK后再细化实现。
void rx_task(void)
{
for(;;)
printk("rx_task()\n");
}