📄 osaddtask.c
字号:
#include"..\ucos-ii\includes.h" /* uC/OS interface */#include "..\ucos-ii\add\osaddition.h"#include "..\inc\drv\tchScr.h"#include "..\inc\maro.h"#ifdef OS_Touch_Screen_Task OS_STK Touch_Screen_Stack[STACKSIZE]={0, }; //Touch_Screen_Task堆栈 void Touch_Screen_Task(void *Id); //触摸屏任务 #define Touch_Screen_Task_Prio 9#endif#ifdef OS_KeyBoard_Scan_Task OS_STK Key_Scan_Stack[STACKSIZE]={0, }; //Key_Test_Task堆栈 void Key_Scan_Task(void *Id); //键盘扫描任务 #define Key_Scan_Task_Prio 58#endifOS_STK Lcd_Fresh_Stack[STACKSIZE]= {0, }; //LCD刷新任务堆栈void Lcd_Fresh_Task(void *Id); //LCD刷新任务#define Lcd_Fresh_Task_Prio 59OS_EVENT *LCDFresh_MBox; //LCD刷新邮箱///*****************事件定义*****************///OS_EVENT *Lcd_Disp_Sem; //LCD控制权旗语//and you can use it as folloeing:// Lcd_Disp_Sem=OSSemCreate(1); //创建LCD控制权旗语,初值为1满足互斥条件//// OSSemPend(Lcd_Disp_Sem,0,&err);// OSSemPost(Lcd_Disp_Sem);void OSAddTask_Init(){#ifdef OS_Touch_Screen_Task TchScr_init(); OSTaskCreate(Touch_Screen_Task, (void *)0, (OS_STK *)&Touch_Screen_Stack[STACKSIZE-1], Touch_Screen_Task_Prio);#endif#ifdef OS_KeyBoard_Scan_Task OSTaskCreate(Key_Scan_Task, (void *)0, (OS_STK *)&Key_Scan_Stack[STACKSIZE-1], Key_Scan_Task_Prio );#endif OSTaskCreate(Lcd_Fresh_Task, (void *)0, (OS_STK *)&Lcd_Fresh_Stack[STACKSIZE-1], Lcd_Fresh_Task_Prio); LCDFresh_MBox=OSMboxCreate(NULL);//创建LCD刷新邮箱 Lcd_Disp_Sem=OSSemCreate(1); //创建LCD缓冲区控制权旗语,初值为1满足互斥条件//}#ifdef OS_KeyBoard_Scan_Taskvoid Key_Scan_Task(void *Id)//指示RTOS处于正常工作中{ U32 key; POSMSG pmsg; Uart_Printf("begin key task \n"); for (;;){ key=GetKey(); pmsg=OSCreateMessage(NULL, OSM_KEY,(key)&0xffff,key>>16); if(pmsg) SendMessage(pmsg); }}#endifvoid Lcd_Fresh_Task(void *Id){ INT8U err; Uart_Printf("begin Lcd Fresh Task\n"); for (;;) { OSMboxPend(LCDFresh_MBox,0,&err); LCD_Refresh(); OSTimeDly(250); }}//Lcd_Fresh_Task#ifdef OS_Touch_Screen_Taskvoid Touch_Screen_Task(void *Id) //触摸屏任务{ int x,y; U32 TchScrAction; POSMSG pmsg; Uart_Printf("begin TouchScreen Task\n"); for (;;){ int oldx,oldy; int i; for(;;){ if(TchScrAction!=TCHSCR_ACTION_DOWN && TchScrAction!=TCHSCR_ACTION_MOVE){ if(!(rPDATC&ADS7843_PIN_PEN)){ TchScr_GetScrXY(&x, &y); TchScrAction=TCHSCR_ACTION_DOWN; pmsg=OSCreateMessage(NULL, OSM_TOUCH_SCREEN,(y<<16)|(x&0xffff),TCHSCR_ACTION_DOWN); SendMessage(pmsg); for(i=0;i<20;i++){ if(rPDATC&ADS7843_PIN_PEN){ TchScrAction=TCHSCR_ACTION_UP; pmsg=OSCreateMessage(NULL, OSM_TOUCH_SCREEN,(y<<16)|(x&0xffff),TCHSCR_ACTION_UP); SendMessage(pmsg); break; } OSTimeDly(15); } if(i<20){ //在规定的双击时间之内抬起,检测是不是及时按下 for(i=0;i<20;i++){ if(!(rPDATC&ADS7843_PIN_PEN)){ TchScrAction=TCHSCR_ACTION_DBCLICK; break; } OSTimeDly(15); } if(i==20) //没有在规定的时间内按下 TchScrAction=TCHSCR_ACTION_CLICK; } else{ oldx=x; oldy=y; } break; } } else{ if(rPDATC&ADS7843_PIN_PEN){ //抬起 TchScrAction=TCHSCR_ACTION_UP; x=oldx; y=oldy; break; } else{ TchScr_GetScrXY(&x, &y); if(ABS(oldx-x)>5 ||ABS( oldy-y)>4){ TchScrAction=TCHSCR_ACTION_MOVE; break; } } } OSTimeDly(10); } oldx=x; oldy=y; pmsg=OSCreateMessage(NULL, OSM_TOUCH_SCREEN,(y<<16)|(x&0xffff),TchScrAction); SendMessage(pmsg); OSTimeDly(200); }}#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -