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

📄 main.c

📁 在LPC2132的ARM处理器上
💻 C
📖 第 1 页 / 共 2 页
字号:
/********************************************************************************************************/
#define	HOSTVAR
#include "config.h"

/********************************************************************************************************/
int main (void)
{
	uint8 err;
	
	SysInit();
			
    OSInit();

    OSTaskCreate(SysInitTask, (void *)0, &SysInitTask_stack[SYSINIT_TASK_STK_SIZE - 1], SysInitTask_PRIO);	
    
    Data_Rev_Queue = OSQCreate((void*)&Queue[0], QUEUE_SIZE); 		
    VideoMbox = OSMboxCreate(NULL);
    EchoMbox = OSMboxCreate(NULL);
    ListSem = OSSemCreate (1);
    Uart0_Sem = OSSemCreate (1);
    VoiceMbox = OSMboxCreate(NULL);
    
    Pic_Mem = OSMemCreate((void *)Pic_Data_Buf, PIC_BUF_NUM, PIC_BUF_SIZE, &err);
    			
    OSStart();
    return 0;
}

uint8	SPI1_Oper(uint8 data);

/********************************************************************************************************/
void  SysInitTask(void *pdata)
{ 	
	pdata = pdata;

	TargetInit();	
	
	while(1);
		
	Read_EEprom_Data();
		
	OSTaskCreate(DispatchTask, (void *)0, & DispatchTask_stack[DISPATCH_TASK_STK_SIZE - 1], DispatchTask_PRIO);	
    OSTaskCreate(Uart0ReviceTask, (void *)0, &Uart0Task_stack[UART0_TASK_STK_SIZE - 1], Uart0RevTask_PRIO);		// 接收通信模块数据
    OSTaskCreate(Uart1ReviceTask, (void *)0, &Uart1Task_stack[UART1_TASK_STK_SIZE - 1], Uart1RevTask_PRIO);		// 接收GPS定位数据	
    OSTaskCreate(Uart2ReviceTask, (void *)0, &Uart2Task_stack[UART2_TASK_STK_SIZE - 1], Uart2RevTask_PRIO);		// 接收图片采集模块数据
    OSTaskCreate(Uart3ReviceTask, (void *)0, &Uart3Task_stack[UART3_TASK_STK_SIZE - 1], Uart3RevTask_PRIO);		// 接收PC系统配置信息	
    
    OSTaskCreate(KeyInputTask, (void *)0, &KeyInputTask_stack[KEY_TASK_STK_SIZE - 1], KeyInputTask_PRIO);
    
    //OSTaskCreate(TimerReviceTask, (void *)0, &TimerTask_stack[TIMER_TASK_STK_SIZE - 1], TimerTask_PRIO);
    //OSTaskCreate(AlarmOutputTask, (void *)0, &AlarmOutputTask_stack[ALARM_TASK_STK_SIZE - 1], AlarmOutputTask_PRIO);
    
    OSTaskDel (0);			
} 

uint8 my_value;
/********************************************************************************************************/
void  DispatchTask(void *pdata)
{
	REV_DATA *pmsg;
	uint8 err, i;
			
	pdata = pdata;
			
	for( ; ; )
	{
		pmsg = OSQPend (Data_Rev_Queue, 0, &err);			
			
		switch(pmsg -> Data_Type)
		{
                
			case PIC_DEAL_HANDEL:
				for (i = 0x00; i < 3; i++)                         				      
                	my_value = Send_Get_Pic_Order();                
                break;
                
            case LOGIN_DEAL_HANDEL:
            	if (Login_flag == 0x01)
            		Send_GPS_Order();            	
            	else  Send_Login_Order();              
                break;
                
            case SEND_PIC_HANDEL:
             	Send_GPS_Order();  
            	if (Alarm_Status == 0x01){
            		Send_Pic_Order();
            		Send_Call_Order();
            		Alarm_Status = 0x00;
               	}
                break;    
           
            case LOGIN_PIC_HANDEL: 
            	if (Login_flag == 0x01){
            		Send_GPS_Order();                         				      
                	Send_Pic_Order();
                	Send_Call_Order();
            		Alarm_Status = 0x00;
            	}
            	else  Send_Login_Order();                              
                break; 
                
           	case SYS_CONFIG_HANDEL:
               	Save_Config_Data();                
                break; 
                
            case RECODE_HANDEL:
               	Get_Voice_Data();        
                break; 
             
             case DECODE_HANDEL:
               	Play_Voice_Oper();               
                break;
                        		
          	default:
                break;
		}//switch(pmsg -> DataType)
		
	}//for( ; ; )
	
}

