Files
SM-1000M/RTX5_20220316/main/main.c
2026-04-23 10:50:18 +08:00

844 lines
25 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*----------------------------------------------------------------------------
头文件
*---------------------------------------------------------------------------*/
#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使能串口232esp8266改串口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 *********************************/