844 lines
25 KiB
C
844 lines
25 KiB
C
/*----------------------------------------------------------------------------
|
||
头文件
|
||
*---------------------------------------------------------------------------*/
|
||
#include "RTE_Components.h"
|
||
#include CMSIS_device_header
|
||
//#include "cmsis_os2.h"
|
||
#include "bsp.h"
|
||
|
||
/**********************************************************************************************************
|
||
函数声明
|
||
**********************************************************************************************************
|
||
*/
|
||
void USERTaskCreate (void);
|
||
void USER_Task_LinkStatus(void *argument); //WIFI连接状态
|
||
void USER_Task_WIFI(void *argument);//ESP8266
|
||
void USER_Task_MSG(void *argument);//消息处理
|
||
void USERTaskStart(void *argument);//开启任务
|
||
void USERTask_Process1(void *argument);//间隔测量执行过程
|
||
void USERTask_Resume(void *argument);//任务启动
|
||
void User_Task_Test(void *argument);//任务启动
|
||
uint8_t IsAppointmentRight(void);
|
||
|
||
/*
|
||
**********************************************************************************************************
|
||
变量声明
|
||
**********************************************************************************************************
|
||
*/
|
||
ITStatus Wake_way=RESET;//设备启动的方式 1 待机唤醒,0按钮开机
|
||
u8 Enable_SDI_RS232=0; //0使能SDI 1使能串口232(esp8266改串口232)
|
||
u8 LinkStatus=0; //WIFI连接状态:2连接,其他为未连接
|
||
u8 Creat_WIFI=0;
|
||
u8 Creat_BC25=0;
|
||
TASKRUNS TASKRUNSS; //任务运行标志
|
||
u32 wut_rtc_s=0;//开启间隔测量的RTC时间
|
||
TASKFISHED TASKFISHEDS;
|
||
u8 WKUP_PIN_Status=0;//按键状态 1,摁下,0未摁下
|
||
u8 Check_WKUP_key=0;
|
||
u32 time__sta_bc25=0;//BC25任务启动时间
|
||
u32 time__sta_pro1=0;//流程1任务启动时间
|
||
|
||
char rtc_data[15]={0},rtc_time[15]={0},CLOSE_ALARM = 0;
|
||
extern char name[],hhmmsss[],yymmddd[];
|
||
char NOWtime[15];
|
||
uint32_t appointment_y,appointment_s,NOW_y,NOW_s;
|
||
|
||
/*
|
||
****************************************************************************************************
|
||
任务的属性设置
|
||
******************************************************************************************************
|
||
*/
|
||
const osThreadAttr_t ThreadLinkStatus_Attr =
|
||
{
|
||
.name = "LinkStatus",
|
||
.attr_bits = osThreadDetached,
|
||
.priority = osPriorityHigh2,
|
||
.stack_size = 512,
|
||
};
|
||
const osThreadAttr_t ThreadStart_Attr =
|
||
{
|
||
.name = "ThreadStart",
|
||
.attr_bits = osThreadDetached,
|
||
.priority = osPriorityHigh2,
|
||
.stack_size = 512,
|
||
};
|
||
|
||
const osThreadAttr_t ThreadWIFI_Attr =
|
||
{
|
||
.name = "ThreadWIFI",
|
||
.attr_bits = osThreadDetached,
|
||
.priority = osPriorityHigh2,
|
||
.stack_size = 1024,
|
||
};
|
||
|
||
const osThreadAttr_t ThreadMSG_Attr =
|
||
{
|
||
.name = "ThreadMSG",
|
||
.attr_bits = osThreadDetached,
|
||
.priority = osPriorityNormal,
|
||
.stack_size = 1024,
|
||
};
|
||
|
||
const osThreadAttr_t ThreadTest_Attr =
|
||
{
|
||
.name = "ThreadTest",
|
||
.attr_bits = osThreadDetached,
|
||
.priority = osPriorityHigh2,
|
||
.stack_size = 2048,
|
||
};
|
||
|
||
static const osEventFlagsAttr_t EventFlagAttr_PROCESS = {
|
||
.name = "PROCESS_Events",
|
||
};
|
||
static const osEventFlagsAttr_t EventFlagAttr_Start = {
|
||
.name = "Start_Events",
|
||
};
|
||
static const osEventFlagsAttr_t EventFlagAttr_Fished = {
|
||
.name = "Fished_Events",
|
||
};
|
||
|
||
const osThreadAttr_t ThreadUSERTask_Resume_Attr =
|
||
{
|
||
.name = "ThreadUSERTask_Resume",
|
||
.attr_bits = osThreadDetached,
|
||
.priority = osPriorityHigh2,
|
||
.stack_size = 1024,
|
||
};
|
||
const osThreadAttr_t ThreadPROCESS1_Attr =
|
||
{
|
||
.name = "ThreadPROCESS1",
|
||
.attr_bits = osThreadDetached,
|
||
.priority = osPriorityHigh2,
|
||
.stack_size = 2048,
|
||
};
|
||
const osThreadAttr_t ThreadBC25_Attr =
|
||
{
|
||
.name = "ThreadBC25",
|
||
.attr_bits = osThreadDetached,
|
||
.priority = osPriorityHigh2,
|
||
.stack_size = 2048,
|
||
};
|
||
|
||
static const osMutexAttr_t WIFI_Mutex_Attr = {
|
||
.name = "WIFI_Multiplex",
|
||
};
|
||
static const osMutexAttr_t SDI_Mutex_Attr = {
|
||
.name = "SDI_Multiplex",
|
||
};
|
||
static const osMutexAttr_t TF_Mutex_Attr = {
|
||
.name = "TF_Multiplex",
|
||
//.attr_bits = osMutexRobust,
|
||
};
|
||
static const osSemaphoreAttr_t Proces1_Semaphore_Attr = {
|
||
.name = "Proces1_Sem",
|
||
};
|
||
static const osSemaphoreAttr_t BC25_Semaphore_Attr = {
|
||
.name = "BC25_Sem",
|
||
};
|
||
/*
|
||
*********************************************************************************************
|
||
任务句柄
|
||
***********************************************************************************************
|
||
*/
|
||
|
||
osThreadId_t ThreadIdSMSG = NULL;
|
||
osThreadId_t ThreadIdTaskLinkStatus = NULL;
|
||
osThreadId_t ThreadIdTaskBC25 = NULL;
|
||
osThreadId_t ThreadIdWIFI = NULL;
|
||
osThreadId_t ThreadIdStart = NULL;
|
||
osThreadId_t ThreadIdProcsee1 = NULL;
|
||
osThreadId_t ThreadIdUSERTask_Resume = NULL;
|
||
osThreadId_t ThreadIdTest = NULL;
|
||
|
||
osSemaphoreId_t Process1ID_Semaphore; // semaphore id
|
||
osSemaphoreId_t BC25ID_Semaphore; // semaphore id
|
||
|
||
osEventFlagsId_t EventFlagID_PROCESS=NULL; //过程标志
|
||
osEventFlagsId_t EventFlagID_Start=NULL;//启动标志
|
||
osEventFlagsId_t EventFlagID_Fished=NULL;//结束标志
|
||
osMutexId_t WIFI_MutexID=NULL;
|
||
osMutexId_t SDI_MutexID=NULL;
|
||
osMutexId_t TFcard_MutexID=NULL;
|
||
|
||
/****************************************************
|
||
*函数名:main()
|
||
*功 能:主函数
|
||
*输 入:无
|
||
*输 出:无
|
||
*/
|
||
int main (void) {
|
||
|
||
SCB->VTOR = FLASH_BASE | 0x10000; /* Vector Table Relocation in Internal FLASH. */
|
||
// System Initialization
|
||
SystemCoreClockUpdate();
|
||
// ...
|
||
|
||
bsp_init();
|
||
osKernelInitialize(); // Initialize CMSIS-RTOS
|
||
EventFlagID_PROCESS = osEventFlagsNew(&EventFlagAttr_PROCESS);
|
||
EventFlagID_Start = osEventFlagsNew(&EventFlagAttr_Start);
|
||
EventFlagID_Fished = osEventFlagsNew(&EventFlagAttr_Fished);
|
||
Process1ID_Semaphore = osSemaphoreNew(1, 1, &Proces1_Semaphore_Attr );
|
||
BC25ID_Semaphore = osSemaphoreNew(1, 1, &BC25_Semaphore_Attr );
|
||
|
||
/* 创建启动任务 */
|
||
ThreadIdStart = osThreadNew(USERTaskStart, NULL, &ThreadStart_Attr);
|
||
|
||
osKernelStart(); // Start thread execution
|
||
for (;;)
|
||
{
|
||
|
||
}
|
||
}
|
||
|
||
uint8_t IsAppointmentRight(void)
|
||
{
|
||
GetRTC(hhmmsss,yymmddd);
|
||
NOWtime[0] = '2';
|
||
NOWtime[1] = '0';
|
||
memcpy(&NOWtime[2],yymmddd,6);
|
||
NOW_y = atoi(NOWtime);
|
||
memset(NOWtime,0,15);
|
||
memcpy(NOWtime,hhmmsss,6);
|
||
NOW_s = atoi(NOWtime);
|
||
memset(NOWtime,0,15);
|
||
memcpy(NOWtime,Init_Data_Equipment.appointment_time,8);
|
||
appointment_y = atoi(NOWtime);
|
||
memset(NOWtime,0,15);
|
||
memcpy(NOWtime,&Init_Data_Equipment.appointment_time[8],6);
|
||
appointment_s = atoi(NOWtime);
|
||
if(NOW_y > appointment_y)
|
||
{
|
||
return 0;
|
||
}
|
||
else if(NOW_y < appointment_y)
|
||
{
|
||
return 1;
|
||
}
|
||
else
|
||
{
|
||
if(NOW_s > appointment_s)
|
||
{
|
||
return 0;
|
||
}
|
||
else
|
||
{
|
||
return 1;
|
||
}
|
||
}
|
||
}
|
||
|
||
/****************************************************
|
||
*函数名:USER_Task_BC25()
|
||
*功 能:NB模块向服务器发送数据
|
||
*输 入:无
|
||
*输 出:无
|
||
*/
|
||
void USER_Task_BC25(void *argument)
|
||
{
|
||
u8 i=0;
|
||
u32 BC25_SIZE=0;
|
||
osStatus_t BC25_Thread_status;
|
||
|
||
while(1)
|
||
{
|
||
osSemaphoreAcquire(BC25ID_Semaphore, osWaitForever);
|
||
time__sta_bc25=osKernelGetTickCount ();//获取启动时间
|
||
TASKRUNSS.BC25_RUN=1;
|
||
BC25_Status.socket=0;
|
||
//u5_printf("BC25_Start\r\n");
|
||
|
||
for(i=0;i<5;i++)
|
||
{
|
||
BC25_Init();
|
||
if(BC25_Status.netstatus==1)
|
||
{
|
||
i=6;
|
||
BC25_CloseSocket();//关闭上一次连接
|
||
BC25_CreateSokcet(Init_Data_Equipment.Bc25_Ip,Init_Data_Equipment.Bc25_Port);//创建连接
|
||
}
|
||
if(BC25_Status.cpin==0)//如果没装卡的话,尽快结束远传任务
|
||
{
|
||
i=6;
|
||
}
|
||
i++;
|
||
}
|
||
USART2_ReceiveBuff_Clear();
|
||
printf("AT+CGPADDR?\r\n");
|
||
//delay_ms(500);
|
||
//u5_printf("IP:%s\r\n",(const char*)USART2_RX_BUF);
|
||
osEventFlagsSet(EventFlagID_PROCESS,EVENT_TFread_BIT_5);
|
||
if(osEventFlagsGet(EventFlagID_PROCESS)&EVENT_TFstore_BIT_6)
|
||
{
|
||
osDelay(3000);
|
||
}
|
||
if(BC25_Status.netstatus==1)
|
||
{
|
||
i=0;
|
||
BC25_SIZE=0;
|
||
while((BC25_SIZE<=30)&(i<50))
|
||
{
|
||
i++;
|
||
delay_ms(5);
|
||
BC25_SIZE=txt_size_read("BC25");
|
||
}
|
||
if(BC25_SIZE>30)
|
||
{
|
||
//u5_printf("BC25_txt_size:%ld\r\n",BC25_SIZE);
|
||
FATFS_Read_TF("BC25",0,BC25_SIZE);//读取TF记录数据,通过BC25发送
|
||
i=0;
|
||
while(i<10)
|
||
{
|
||
osDelay(1000);
|
||
if(strstr((char*)USART2_RX_BUF,"par")!=NULL)
|
||
{
|
||
USART2_Recieve_Ide();
|
||
USART2_ReceiveBuff_Clear();
|
||
}
|
||
i++;
|
||
}
|
||
}
|
||
//u5_printf("BC25.txt send finish\r\n");
|
||
}
|
||
|
||
osEventFlagsClear(EventFlagID_PROCESS,EVENT_TFread_BIT_5);
|
||
BC25_POWEROFF();
|
||
TASKRUNSS.BC25_RUN=0;
|
||
//u5_printf("Terminate TaskBC25\r\n");
|
||
i=0;
|
||
osSemaphoreRelease(BC25ID_Semaphore);
|
||
BC25_Thread_status=osThreadTerminate(ThreadIdTaskBC25);
|
||
//u5_printf("Terminate TaskBC25............... fail\r\n");
|
||
while((BC25_Thread_status!=osOK)&(i<10))
|
||
{
|
||
//u5_printf("BC25_Thread_status:%d\r\n",BC25_Thread_status);
|
||
BC25_Thread_status=osThreadTerminate(ThreadIdTaskBC25);
|
||
i++;
|
||
|
||
}
|
||
//BC25_Thread_status=osThreadTerminate(ThreadIdTaskBC25);
|
||
osDelay(500);
|
||
}
|
||
}
|
||
/****************************************************
|
||
*函数名:USER_Task_LinkStatus()
|
||
*功 能:WIFI作为服务端,向客户端发送心跳包保持连接,同时判断是否有客户端连接
|
||
*输 入:无
|
||
*输 出:无
|
||
*/
|
||
void USER_Task_LinkStatus(void *argument)
|
||
{
|
||
u8 i=0;
|
||
// osDelay(20000);//延迟等待建立WIFI
|
||
//osEventFlagsWait(EventFlagID_PROCESS,EVENT_WIFIcreat_BIT_9,osFlagsWaitAll,200000 );
|
||
while(1)
|
||
{
|
||
|
||
uint8_t Temp_LinkStatus=0;
|
||
LinkStatus=2;
|
||
for(i=0;i<4;i++)
|
||
{
|
||
osMutexAcquire(WIFI_MutexID,osWaitForever);
|
||
Temp_LinkStatus=ESP8266_Get_LinkStatus();
|
||
if(Temp_LinkStatus==2)
|
||
{
|
||
i=0;
|
||
ESP8266_SendString(DISABLE,"Heartbeat,*",11,0);//发送心跳包,保持连接
|
||
}
|
||
|
||
osMutexRelease(WIFI_MutexID);
|
||
osDelay(60000);
|
||
//osDelay(30000);
|
||
}
|
||
//LinkStatus=0;
|
||
if(LinkStatus!=2)
|
||
{
|
||
osEventFlagsSet(EventFlagID_PROCESS,EVENT_LinkStatus_BIT_3);
|
||
osEventFlagsClear(EventFlagID_PROCESS,EVENT_WIFIcreat_BIT_9);
|
||
osThreadTerminate(ThreadIdTaskLinkStatus);
|
||
osThreadTerminate(ThreadIdWIFI);
|
||
}
|
||
osDelay(5);
|
||
}
|
||
}
|
||
|
||
/****************************************************
|
||
*函数名:USER_Task_WIFI()
|
||
*功 能:创建WIFI服务端,查询客户端发送的指令
|
||
*输 入:无
|
||
*输 出:无
|
||
*/
|
||
void USER_Task_WIFI(void *argument)
|
||
{
|
||
while(1)
|
||
{
|
||
if(!(osEventFlagsGet(EventFlagID_PROCESS)&EVENT_WIFIcreat_BIT_9))
|
||
{
|
||
ESP8266_AP_TCPServer_Config(Init_Data_Equipment.ESP8266_AP_SSIDs,
|
||
Init_Data_Equipment.ESP8266_AP_PWDs,
|
||
Init_Data_Equipment.ESP8266_AP_Ports);
|
||
// Creat_WIFI=1;
|
||
PWR_CTRL5V_H; //开启5V 9V电源
|
||
//PWR_CTRL3V3_H;
|
||
osEventFlagsSet(EventFlagID_PROCESS,EVENT_WIFIcreat_BIT_9);
|
||
__nop();
|
||
}
|
||
osMutexAcquire(WIFI_MutexID,osWaitForever);
|
||
USART4_Recieve_Ide();
|
||
osMutexRelease(WIFI_MutexID);
|
||
osDelay(20);
|
||
}
|
||
}
|
||
|
||
/****************************************************
|
||
*函数名:USERTask_Process1()
|
||
*功 能:数据采集流程
|
||
*输 入:无
|
||
*输 出:无
|
||
*/
|
||
|
||
void USERTask_Process1(void *argument)
|
||
{
|
||
u8 i=0;
|
||
//char Process1_Buf[300]={'\0'};
|
||
osStatus_t PRO1_Thread_status;
|
||
while(1)
|
||
{
|
||
osSemaphoreAcquire(Process1ID_Semaphore, osWaitForever);
|
||
time__sta_pro1=osKernelGetTickCount ();//获取流程启动时间
|
||
TASKRUNSS.PROS1_RUN=1;
|
||
GetRTC(rtc_time,rtc_data);
|
||
sprintf(name,"%s_%s.txt",rtc_data,Init_Data_Equipment.Measure_Interval);
|
||
if(IS_FIRST_SAVE)
|
||
{
|
||
memcpy(rtc_data,&Init_Data_Equipment.appointment_time[2],6);
|
||
memcpy(rtc_time,&Init_Data_Equipment.appointment_time[8],6);
|
||
IS_FIRST_SAVE = 0;
|
||
}
|
||
L76X_POWER_ON(); //开启定位电源
|
||
|
||
ADC15_POWERON(); //开启ADC电源
|
||
delay_ms(10); //不可去掉,去掉低电压时会重启
|
||
PWR_CTRL5V_H; //开启5V 9V电源
|
||
|
||
sdi12_process();
|
||
ADC15_Process();
|
||
|
||
L76C_Process();
|
||
Common_Data_Pack();//数据打包,数据更新
|
||
|
||
if(osEventFlagsGet(EventFlagID_PROCESS)&EVENT_TFread_BIT_5)//BC25在远传
|
||
{
|
||
osEventFlagsSet(EventFlagID_PROCESS,EVENT_TFstore_BIT_6);
|
||
//u5_printf("stroe wait\r\n");
|
||
osEventFlagsWait(EventFlagID_PROCESS,EVENT_TFread2_BIT_7,osFlagsWaitAll,10000 );
|
||
//u5_printf("TF data entry1\r\n");
|
||
Data_Write_TF();
|
||
//u5_printf("stroe finish\r\n");
|
||
osEventFlagsClear(EventFlagID_PROCESS,EVENT_TFstore_BIT_6);
|
||
osEventFlagsSet(EventFlagID_PROCESS,EVENT_TFstore2_BIT_8);
|
||
}
|
||
else
|
||
{
|
||
//u5_printf("TF data entry2\r\n");
|
||
osEventFlagsSet(EventFlagID_PROCESS,EVENT_TFstore_BIT_6);
|
||
|
||
Data_Write_TF();
|
||
|
||
osEventFlagsClear(EventFlagID_PROCESS,EVENT_TFstore_BIT_6);
|
||
//u5_printf("TF data quit2\r\n");
|
||
}
|
||
// if(LinkStatus == 2)//如果有WIFI连接,测量数据发送到上位机
|
||
// {
|
||
// sprintf(Process1_Buf,"%s%s%s,*","Pub,",data_common1.Pack_len,data_common1.Pack_data);
|
||
// osMutexAcquire(WIFI_MutexID,osWaitForever);
|
||
// ESP8266_SendString(DISABLE,Process1_Buf,strlen(Process1_Buf),0);
|
||
// osMutexRelease(WIFI_MutexID);
|
||
// }
|
||
//u5_printf("Terminate Procsee1\r\n");
|
||
// L76X_POWER_OFF();
|
||
// ADC15_POWEROFF();
|
||
// PWR_CTRL5V_L;
|
||
osSemaphoreRelease(Process1ID_Semaphore);
|
||
TASKRUNSS.PROS1_RUN=0;
|
||
osThreadTerminate(ThreadIdProcsee1);
|
||
//u5_printf("Terminate Procsee1 fail\r\n");
|
||
PRO1_Thread_status=osThreadTerminate(ThreadIdProcsee1);
|
||
while((PRO1_Thread_status!=osOK)&(i<10))
|
||
{
|
||
//u5_printf("PRO1_Thread_status:%d\r\n",PRO1_Thread_status);
|
||
PRO1_Thread_status=osThreadTerminate(ThreadIdProcsee1);
|
||
i++;
|
||
}
|
||
osDelay(1000);
|
||
}
|
||
}
|
||
|
||
/****************************************************
|
||
*函数名:USERTask_Resume()
|
||
*功 能:任务唤醒
|
||
*输 入:全局变量 MYITStatus1
|
||
* 全局变量 WKUP_PIN_Status
|
||
*输 出:无
|
||
*/
|
||
void USERTask_Resume(void *argument)
|
||
{
|
||
u32 measurt_idv_set;
|
||
osThreadState_t Thread_Stasus;
|
||
while(1)
|
||
{
|
||
if(MYITStatus1.AlarmA_ITStatus == 1)
|
||
{
|
||
//u5_printf("TASKRUNSS.BC25_RUN:%d\r\n",TASKRUNSS.BC25_RUN);
|
||
Thread_Stasus=osThreadGetState(ThreadIdTaskBC25);
|
||
//u5_printf("Thread_Stasus_bc25:%d\r\n",Thread_Stasus);
|
||
if((Thread_Stasus==osThreadError )||(TASKRUNSS.BC25_RUN!=1))
|
||
{
|
||
//u5_printf("USER_Task_BC25 creat\r\n");
|
||
ThreadIdTaskBC25 = osThreadNew(USER_Task_BC25, NULL, &ThreadBC25_Attr);
|
||
}
|
||
//u5_printf("config AlarmA\r\n");
|
||
MYITStatus1.AlarmA_ITStatus=0;
|
||
RTC_AlarmAConfig(get_pubidv());
|
||
}
|
||
if(MYITStatus1.AlarmB_ITStatus == 1)
|
||
{
|
||
Thread_Stasus=osThreadGetState(ThreadIdProcsee1);
|
||
//u5_printf("PROSS1_Thread_Stasus:%d\r\n",Thread_Stasus);
|
||
if(Thread_Stasus==osThreadError )
|
||
{
|
||
//u5_printf("USERTask_Process1 creat\r\n");
|
||
ThreadIdProcsee1 = osThreadNew(USERTask_Process1, NULL, &ThreadPROCESS1_Attr);
|
||
}
|
||
MYITStatus1.AlarmB_ITStatus=0;
|
||
Measure_Ap_E();
|
||
//Write_Equipment_Par(Init_Data_Equipment); //关机再开机后为正常测量模式
|
||
CLOSE_ALARM = 1;
|
||
}
|
||
if(MYITStatus1.WUT_ITStatus == 1)
|
||
{
|
||
//u5_printf("USERTask_Process1 start\r\n");
|
||
Thread_Stasus=osThreadGetState(ThreadIdProcsee1);
|
||
//u5_printf("PROSS1_Thread_Stasus:%d\r\n",Thread_Stasus);
|
||
if((Thread_Stasus==osThreadError )||(TASKRUNSS.PROS1_RUN!=1))
|
||
{
|
||
//u5_printf("USERTask_Process1 creat\r\n");
|
||
// Thread_Stasus=osThreadGetState(ThreadIdTaskBC25);
|
||
// if(Thread_Stasus == 1)
|
||
// {
|
||
// osDelay(1000);
|
||
// }
|
||
ThreadIdProcsee1 = osThreadNew(USERTask_Process1, NULL, &ThreadPROCESS1_Attr);
|
||
}
|
||
MYITStatus1.WUT_ITStatus=0;
|
||
|
||
if(measurt_idv_set<1)
|
||
{
|
||
measurt_idv_set=1;
|
||
}
|
||
RtcWakeUpConfig(get_meaidv() - 1);
|
||
// if(CLOSE_ALARM)
|
||
// {
|
||
// CLOSE_ALARM = 0;
|
||
// RtcWakeUpConfig(get_meaidv() - 4);
|
||
// }
|
||
// else
|
||
// {
|
||
// RtcWakeUpConfig(get_meaidv() - 2);
|
||
// }
|
||
|
||
|
||
wut_rtc_s=RTC_GetSeconds()+measurt_idv_set*60;
|
||
if(wut_rtc_s>86400)wut_rtc_s-=86400;
|
||
}
|
||
if(1)//按键中断MYITStatus1.WKUP1_ITStatus == 1
|
||
{
|
||
//if(WKUP_PIN_Status==4)//摁下10S以上,恢复出厂设置
|
||
if(key_time==200)//摁下10S以上,恢复出厂设置
|
||
{
|
||
MYITStatus1.WKUP1_ITStatus =0;
|
||
//u5_printf("WKUP_PIN_10S\r\n");
|
||
Write_Factory_Par();
|
||
}
|
||
if((key_time>=30)|(Check_WKUP_key))//摁下3S以上,启动WIFI
|
||
{
|
||
Thread_Stasus=osThreadGetState(ThreadIdTaskLinkStatus);
|
||
if(Thread_Stasus==osThreadError )
|
||
{
|
||
//u5_printf("Create Wifi Task\r\n");
|
||
ThreadIdWIFI = osThreadNew(USER_Task_WIFI, NULL, &ThreadWIFI_Attr);
|
||
ThreadIdTaskLinkStatus = osThreadNew(USER_Task_LinkStatus, NULL, &ThreadLinkStatus_Attr);
|
||
}
|
||
MYITStatus1.WKUP1_ITStatus =0;
|
||
Check_WKUP_key=0;
|
||
//u5_printf("WKUP_PIN_3S\r\n");
|
||
|
||
}
|
||
}
|
||
if(MYITStatus1.WKUP_POWBUTTON == 1)//电源上电
|
||
{
|
||
MYITStatus1.WKUP_POWBUTTON=0;
|
||
|
||
|
||
if((Init_Data_Equipment.measure_mode[0]=='1') && (IsAppointmentRight()))//模式为1,预约测量,只设置预约测量时间
|
||
{
|
||
Measure_Ap_S();
|
||
TASKRUNSS.POW_RUN=0;//只设置了预约时间
|
||
}else
|
||
{
|
||
Thread_Stasus=osThreadGetState(ThreadIdProcsee1);
|
||
if(Thread_Stasus==osThreadError )
|
||
{
|
||
ThreadIdProcsee1 = osThreadNew(USERTask_Process1, NULL, &ThreadPROCESS1_Attr);
|
||
}
|
||
|
||
RtcWakeUpConfig(get_meaidv() - 1);
|
||
RTC_AlarmAConfig(get_pubidv());
|
||
}
|
||
|
||
}
|
||
if(MYITStatus1.WKUP_MEA_WIFI == 1)//WIFI启动测量
|
||
{
|
||
Thread_Stasus=osThreadGetState(ThreadIdProcsee1);
|
||
if(Thread_Stasus==osThreadError )
|
||
{
|
||
ThreadIdProcsee1 = osThreadNew(USERTask_Process1, NULL, &ThreadPROCESS1_Attr);
|
||
}
|
||
MYITStatus1.WKUP_MEA_WIFI=0;
|
||
}
|
||
if(MYITStatus1.WKUP_Test_WIFI == 1)//WIFI启动测试
|
||
{
|
||
Thread_Stasus=osThreadGetState(ThreadIdTest);
|
||
if((Thread_Stasus==osThreadError )||(!(osEventFlagsGet(EventFlagID_PROCESS)&EVENT_Test_BIT_10)))
|
||
{
|
||
|
||
ThreadIdTest=osThreadNew(User_Task_Test,NULL,&ThreadTest_Attr);
|
||
}
|
||
MYITStatus1.WKUP_Test_WIFI=0;
|
||
}
|
||
osDelay(10);
|
||
}
|
||
}
|
||
|
||
/****************************************************
|
||
*函数名:USER_Task_MSG()
|
||
*功 能:任务结束判断,进入低功耗模式
|
||
*输 入:无
|
||
*输 出:无
|
||
*/
|
||
void USER_Task_MSG(void *argument)
|
||
{
|
||
osDelay(500);//等待其他任务启动
|
||
while(1)
|
||
{
|
||
if(osThreadGetState(ThreadIdTaskBC25)==osThreadError)
|
||
{
|
||
TASKFISHEDS.BC25_FIS=1;
|
||
}
|
||
else
|
||
TASKFISHEDS.BC25_FIS=0;
|
||
if(osThreadGetState(ThreadIdProcsee1)==osThreadError)
|
||
{
|
||
TASKFISHEDS.PROS1_FIS=1;
|
||
}
|
||
else
|
||
{
|
||
TASKFISHEDS.PROS1_FIS=0;
|
||
}
|
||
|
||
if(osThreadGetState(ThreadIdTaskLinkStatus)==osThreadError)
|
||
{
|
||
TASKFISHEDS.WIFILink_FIS=1;
|
||
}
|
||
else
|
||
{
|
||
TASKFISHEDS.WIFILink_FIS=0;
|
||
}
|
||
//u5_printf("%d,%d,%d\r\n",TASKFISHEDS.PROS1_FIS,TASKFISHEDS.BC25_FIS,TASKFISHEDS.WIFILink_FIS);
|
||
if(TASKFISHEDS.BC25_FIS &
|
||
TASKFISHEDS.PROS1_FIS &
|
||
TASKFISHEDS.WIFILink_FIS &
|
||
(!MYITStatus1.WUT_ITStatus)&
|
||
(!MYITStatus1.AlarmA_ITStatus&
|
||
!WKUP_KD )
|
||
)
|
||
{
|
||
if((Init_Data_Equipment.measure_mode[0]==0x31) && (IsAppointmentRight()))//测量模式为1,预约测量
|
||
{
|
||
RTC_WakeUpCmd(DISABLE);//屏蔽时间唤醒数据采集
|
||
RTC_AlarmCmd(RTC_Alarm_A, DISABLE);//屏蔽远传
|
||
}
|
||
|
||
//u5_printf("Procsee1_status:%d\r\n",osThreadGetState(ThreadIdProcsee1));
|
||
//u5_printf("BC25_status:%d\r\n",osThreadGetState(ThreadIdTaskBC25));
|
||
EXTI_ClearITPendingBit(EXTI_Line13);
|
||
RTC_ClearITPendingBit(RTC_IT_WUT);
|
||
EXTI_ClearITPendingBit(EXTI_Line20);
|
||
RTC_ClearITPendingBit(RTC_IT_ALRB);
|
||
RTC_ClearITPendingBit(RTC_IT_ALRA);
|
||
EXTI_ClearITPendingBit(EXTI_Line17);
|
||
|
||
PWR_EnterSTANDBYMode();
|
||
}
|
||
osDelay(50);
|
||
}
|
||
}
|
||
|
||
|
||
void User_Task_Test(void *argument)
|
||
{
|
||
char Test_Buf[400];
|
||
int len;
|
||
char rtc_data_test[15]={0},rtc_time_test[15]={0};
|
||
u32 tf_total,tf_free;
|
||
while(1)
|
||
{
|
||
osEventFlagsSet(EventFlagID_PROCESS,EVENT_Test_BIT_10);
|
||
//u5_printf("User_Task_Test_start\r\n");
|
||
//PWR_CTRL3V3_H; //开启3.3V总电源
|
||
osDelay(1000);
|
||
TASKRUNSS.Test_RUN=1;
|
||
GetRTC(rtc_time_test,rtc_data_test);
|
||
/************************数据流程开始******************************/
|
||
|
||
if(!TASKRUNSS.PROS1_RUN)
|
||
{
|
||
osSemaphoreAcquire(Process1ID_Semaphore, osWaitForever);
|
||
GetRTC(rtc_time,rtc_data);
|
||
L76X_POWER_ON(); //开启定位电源
|
||
ADC15_POWERON(); //开启ADC电源
|
||
PWR_CTRL5V_H; //开启5V 9V电源
|
||
sdi12_process();
|
||
ADC15_Process();
|
||
L76C_Process();
|
||
}
|
||
else
|
||
{
|
||
osSemaphoreAcquire(Process1ID_Semaphore, osWaitForever);
|
||
//保存测试的数据
|
||
}
|
||
sprintf(rtc_data,"%s",rtc_data_test);
|
||
sprintf(rtc_time,"%s",rtc_time_test);
|
||
Common_Data_Pack();//数据打包,数据更新
|
||
/************************数据流程结束*****************************/
|
||
|
||
/*************************远传流程开始*****************************/
|
||
|
||
if(!TASKRUNSS.BC25_RUN)
|
||
{
|
||
osSemaphoreAcquire(BC25ID_Semaphore, osWaitForever);
|
||
BC25_Init();
|
||
}
|
||
else
|
||
{
|
||
//osSemaphoreAcquire(BC25ID_Semaphore, osWaitForever);
|
||
}
|
||
|
||
/*************************保存测试数据*****************************/
|
||
|
||
//保存测试数据 Pub,长度,设备号,时间,电压,传感器数据,IOT_Cpin,IOT_Csq,IOT_Net,Tf_Tol,Tf_Free
|
||
|
||
if(osEventFlagsGet(EventFlagID_PROCESS)&EVENT_TFread_BIT_5)//BC25在远传
|
||
{
|
||
osEventFlagsSet(EventFlagID_PROCESS,EVENT_TFstore_BIT_6);
|
||
//u5_printf("test stroe wait\r\n");
|
||
osEventFlagsWait(EventFlagID_PROCESS,EVENT_TFread2_BIT_7,osFlagsWaitAll,10000 );
|
||
//u5_printf("test TF data entry1\r\n");
|
||
|
||
exf_getfree("0", &tf_total, &tf_free);
|
||
len = strlen(data_common1.Pack_data);
|
||
sprintf(data_common1.Pack_data+len,",%d,%d,%d,%ld,%ld",BC25_Status.cpin,BC25_Status.CSQ,BC25_Status.netstatus,tf_total,tf_free);
|
||
Write_Test();
|
||
//u5_printf("test stroe finish\r\n");
|
||
osEventFlagsClear(EventFlagID_PROCESS,EVENT_TFstore_BIT_6);
|
||
osEventFlagsSet(EventFlagID_PROCESS,EVENT_TFstore2_BIT_8);
|
||
}
|
||
else
|
||
{
|
||
osEventFlagsSet(EventFlagID_PROCESS,EVENT_TFstore_BIT_6);
|
||
exf_getfree("0", &tf_total, &tf_free);
|
||
len = strlen(data_common1.Pack_data);
|
||
sprintf(data_common1.Pack_data+len,",%d,%d,%d,%ld,%ld",BC25_Status.cpin,BC25_Status.CSQ,BC25_Status.netstatus,tf_total,tf_free);
|
||
Write_Test();
|
||
osEventFlagsClear(EventFlagID_PROCESS,EVENT_TFstore_BIT_6);
|
||
}
|
||
sprintf(Test_Buf,"%s%d,%s,*","Pub,",strlen(data_common1.Pack_data)+2,data_common1.Pack_data);
|
||
//u5_printf("test_buf %s\r\n",Test_Buf);
|
||
osMutexAcquire(WIFI_MutexID,osWaitForever);
|
||
ESP8266_SendString(DISABLE,Test_Buf,strlen(Test_Buf),0);
|
||
osMutexRelease(WIFI_MutexID);
|
||
//释放
|
||
osSemaphoreRelease(BC25ID_Semaphore);
|
||
osSemaphoreRelease(Process1ID_Semaphore);
|
||
TASKRUNSS.Test_RUN=0;
|
||
osEventFlagsClear(EventFlagID_PROCESS,EVENT_Test_BIT_10);
|
||
osThreadTerminate(ThreadIdTest);
|
||
|
||
/*************************远传流程结束*****************************/
|
||
}
|
||
|
||
}
|
||
/****************************************************
|
||
*函数名:USERTaskCreate()
|
||
*功 能:任务创建
|
||
*输 入:无
|
||
*输 出:无
|
||
*/
|
||
void USERTaskCreate(void)
|
||
{
|
||
EEPROM_ReadBytes(110,(u8*)Init_Data_Equipment.Pub_Mode,1);
|
||
WIFI_MutexID = osMutexNew(&WIFI_Mutex_Attr );
|
||
SDI_MutexID = osMutexNew(&SDI_Mutex_Attr );
|
||
TFcard_MutexID = osMutexNew(&TF_Mutex_Attr );
|
||
ThreadIdUSERTask_Resume = osThreadNew(USERTask_Resume, NULL, &ThreadUSERTask_Resume_Attr);
|
||
ThreadIdSMSG = osThreadNew(USER_Task_MSG, NULL, &ThreadMSG_Attr); //低功耗
|
||
}
|
||
|
||
/*********************************************************************************************************/
|
||
|
||
/*
|
||
*********************************************************************************************************
|
||
* 函 数 名: AppTaskStart()
|
||
* 功能说明: 启动任务,防止任务跑飞
|
||
* 输 入 :采集启动时间time__sta_pro1
|
||
* 远传启动时间time__sta_bc25
|
||
* 输 出 :无
|
||
*********************************************************************************************************
|
||
*/
|
||
void USERTaskStart(void *argument)
|
||
{
|
||
u32 mea_idv_idl1,pub_idv_idl1;
|
||
uint8_t i=0;
|
||
/* 创建任务 */
|
||
USERTaskCreate();
|
||
while(1)
|
||
{
|
||
mea_idv_idl1=osKernelGetTickCount()-time__sta_pro1;
|
||
pub_idv_idl1=osKernelGetTickCount()-time__sta_bc25;
|
||
i++;
|
||
if(i>=10)
|
||
{
|
||
//u5_printf("mea_idv_idl1:%d\r\npub_idv_idl1:%d\r\n",mea_idv_idl1,pub_idv_idl1);
|
||
i=0;
|
||
}
|
||
if(LinkStatus == 2)
|
||
{
|
||
mea_idv_idl1=0;
|
||
pub_idv_idl1=0;
|
||
}
|
||
if((mea_idv_idl1>(get_meaidv()*1000+200000))&(LinkStatus != 2))//没有WIFI连接+超时
|
||
{
|
||
NVIC_SystemReset();
|
||
}
|
||
|
||
if((pub_idv_idl1>(get_pubidv()*1000+7200000))&(LinkStatus != 2))//没有WIFI连接+超时
|
||
{
|
||
NVIC_SystemReset();//超过运行时长就复位
|
||
}
|
||
osDelay(1000);
|
||
}
|
||
}
|
||
|
||
/***************************** END OF FILE *********************************/
|
||
|