Przeglądaj źródła

GPS队列信息测试

CHENJIE-PC\QiXiang_CHENJIE 4 lat temu
rodzic
commit
42f94ba83c
3 zmienionych plików z 32 dodań i 15 usunięć
  1. 4 4
      inc/hal_module_adapter.h
  2. 16 3
      src/app.c
  3. 12 8
      src/hal_module_adapter.c

+ 4 - 4
inc/hal_module_adapter.h

@@ -143,10 +143,10 @@ void CanTiggerEvt(UINT8 cmd);
 #endif
 INT32 CAN_WriteReg(UINT8 addr, UINT8 value);
 INT32 CAN_ReadReg(UINT8 reg, UINT8 len, UINT8 *buf);
- void HAL_Can_Init(Can_InitType param);
- INT32 HAL_Can_Reset(void);
- INT32 HAL_Can_Transmit(Can_TxMsgType Can_TxMsg);
- UINT8  HAL_Can_Receive(UINT8 *CAN_RX_Buf);
+void HAL_Can_Init(Can_InitType param);
+INT32 HAL_Can_Reset(void);
+INT32 HAL_Can_Transmit(Can_TxMsgType Can_TxMsg);
+UINT8  HAL_Can_Receive(UINT8 *CAN_RX_Buf);
 #ifdef __cplusplus
 }
 #endif

+ 16 - 3
src/app.c

@@ -41,7 +41,7 @@ extern ARM_DRIVER_USART Driver_USART1;
 static ARM_DRIVER_USART *USARTdrv = &Driver_USART1;
 volatile bool isRecvTimeout = false;
 volatile bool isRecvComplete = false;
-
+QueueHandle_t gpsMsgQueue = NULL;
 uint8_t Batt_Cell_Num = 14;//默认数值14、17
 uint8_t Batt_Cell_Num_2 ;//默认数值
 uint8_t Batt_Temp_Num = 5;//默认数值5、7
@@ -49,6 +49,7 @@ int16_t Uart_Rece_BattI=0x0000;
 uint8_t Can_Rece_buffer[8];
 volatile bool Can_Enable = false;
 uint16_t data_index = 0x0000;
+volatile bool Sleep_Flag = false;
 uint8_t battbuffer[100];//电池数据都存在此数组中————电压14,温度5
 /**
  *  存放规则如下:
@@ -243,7 +244,7 @@ static void Main_Task(void* arg)
                     PROC_UART_STATE_SWITCH(PROCESS_UART_STATE_SLEEP);
                     PROC_CAN_STATE_SWITCH(PROCESS_CAN_STATE_SLEEP);
                 }
-
+                Sleep_Flag = true;
                 slpManSlpState_t State;
                 uint8_t cnt;
                 if(slpManCheckVoteState(MainSlpHandler, &State, &cnt)==RET_TRUE)
@@ -414,6 +415,7 @@ static void Uart_Task(void* arg)
     uint8_t *Uart_Rece_buffer = NULL;
     volatile bool Uart_task = false;
     Batt_Cell_Num_2 = Batt_Cell_Num<<1;
+    gpsReqMsg Gpsmsg;
     while (true)
     {
         switch (gProcess_Uart_Task)
@@ -444,11 +446,22 @@ static void Uart_Task(void* arg)
             }
             case PROCESS_UART_STATE_WORK:
             {
+                posGGAServiceStart(GGACallBack);
+                if(gpsMsgQueue == NULL)
+	            {
+		            gpsMsgQueue = osMessageQueueNew(1,sizeof(gpsReqMsg), NULL);
+	            }
+                osMessageQueueGet(gpsMsgQueue, &Gpsmsg, 0, 2000);
+                if(Gpsmsg.dataPtr)
+                {    
+                    #ifdef USING_PRINTF	
+                        printf("GpsProcess Main: %s\r\n",Gpsmsg.dataPtr);
+                    #endif 
+                }    
                 NetSocDisplay(LED_SOC_1,LED_TURN_ON);
                 #ifdef USING_PRINTF
                         printf("Uart work!\n");
                 #endif
-                posGGAServiceStart(GGACallBack);
                 Uart_task = false;
                 Uart_Rece_buffer = (uint8_t *)malloc(Uart_Rece_LEN);
                 

+ 12 - 8
src/hal_module_adapter.c

@@ -17,7 +17,8 @@ static posGGACallBack gGPSDataCBfunc =NULL;
 // GSENSOR device addr
 #define GSENSOR_DEVICE_ADDR               						(SC7A20_IIC_ADDRESS)
 #define ZM01_DEVICE_ADDR									(0x2a)
-
+extern  QueueHandle_t gpsMsgQueue;
+extern  bool Sleep_Flag;
 /*
 	i2c
 */
@@ -1620,16 +1621,19 @@ static void GpsProcess(void* arg)
     	/*
 		
 	*/
-	 osMessageQueueGet(gpsMsgHandle, &msg, 0, osWaitForever);
-	 /*
-			handle event
-	 */
-	    #ifdef USING_PRINTF	
-	    	printf("GpsProcess [%d] %s\r\n",msg.len,msg.dataPtr);
-	    #endif 
+	osMessageQueueGet(gpsMsgHandle, &msg, 0, osWaitForever);
+	#ifdef USING_PRINTF	
+	    printf("GpsProcess Gpstask [%d] %s\r\n",msg.len,msg.dataPtr);
+	#endif 
+	osMessageQueuePut(gpsMsgQueue, &msg, 0, 2000);
 		 if(msg.dataPtr)
 		 	free(msg.dataPtr);
 	  	msg.dataPtr=NULL;
+		if (Sleep_Flag)
+		{
+			osThreadExit();
+			break;
+		}
     }
 }