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

📄 osaddtask.c

📁 在移植成功ucos核的基础上扩充了该操作系统的许多没有功能。如文件系统
💻 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 + -