staticvoidAppTask3(void*pdata);
staticvoidAppTask4(void*pdata);
staticvoidAppTask5(void*pdata);
staticvoidAppTask6(void*pdata);
staticvoidAppTask7(void*pdata);
staticvoidAppTask8(void*pdata);
staticvoidAppTask9(void*pdata);
staticvoidAppTaskA(void*pdata);
staticvoidAppTaskB(void*pdata);
staticvoidAppTaskC(void*pdata);
staticvoidAppTaskD(void*pdata);
staticvoidAppTaskE(void*pdata);
staticvoidAppTaskF(void*pdata);
staticvoidAppTickInit(void);
staticvoidlcd_task(void*pdata);
staticvoidled_task(void*pdata);
OS_EVENT*event_sem;//声明信号量是事件控制块ECB类型的指针存放创建信号量函数返回的创建的
INT8Uerr;//定义一个错误信息
//12864要显示的内容
staticunsignedchars1[]={"汉字显示LCD"};
staticunsignedchars2[]={"MC9S12开发系统"};
staticunsignedchars3[]={"goodgoodstudy"};
staticunsignedchars4[]={"2012-10-17-H23木"};
//INT8Utimes_lcd=0;//记录任务lcd的运行次数
//INT8Utimes_led=0;//任务led的运行次数
voidmain(void)
{//因为没有外设,所以不存在硬件初始化函数
INT8Uerr;
INT16UStartdata=0x1234;//???
//开始执行的位置另一种定义方式:TASKDATA.myPPAGE=0x1234,为结构体变量的初始化
DDRB=0xff;//B口led设为输出
PORTB=0xff;//led初始状态为灭
DDRA|=0x03;//液晶的两条线
init_lcd();
pllbus_init16m();//时钟初始化为16M
//LcdInit();//LCD初始化
OSInit();
event_sem=OSSemCreate(1);
//在主函数中创建信号量返回值为创建的信号量指针,参数是信号量的计数器的值
//用该参数对信号量计数器OSEventCnt进行初始化
//1即代表只创建一个信号量,代表信号量用于对共享资源的访问(例如,把它当做二值信号量使用),详见P166
//创建起始任务,作用:初始化时钟滴答,为操作系统提供时钟。初始化统计任务,创建应用任务,建立事件
OSTaskCreateExt(AppStartTask,//创建开始任务处于休眠态的任务经过这个函数处理后转为就绪态
(void*)&Startdata,//???
(OS_STK*)&AppStartTaskStk[TASK_STK_SIZE-1],
TASK_START_PRIO,//优先级为5
TASK_START_PRIO,
(OS_STK*)&AppStartTaskStk[0],
TASK_STK_SIZE,
(void*)0,
OS_TASK_OPT_STK_CHK|OS_TASK_OPT_STK_CLR);
//该函数参数的具体介绍见P121
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(lcd_task,(void*)0,&lcd_task_stk[TASK_STK_SIZE-1],6);//创建任务lcd_task,优先级为6
OSTaskCreate(led_task,(void*)0,&led_task_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);