|
刚刚移植了一个ucos-ii,建立了三个任务用以实现多任务调度,结果出现问题,部分代码如下:
int main(void)
{
ARMTargetInit(); // do target (uHAL based ARM system) initialisation //
OSInit();
OSTaskCreate(SYS_Task, (void *)0, (OS_STK *)&SYS_Task_Stack[STACKSIZE-1], SYS_Task_Prio);
OSTaskCreate(Task2, (void *)0, (OS_STK *)&Task2_Stack[STACKSIZE-1], Task2_Prio);
OSTaskCreate(Task1, (void *)0, (OS_STK *)&Task1_Stack[STACKSIZE-1], Task1_Prio);
OSTaskCreate(Task3, (void *)0, (OS_STK *)&Task3_Stack[STACKSIZE-1], Task3_Prio);
OSStart(); // start the game //
// never reached //
return 0;
}//main
void Task1(void *Id)
{
int i;
float d;
init_ADdevice();
Uart_Printf("\n");
while(1)
{
for(i=0; i<=3; i++)
{//采样0~3路A/D值
d=GetADresult(i)*2.5/1023; // 数据 采集,处理
Uart_Printf("a%d=%f\t",i,d);
Delay(1000);
}
Uart_Printf("\r");
}
OSTimeDly(2000);
}
void Task3(void *Id)
{
U32 key;
Zlg7289_Reset();//zlg7289复位
while(1)
{ key=GetKey();//得到按键值
Delay(1);
ZLG7289_ENABLE();//使zlg7289占有同步串口
Delay(5);//延时
WriteSDIO(ZLG7289_CMD_DATA0|0);//数码管以方式0译码,第一个数码管亮
WriteSDIO(key%10);//显示个位
Delay(1);//延时
if(key>9)
{//键值大于9显示十位
WriteSDIO(ZLG7289_CMD_DATA0|1);//发送十位数据
WriteSDIO((unsigned char)(key/10));
Delay(1);
WriteSDIO(ZLG7289_CMD_HIDE);//使一、二两位数码管显示
WriteSDIO(3);
}
else
{//键值小于10不显示十位
WriteSDIO(ZLG7289_CMD_HIDE);//使个位数码管显示
WriteSDIO(1);
}
ZLG7289_DISABLE();//zlg7289放弃同步串口控制权
}
OSTimeDly(2000);
}
void SYS_Task(void *Id)
{
uHALr_InstallSystemTimer();
Uart_Printf("start system task.\n");
for (;;)
{
OSTimeDly(10000);
}
}
在主任务中一共设置了三个任务,只截取了其中的任务一和三,我运行程序之后,超级终端显示只有任务一在运行,同学说任务一中的while(1)这是一个死循环,无法跳出执行其他任务,求高手指点一二,新手所学太少,因时间原因求各位高手相助,小弟有礼了 |
阿莫论坛20周年了!感谢大家的支持与爱护!!
如果天空是黑暗的,那就摸黑生存;
如果发出声音是危险的,那就保持沉默;
如果自觉无力发光,那就蜷伏于牆角。
但是,不要习惯了黑暗就为黑暗辩护;
也不要为自己的苟且而得意;
不要嘲讽那些比自己更勇敢的人。
我们可以卑微如尘土,但不可扭曲如蛆虫。
|