微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > ucos-ii学习笔记——s12 lcd led 两任务信号量通信

ucos-ii学习笔记——s12 lcd led 两任务信号量通信

时间:11-28 来源:互联网 点击:

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);

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top