/********************************************************************************************************/
void  Uart0ReviceTask(void *pdata)
{
	uint8 rev_buf[90], value, checkcode, i;
	uint16 size;
	REV_DATA 	DataPack;
	
	for(; ;){
	
	rev_buf[0] = UART0Getch();
	rev_buf[1] = UART0Getch();
	rev_buf[2] = UART0Getch();
	rev_buf[3] = UART0Getch();
	rev_buf[4] = UART0Getch();
	rev_buf[5] = UART0Getch();
	
#if 0	
	 	if (((rev_buf[0] = UART0Getch()) == '$')
	 		&& ((rev_buf[1] = UART0Getch()) == 'G')
	 		&& ((rev_buf[2] = UART0Getch()) == 'P')
	 		&& ((rev_buf[3] = UART0Getch()) == 'R')
	 		&& ((rev_buf[4] = UART0Getch()) == 'S')
	 		&& ((rev_buf[5] = UART0Getch()) == 'C')
	 		&& ((rev_buf[6] = UART0Getch()) == 'D')
	 		&& ((rev_buf[7] = UART0Getch()) == 'M')
	 		&& ((rev_buf[8] = UART0Getch()) == 'A')){
	 	
	 			rev_buf[9] = value = UART0Getch();
	 			rev_buf[10] = UART0Getch();
	 			rev_buf[11] = UART0Getch();
	 			
	 			size = (uint16)rev_buf[10] + (((uint16)rev_buf[11]) << 8);
	 				
	 			for (i = 0x00; i < size; i++)	
	 				rev_buf[12 + i] = UART0Getch();
	 					
	 			checkcode = UART0Getch();
	 		
	 			if (CalCheckCode(rev_buf, checkcode, (uint8)(12 + size)) == SUCCESS){
	 				
	 				switch(value)
					{
						 case LOGIN_OK_CODE:
               				Login_flag = 0x01;
	 						DataPack.Data_Type = SEND_PIC_HANDEL;
	 						OSQPost(Data_Rev_Queue, &DataPack);                
                			break; 
                         
                         case UNLOGIN_OK_CODE:
               				Login_flag = 0x00;
               				OSMboxPost(EchoMbox, &value);              
                			break;
                		
                		case CALL_ECHO_CODE:
               				OSMboxPost(EchoMbox, &rev_buf[12]);              
                			break;
                			
                		 case PIC_OK_CODE:
               				OSMboxPost(EchoMbox, &rev_buf[12]);              
                			break;
                						
          				 default:
                			break;
                			
					}// switch(value)	 
	 			
	 			}// if (CalCheckCode(rev_buf, checkcode, 11) == SUCCESS)
	 				
	 	}// if (((rev_buf[0] = UART0Getch()) == '$') 
#endif

	 }// for(; ;){
	 
}

/********************************************************************************************************/
void  Uart1ReviceTask(void *pdata)
{
	GPS_DATA temp_data;						//接收GPS模块通信数据流
	uint8 rev_buf[90];
	
	for(; ;){
		
		rev_buf[0] = UART1Getch();
		rev_buf[1] = UART1Getch();
		rev_buf[2] = UART1Getch();
		rev_buf[3] = UART1Getch();
		rev_buf[4] = UART1Getch();
		rev_buf[5] = UART1Getch();
#if 0	
	 	if (Get_GPS_Info(&temp_data) == SUCCESS){
			if (temp_data.Gps_Flag == 0x01){
				OS_ENTER_CRITICAL();
				Rev_GPS_Data = temp_data;
       			OS_EXIT_CRITICAL();	
			}
       		//IO0CLR = (IO0CLR & 0xffefffff) | (1 << 20);
			//OSTimeDly(OS_TICKS_PER_SEC / 10);
			//IO0SET = (IO0SET & 0xffefffff) | (1 << 20);
		}
#endif
		
	 }// for(; ;){	 
}

/********************************************************************************************************/
void  Uart2ReviceTask(void *pdata)
{
	REV_DATA 	DataPack;
	PIC_STR 	pic_buf;
	
	uint8 rev_buf[12], pic_temp_buf[PACK_SIZE], check_code;
	uint16  pack_size, i;
									
	pdata = pdata;
	
	for(; ;){
	
		switch(Pic_Rev_Flag)
		{
			case 0x00:                         				      
                if ((rev_buf[0] = UART2Getch()) == 0xaa){
		
					rev_buf[1] = UART2Getch();
					rev_buf[2] = UART2Getch();
					rev_buf[3] = UART2Getch();
					rev_buf[4] = UART2Getch();
					rev_buf[5] = UART2Getch();
			
					if ((rev_buf[2] == 0x0d) || (rev_buf[2] == 0x04)){
				
						rev_buf[6] = UART2Getch();
						rev_buf[7] = UART2Getch();
						rev_buf[8] = UART2Getch();
						rev_buf[9] = UART2Getch();
						rev_buf[10] = UART2Getch();
						rev_buf[11] = UART2Getch();
						DataPack.Mode_Type_Info = rev_buf[7];
						if ((rev_buf[7] == 0x0a) && (rev_buf[8] == 0x01))

⌨️ 快捷键说明

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