📄 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"
#include "..\inc\drv\zlg7289.h"
#if OS_Touch_Screen_Task==1
OS_STK Touch_Screen_Stack[STACKSIZE]={0, }; //Touch_Screen_Task堆栈
#define Touch_Screen_Task_Prio 9
#endif
#if OS_KeyBoard_Scan_Task==1
OS_STK Key_Scan_Stack[STACKSIZE]={0, }; //Key_Test_Task堆栈
static void Key_Scan_Task(void *Id); //键盘扫描任务
#define Key_Scan_Task_Prio 10
#endif
OS_STK SYS_Task_Stack[STACKSIZE]= {0, }; //system task刷新任务堆栈
#define SYS_Task_Prio 1
static void SYS_Task(void *Id);
#if DIRECT_DISPLAY==0
OS_STK Lcd_Fresh_Stack[STACKSIZE]= {0, }; //LCD刷新任务堆栈
static void Lcd_Fresh_Task(void *Id); //LCD刷新任务
#define Lcd_Fresh_Task_Prio 59
OS_EVENT *LCDFresh_MBox; //LCD刷新邮箱
#endif
///*****************事件定义*****************///
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);
/***************************************
系统任务,有最高的优先级(1),启动系统的其他任务
****************************************/
static void SYS_Task(void *Id)
{
OSRunning=TRUE; //begin OS
uHALr_InstallSystemTimer();
Uart_Printf("start system task.\n");
#if OS_KeyBoard_Scan_Task==1
KeyBoard_init();
#endif
// CAN_Test();
OSTaskDel(OS_PRIO_SELF);
/* for (;;)
{
OSTimeDly(10000);
}*/
}
void OSAddTask_Init()
{
#if OS_Touch_Screen_Task==1
TchScr_init();
OSTaskCreate(Touch_Screen_Task, (void *)0, (OS_STK *)&Touch_Screen_Stack[STACKSIZE-1], Touch_Screen_Task_Prio);
#endif
#if OS_KeyBoard_Scan_Task==1
OSTaskCreate(Key_Scan_Task, (void *)0, (OS_STK *)&Key_Scan_Stack[STACKSIZE-1], Key_Scan_Task_Prio );
#endif
#if DIRECT_DISPLAY==0
OSTaskCreate(Lcd_Fresh_Task, (void *)0, (OS_STK *)&Lcd_Fresh_Stack[STACKSIZE-1], Lcd_Fresh_Task_Prio);
#endif
OSTaskCreate(SYS_Task, (void *)0, (OS_STK *)&SYS_Task_Stack[STACKSIZE-1], SYS_Task_Prio);
LCDFresh_MBox=OSMboxCreate(NULL);//创建LCD刷新邮箱
Lcd_Disp_Sem=OSSemCreate(1); //创建LCD缓冲区控制权旗语,初值为1满足互斥条件//
}
#if OS_KeyBoard_Scan_Task==1
extern OS_EVENT *Key_MailBox;
unsigned char KeyBoard_Map[]={4,8,11,0,0,0,0,0,5,9,
12,15,1,0,0,0,6,10,13,16,
2,3,0,0,7,0,14,0,0,0,
0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,
0,0,0,0
}; //64
void Key_Scan_Task(void *Id)//指示RTOS处于正常工作中
{
U32 key;
INT8U err;
POSMSG pmsg;
Uart_Printf("begin key task \n");
for (;;){
OSMboxPend(Key_MailBox, 0, &err);
key=Zlg7289_ReadKey();
if(key>=64)
continue;
pmsg=OSCreateMessage(NULL, OSM_KEY,KeyBoard_Map[key],0);
if(pmsg)
SendMessage(pmsg);
}
}
#endif
#if DIRECT_DISPLAY==0
static void 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
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -