⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 osaddtask.c

📁 S3C44B0X全套培训资料及源代码 e008s3c44b0x
💻 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 + -