TASK_START_PRIO,
(OS_STK*)&AppStartTaskStk[0],
TASK_STK_SIZE,
(void*)0,
OS_TASK_OPT_STK_CHK|OS_TASK_OPT_STK_CLR);
OSTaskNameSet(TASK_START_PRIO,"StartTask",&err);//设置任务的名称作用??
OSTaskNameSet(OS_TASK_IDLE_PRIO,"uC/OS-IIIdle",&err);//空闲任务
OSTaskNameSet(OS_TASK_STAT_PRIO,"uC/OS-IIStat",&err);//统计任务
//#defineOS_TASK_STAT_EN1u//Enable(1)orDisable(0)thestatisticstask
//因为在本系统中os_cfg_r.h文件中把OS_TASK_STAT_EN设为了1(如上),所以系统的统计任务会建立
//统计任务的建立是在OSInit()中被创建的,代码如下:
OSStart();
}
staticvoidAppStartTask(void*pdata)
{
pdata=pdata;//pdata没有用到,这样的目的是防止编译器提出warning
AppTickInit();//初始化时钟滴答,为操作系统提供时钟
OSStatInit();//初始化统计任务
AppTaskCreate();//创建应用任务
//AppEventCreate();//建立事件
while(TRUE)//任务一般都是一个无限循环的结构
{
OSTimeDlyHMSM(0,0,1,0);//等待1s,交出cpu,由于while无限循环中只有这一条语句,所以
//该起始任务第一次运行以后,就一直处于挂起等待状态
}
}
staticvoidAppTaskCreate(void)//使1-f的任务处于就绪态,一旦OSstart(),优先级最高的任务获得CPU的使用权
{
//INT8Uerr;
OSTaskCreate(led_task_1,(void*)0,&led_task_1_stk[TASK_STK_SIZE-1],6);//创建任务led_task_1,优先级为6
OSTaskCreate(led_task_2,(void*)0,&led_task_2_stk[TASK_STK_SIZE-1],7);
}
staticvoidAppEventCreate(void)
{
INT8Uerr;
#ifOS_SEM_EN>0
EventSem1=OSSemCreate(1);
OSEventNameSet(EventSem1,"Sem.#1",&err);
EventSem2=OSSemCreate(1);
OSEventNameSet(EventSem2,"Sem.#2",&err);
#endif
#ifOS_MBOX_EN>0
EventMbox1=OSMboxCreate((void*)1);
OSEventNameSet(EventMbox1,"Mailbox#1",&err);
EventMbox2=OSMboxCreate((void*)1);
OSEventNameSet(EventMbox2,"Mailbox#2",&err);
#endif
#ifOS_Q_EN>0
EventQ1=OSQCreate(&EventQTbl1[0],EVENT_Q_1_SIZE);
OSEventNameSet(EventQ1,"Queue#1",&err);
EventQ2=OSQCreate(&EventQTbl2[0],EVENT_Q_2_SIZE);
OSEventNameSet(EventQ2,"Queue#2",&err);
#endif
#ifOS_MUTEX_EN>0
EventMutex1=OSMutexCreate(MUTEX_PIP_1,&err);
OSEventNameSet(EventMutex1,"Mutex#1",&err);
EventMutex2=OSMutexCreate(MUTEX_PIP_2,&err);
OSEventNameSet(EventMutex2,"Mutex#2",&err);
#endif
#ifOS_FLAG_EN>0
FlagGrp1=OSFlagCreate(0x00FF,&err);
OSFlagNameSet(FlagGrp1,"Flag#1",&err);
FlagGrp2=OSFlagCreate(0xFF00,&err);
OSFlagNameSet(FlagGrp2,"Flag#2",&err);
#endif
#ifOS_MEM_EN>0
MemPart1=OSMemCreate(&MemPart1Tbl[0],MEM_BLKS_1,MEM_BLK_SIZE_1,&err);
OSMemNameSet(MemPart1,"Partition#1",&err);
MemPart2=OSMemCreate(&MemPart2Tbl[0],MEM_BLKS_2,MEM_BLK_SIZE_2,&err);
OSMemNameSet(MemPart2,"Partition#2",&err);
#endif
}
staticvoidled_task_1(void*pdata)//任务led_task_1的函数代码
{
pdata=pdata;//pdata没有用到,这样的目的是防止编译器提出warning
for(;;)
{
PORTB=0xf0;
OSTimeDlyHMSM(0,0,0,500);//等待1s,交出cpu,任务调度一次
}
}
staticvoidled_task_2(void*pdata)
{
pdata=pdata;//pdata没有用到,这样的目的是防止编译器提出warning
for(;;)
{
PORTB=0x0f;
OSTimeDlyHMSM(0,0,1,0);//等待2s交出cpu
}
}
staticvoidAppTask1(void*pdata)
{
pdata=pdata;
for(;;)
{
Flash_Led(7,1);
OSTimeDlyHMSM(0,0,1,0);
}
}
staticvoidAppTask2(void*pdata)
{
pdata=pdata;
LcdClear();
for(;;)
{
LcdWriteStr(0,0,"illworkhard");
OSTimeDlyHMSM(0,0,1,0);
LcdClear();
LcdWriteStr(0,0,"ificangetthechance");
LcdWriteStr(1,0,"ipromisetoyou");
OSTimeDlyHMSM(0,0,1,0);
LcdClear();
}
}
staticvoidAppTask3(void*pdata)
{
pdata=pdata;
PWM_Init();//pwm初始化,将23通道级联
LcdClear();
DDRT=0x00;//将PORTT设置为输入
for(;;)
{
LcdWriteStr(0,0,"welcometeacher!");
PWM_Init();
PWMDuo_Dutycycle(100);
OSTimeDlyHMSM(0,0,1,0);
Close_PWM();
LcdClear();
OSTimeDlyHMSM(0,0,0,500);
}
}
staticvoidAppTask4(void*pdata)
{
INT8Uerr;
}
staticvoidAppTask5(void*pdata)
{
INT8Uerr;
DDRB_DDRB3=1;
pdata=pdata;
while(TRUE){
AppTask5Ctr++;
#ifOS_Q_EN>0
OSQPost(EventQ1,(void*)"Msg#3toQ1");
OSTimeDly(20);
OSQPost(EventQ2,(void*)"Msg#4toQ2");
#endif
OSTimeDly(40);
PORTB_PB3=~PORTB_PB3;
}