本帖最后由 1471225546 于 2014-4-2 16:20 编辑
白高兴一场:
小弟想移植Ucos,其在 SYS_Task下创建了2个任务,测试了下,任务的挂起,唤醒,可以,但是只要一涉及到时间的函数都会跑到闲置函数中去,怀疑是时间函数有问题,定义了一个SysTick_Handler,可是进都没有进去。而且任务运行的时候只能在当前优先级最高级的任务中使劲运行,悲剧了,多任务都没有进行切换。我怀疑是不是时间函数没有初始化。求大神指导,都搞了我好几天了。
void SysTick_Handler(void)
{
OS_CPU_SR cpu_sr;
OS_ENTER_CRITICAL();;
OSIntNesting++;
OS_EXIT_CRITICAL();
OSTimeTick();
OSIntExit();
}
//定义堆栈空间
#define STACKSIZE 128
OS_STK SYS_Task_Stack[STACKSIZE];
#define SYS_Task_Prio 54
void SYS_Task(void *Id);
OS_STK Task1_Stack[STACKSIZE];
void Task1(void *Id);
#define Task1_Prio 51
OS_STK Task2_Stack[STACKSIZE];
void Task2(void *Id);
#define Task2_Prio 53
void Task1(void *Id) //优先级最高
{
int n = 0,i;
INT8U temp;
while(1)
{
SEND_ISP_UART(0x77); //--串口的打印函数
OSTimeDly(10); //延时 如果不唤醒,就跑到闲置的任务中去了
}
}
void Task2(void *Id)//次高
{
int n = 0,i;
while(1)
{
SEND_ISP_UART(0x33); //--串口的打印函数
OSTimeDlyResume(51) ; //唤醒下。然后就跑到上面的任务中了
}
}
void SYS_Task(void *Id)//最低 ----貌似没这个任务的事,0x66都没收到过
{
OSTaskCreate(Task1, (void *)0, (OS_STK *)&Task1_Stack[STACKSIZE-1], Task1_Prio);
OSTaskCreate(Task2, (void *)0, (OS_STK *)&Task2_Stack[STACKSIZE-1], Task2_Prio);
while(1)
{
SEND_ISP_UART(0x66); //--串口的打印函数
};
}
int32_t main()
{
UNLOCKREG();
SystemInit();
OSTimeSet(0);
UART_Driver_115200BPS();
OSInit();
UNLOCKREG();
OSTaskCreate(SYS_Task, (void *)0, (OS_STK *)&SYS_Task_Stack[STACKSIZE-1], SYS_Task_Prio); //创建用户函数
SEND_ISP_UART(0x11);
OSStart();
return 0;
}
|