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

📄 main.c

📁 UC/OS-II代码
💻 C
字号:

#include	"../ucos-ii/includes.h"               /* uC/OS interface */
#include "../common/msg.h"

#include "../target/option.h"
#include "../target/2410lib.h"

#include "../drv/driver.h"

#include"Keyb_ps2.c"

//task stack size
#ifdef SEMIHOSTED
	#define	TASK_STACK_SIZE	(64+SEMIHOSTED_STACK_NEEDS)
#else
	#define		TASK_STACK_SIZE	10*1024
#endif


//LCD task QUEUE
OS_EVENT *pLcdTask_MsgQueue=0;
#define LCDTASK_MSG_QUEUE_SIZE (256*4*5)
void	 *paLCD_MsgQueueTbl[LCDTASK_MSG_QUEUE_SIZE];



OS_STK Uart_Stack[TASK_STACK_SIZE];
extern void Uart_Task(void *Id);
#define UART_PRIO 18
OS_EVENT 	*pUart_MsgQueue=0;
#define Uart_MSG_QUEUE_SIZE (256 )
void 	*paUart_MsgQueueTbl[Uart_MSG_QUEUE_SIZE];


//Main Task
OS_STK Main_Stack[TASK_STACK_SIZE]= {0, };
extern void Main_Task(void *Id);
#define Main_PRIO       8


//Lcd Task
OS_STK LcdTask_Stack[TASK_STACK_SIZE]= {0, };
extern void Lcd_Task(void *Id);
#define LcdTask_PRIO       19



//Task1
OS_STK Task1_Stack[TASK_STACK_SIZE]= {0, };
extern void Task1_Task(void *Id);
#define Task1_PRIO       20

//Task2
OS_STK Task2_Stack[TASK_STACK_SIZE]= {0, };
extern void Task2_Task(void *Id);
#define Task2_PRIO       21

//Task3
OS_STK Task3_Stack[TASK_STACK_SIZE]= {0, };
extern void Task3_Task(void *Id);
#define Task3_PRIO       22
//Task definition
//Can task

extern void SM_Init(void);

void Task1_Task(void *Id)
{
	int i;
	while(1)
	{
		i++;
		OSTimeDly(10);
	}
}
void Task2_Task(void *Id)
{
	int i;
	while(1)
	{
		i++;
		OSTimeDly(20);
	}
}
void Task3_Task(void *Id)
{
	int i;
	while(1)
	{
		i++;
		OSTimeDly(30);
	}
}

