您好,谢谢您的回复,任务1堆栈是我书写的有误,已经定义过了,现在我在2个任务中都加了延时:<br /><br /><br />#include "config.h"<br />#include "stdlib.h"<br /><br />#define TaskStkLengh 128 //Define the Task0 stack length 定义用户任务0的堆栈长度<br /> <br />OS_STK TaskStk [TaskStkLengh]; //Define the Task0 OS_STK Taskdisp_1 [TaskStkLengh];<br />OS_STK Taskdisp_2 [TaskStkLengh];<br />uint8 i;<br />uint8 a1[5];<br />uint8 b1[5];<br />uint32 year,month,day,week,hour,minute,second;<br />uint8 flag=0;<br /><br />void __irq irq_rtc(void)<br />{<br /> ILR = 0x03; // 清除中断标志 <br /> VICVectAddr = 0x00;<br /><br /> <br /> write_rtc();<br /><br /><br />}<br /><br /><br />void init_ic(void)<br /> {<br /> CCR=0x02;//reset RTC<br /> ILR=0x03;//clear interrupt flag<br /> CIIR=0x01;//second increament interrupt<br /> AMR=0xff;//alarm not interrupt<br /> PREINT=365;//PREINT = int (pclk / 32768) - 1;<br /> PREFRAC=6912;//PREFRAC = pclk - ((PREINT +1) x 32768);<br /> <br /> VICIntSelect =0x00000000;<br /> <br /> VICVectCntl10=0x20|13;<br /> VICVectAddr10=(uint32)irq_rtc;<br /> VICIntEnable=(1<<13);<br /> CCR=0x01;//enable RTC<br /> <br /> }<br /><br /><br /><br />void Task0(void *pdata); //声明Task0 <br />void Task1(void *pdata); //声明Task0 任务1<br />void Task2(void *pdata);<br />OS_EVENT *DispSem;<br /><br /> int main (void)<br />{<br /> OSInit (); <br /> DispSem=OSSemCreate(1); <br /> OSTaskCreate (Task0,(void *)0, &TaskStk[TaskStkLengh - 1], 2); <br /> OSStart ();<br /> return 0; <br />}<br />/*********************************************************************************************************<br />** Task0 任务0<br />********************************************************************************************************/<br /><br /> void Task0 (void *pdata)<br />{ <br /> pdata = pdata;<br /> <br /> PINSEL0=0;<br /> PINSEL1=0;<br /> PINSEL2=0; <br /> IO0DIR=0x01e81c70;<br /> IO1DIR=0xf3ff0000;//P1.31,P1.30,P1.29 P1.28are output<br /> <br /><br /> init_ic();<br /> init_lcd();<br /> read_date();<br /> <br /> <br /> <br /> OSTaskCreate(Task1,(void *)0,&Taskdisp_1[TaskStkLengh-1],3);<br /> OSTaskCreate(Task2,(void *)0,&Taskdisp_2[TaskStkLengh-1],4);<br /> while (1)<br /> {<br /> <br /> <br /> OSTimeDly(10);<br /> <br /> <br /> <br /> <br /> }<br />}<br /> <br /> /*********************************************************************************************************<br />** Task1<br />********************************************************************************************************/<br />void Task1 (void *pdata)<br />{ <br /> uint8 err;<br /> pdata = pdata;<br /><br /> <br /> while(1)<br /> {<br /> OSSemPend(DispSem,0,& err);<br /> turn_on_lcd();<br /> delay(2000000);<br /> disp_1();<br /> delay(2000000);<br /> disp_void(0,0,6,192);<br /> <br /> err=OSSemPost(DispSem);<br /> <br /> OSTimeDly(10);<br /> }<br />}<br /><br /> /*********************************************************************************************************<br />** Task2<br />********************************************************************************************************/<br />void Task2 (void *pdata)<br />{ uint8 err;<br /> pdata=pdata;<br /> <br /> while(1)<br /> {<br /> OSSemPend(DispSem,0,& err);<br /> delay(2000000);<br /> disp_2();<br /> delay(2000000);<br /> disp_void(0,0,6,192);<br /> delay(2000000); <br /> <br /> err=OSSemPost(DispSem); <br /> OSTimeDly(10);<br /> }<br /><br />}<br /><br /><br /> <br />/*********************************************************************************************************<br />** End Of File<br />********************************************************************************************************/<br />现在问题是,2个任务中的循环只执行一次 ,也就是按顺序显示了任务1和任务2的图片,但只显示了一次,没有再继续循环显示。是不是任务2执行完后没有再调用任务1了?这问题出在哪呢?期待回复,谢谢了<br />
|