static INT32U ulRectWidth =18*8; 
static INT32U ulRectHeight =16;
void Lcd_DispTouchPos(INT32U x, INT32U y)
{
	static INT32U ulPrevX = 0;
	static INT32U ulPrevY = 0;
	static INT8U  first=1;
	INT32U ulX,ulY,ulWidth,ulHeight;
	INT8U ch;
	if(first!=1)
	Lcd_FillRect(ulPrevX,ulPrevY,ulPrevX+ulRectWidth,ulPrevY+ulRectHeight,BLUE);
	else
		first=0;
	ulX = x;
	ulY = y;
 	if( ulX+ulRectWidth >= LCD_XSIZE_TFT)
		ulX = ulX - ulRectWidth;
	else
		ulX = ulX;

	if( ulY + ulRectHeight >= LCD_YSIZE_TFT )
		ulY = ulY - ulRectHeight;
	else
		ulY = ulY;
	
	Lcd_Printf(ulX,ulY,WHITE,"(X = %3d, Y = %3d)",x,y);	
	ulPrevX = ulX;
	ulPrevY = ulY;
}
void Lcd_Task(void *Id)
{
	INT8U err;
	void *pMsg;
	PSTRU_TOUCH_MSG pStru_TouchMsg; 
	INT32U x,y;
	INT8U ch;
	Lcd_Clr(BLUE);
	//ShowCanBanner();
	//ShowTitle();
	while(1)
	{
		pMsg = (void *)OSQPend(pLcdTask_MsgQueue,0,&err);
		pStru_TouchMsg = (PSTRU_TOUCH_MSG)pMsg;
		if( MSG_TYPE_TOUCH == pStru_TouchMsg->ulType )
		{
			
			x = pStru_TouchMsg->ulPara1;
			y = pStru_TouchMsg->ulPara2;
			
				Lcd_DispTouchPos(x,y);
		}
		
		if( MSG_TYPE_REC_CHAR == pStru_TouchMsg->ulType )
		{
			ch=pStru_TouchMsg->ulPara1;
			ShowChar(ch);
		}
	}
}
STRU_TOUCH_MSG  StruMsg_Uart;
void Uart_Task(void *Id)
{
//	static INT32U ulTimes = 0;
	INT8U err;
	void *pMsg;
	int ix=0;
	int presscode;
	char c;
	STRU_UART_MSG* pUartMsg;
	int nindex=0;
	int twice=0;
    while(1)

	{
		pMsg = OSQPend(pUart_MsgQueue, 0, &err);
		pUartMsg=(STRU_UART_MSG*)pMsg;
		presscode=pUartMsg->ulPara1;

		c=handle_rawcode(presscode);
		if(c==K_NONE)
			continue;
		if(twice==0)
			{
				twice++;
				continue;
			}
		c=ps2kbd_sysrq_xlate[c];
		if(c=='\r')
			c='\n';
		AddToPs2Buffer(c);
	/*	Uart_Printf("%c",c);
		Uart_Printf("\n");
		*/
		twice=0;

	
		StruMsg_Uart.ulType=MSG_TYPE_REC_CHAR;
		StruMsg_Uart.ulPara1=c;
		OSQPost(pLcdTask_MsgQueue, (void*)(&StruMsg_Uart));
    	}

}

void Main_Task(void *Id)
{
	//OSStatInit();
	/* Start the S3C44B0X BSP Running */
	ARMTargetStart();

	OSTaskCreate(Task1_Task, (void *)0, (OS_STK *)&Task1_Stack[TASK_STACK_SIZE-1],  Task1_PRIO);
  	OSTaskCreate(Task2_Task, (void *)0, (OS_STK *)&Task2_Stack[TASK_STACK_SIZE-1],  Task2_PRIO);
  	OSTaskCreate(Task3_Task, (void *)0, (OS_STK *)&Task3_Stack[TASK_STACK_SIZE-1],  Task3_PRIO);

	while (1)
	{
		OSTimeDly(40);
	}
}	


//===================================================================
void Main(void)
{  
    Led_Display(15);
    
//    MMU_Init();
   
#if ADS10  
    __rt_lib_init();                //for ADS 1.x
#endif

    ChangeClockDivider(1,1);          // 1:2:4
    ChangeMPllValue(0xa1,0x3,0x1);    // FCLK=202.8MHz 
    
    ARMTargetInit();
	
    // Init uCOS-II
    OSInit();
    
   
    pUart_MsgQueue = OSQCreate(&paUart_MsgQueueTbl[0], Uart_MSG_QUEUE_SIZE);

    pLcdTask_MsgQueue = OSQCreate(&paLCD_MsgQueueTbl[0],LCDTASK_MSG_QUEUE_SIZE);
    	
   


    //Create the Main Task
  //  OSTaskCreate(Main_Task, (void *)0, (OS_STK *)&Main_Stack[TASK_STACK_SIZE-1],  Main_PRIO);
	  	//Create the Task
	
	
	OSTaskCreate(Uart_Task, (void *)0, (OS_STK *)&Uart_Stack[TASK_STACK_SIZE-1],  	UART_PRIO);	

	OSTaskCreate(Lcd_Task,(void *)0, (OS_STK *)&LcdTask_Stack[TASK_STACK_SIZE-1], LcdTask_PRIO);


	
	
    // Start uCOS-II 
    OSStart();


}

void PrintfBanner()
{
	Uart_Printf("(1)Start	CAN1	Send\n");
	Uart_Printf("(2)Stop	CAN1	Send\n");
	Uart_Printf("(3)Start	CAN2	Send\n");
	Uart_Printf("(4)Stop	CAN2	Send\n");
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -