MW22-02A/APP/Device/Device_angle/angle_poweroffsave.c

541 lines
16 KiB
C
Raw Permalink Normal View History

2025-05-21 01:55:40 +00:00
#include "rotate_plan.h"
#include "ptz_header_file.h"
#include "gd32f4xx.h"
#include "angle_poweroffsave.h"
#include "mb85rc64.h"
static BSP_OS_SEM ptz_power_off_mutex;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4>
static float power_v;//ʵʱ<CAB5><CAB1>ѹ
static float power_v1;//<2F><><EFBFBD>ڱ<EFBFBD><DAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>жϵ<D0B6>ѹ<EFBFBD><D1B9><EFBFBD>߻<EFBFBD><DFBB>ǽ<EFBFBD><C7BD>͵Ļ<CDB5><C4BB><EFBFBD><EFBFBD><EFBFBD>ѹ
PowerOffData power_off_data;
//<2F><>ѹ<EFBFBD>ɼ<EFBFBD>
static float ptz_voltage_adc1()
{
unsigned short int adc1_value;
float float_adc1;
adc_software_trigger_enable(ADC1,ADC_INSERTED_CHANNEL);
adc1_value = ADC_IDATA1(ADC1);
float_adc1 = (float)adc1_value / 4096.0 * 36.3;
return float_adc1;
}
static float ptz_power_off_data_crc(PowerOffData data)
{
float crc = 0;
crc = data.hori_as5047d.as5047d_ptz_init_angle +
data.hori_as5047d.as5047d_ptz_angle_max +
data.hori_as5047d.as5047d_ptz_angle_K +
data.hori_as5047d.as5047d_ptz_angle_wf_actual +
data.hori_as5047d.as5047d_ptz_angle_wf_last +
data.hori_as5047d.as5047d_ptz_angle_actual +
data.hori_as5047d.as5047d_ptz_angle_last +
data.hori_as5047d.as5047d_remain_angle +
data.hori_as5047d.as5047d_cycle_num +
data.hori_as5047d.as5047d_cycle_count +
data.hori_as5047d.as5047d_cycle_count_last +
data.hori_as5047d.as5047d_angle_actual +
data.hori_as5047d.as5047d_dir +
data.hori_as5047d.as5047d_angle_last +
data.hori_as5047d.as5047d_angle_difference +
data.hori_as5047d.as5047d_state +
data.hori_as5047d.as5047d_data_reset +
data.vert_as5047d.as5047d_ptz_init_angle +
data.vert_as5047d.as5047d_ptz_angle_max +
data.vert_as5047d.as5047d_ptz_angle_K +
data.vert_as5047d.as5047d_ptz_angle_wf_actual +
data.vert_as5047d.as5047d_ptz_angle_wf_last +
data.vert_as5047d.as5047d_ptz_angle_actual +
data.vert_as5047d.as5047d_ptz_angle_last +
data.vert_as5047d.as5047d_remain_angle +
data.vert_as5047d.as5047d_cycle_num +
data.vert_as5047d.as5047d_cycle_count +
data.vert_as5047d.as5047d_cycle_count_last +
data.vert_as5047d.as5047d_angle_actual +
data.vert_as5047d.as5047d_dir +
data.vert_as5047d.as5047d_angle_last +
data.vert_as5047d.as5047d_angle_difference +
data.vert_as5047d.as5047d_state +
data.vert_as5047d.as5047d_data_reset +
data.vert_angle +
data.hori_angle +
data.power_down_offset_anle +
data.num;
return crc;
}
char ptz_power_off_data_save(unsigned short int add)
{
BSP_OS_SemWait(&ptz_power_off_mutex, 0u);
PowerOffData power_off_data_b;
int i;
memcpy(&power_off_data.hori_as5047d, &g_ptz.hori_as5047d, sizeof(g_ptz.hori_as5047d));
memcpy(&power_off_data.vert_as5047d, &g_ptz.vert_as5047d, sizeof(g_ptz.vert_as5047d));
power_off_data.vert_angle = g_ptz.vert_angle_actual;
power_off_data.hori_angle = g_ptz.hori_angle_actual;
power_off_data.power_down_offset_anle = g_ptz.offset_angle.offset_anle;//<2F><><EFBFBD><EFBFBD><EEB2B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
power_off_data.crc = ptz_power_off_data_crc(power_off_data);
for(i = 0; i < PTZ_POWER_OFF_DATA_SAVE_NUM; i++)
{
memset(&power_off_data_b, 0, sizeof(power_off_data_b));
mb85rc64_page_write(add, (unsigned char *)&power_off_data, sizeof(power_off_data));
asm("nop");
asm("nop");
mb85rc64_add_read(add, (unsigned char *)&power_off_data_b, sizeof(power_off_data_b));
if(memcmp(&power_off_data_b, &power_off_data, sizeof(power_off_data)) == 0)//<2F>жϲ<D0B6><CFB2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD>ȷ
{
BSP_OS_SemPost(&ptz_power_off_mutex);
return 1;
}
}
BSP_OS_SemPost(&ptz_power_off_mutex);
return 0;
}
char ptz_power_off_data_read()
{
BSP_OS_SemWait(&ptz_power_off_mutex, 0u);
char i;
PowerOffData power_off_data_a;
PowerOffData power_off_data_b;
char data_a = 0;
char data_b = 0;
memset(&power_off_data, 0, sizeof(power_off_data));
//<2F><>ȡ<EFBFBD><EFBFBD><E6B4A2><EFBFBD><EFBFBD>a<EFBFBD><61><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
for(i = 0; i < PTZ_POWER_OFF_DATA_READ_NUM; i++)
{
memset(&power_off_data_a, 0, sizeof(power_off_data_a));
mb85rc64_add_read(PTZ_MB85RC64_ADD_A, (unsigned char *)&power_off_data_a, sizeof(power_off_data_a));
if(power_off_data_a.crc == ptz_power_off_data_crc(power_off_data_a) && power_off_data_a.crc != 0)
{
data_a = 1;
break;
}
}
//<2F><>ȡ<EFBFBD><EFBFBD><E6B4A2><EFBFBD><EFBFBD>b<EFBFBD><62><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
for(i = 0; i < PTZ_POWER_OFF_DATA_READ_NUM; i++)
{
memset(&power_off_data_b, 0, sizeof(power_off_data_b));
mb85rc64_add_read(PTZ_MB85RC64_ADD_B, (unsigned char *)&power_off_data_b, sizeof(power_off_data_b));
if(power_off_data_b.crc == ptz_power_off_data_crc(power_off_data_b) && power_off_data_b.crc != 0)
{
data_b = 1;
break;
}
}
if(data_a == 1 && data_b == 0)//ֻ<>д洢<D0B4><E6B4A2>A<EFBFBD><41><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǶԵ<C7B6>,<2C><>ֻ<EFBFBD><D6BB>A<EFBFBD><41><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
memcpy(&power_off_data, &power_off_data_a, sizeof(power_off_data));
memcpy(&g_ptz.hori_as5047d, &power_off_data.hori_as5047d, sizeof(g_ptz.hori_as5047d));
memcpy(&g_ptz.vert_as5047d, &power_off_data.vert_as5047d, sizeof(g_ptz.vert_as5047d));
g_ptz.offset_angle.offset_anle = power_off_data.power_down_offset_anle;//<2F><>ȡƫ<C8A1><C6AB><EFBFBD><EFBFBD>
if(power_off_data.num == 65535)
{
power_off_data.num = 0;
}
else
{
power_off_data.num ++;
}
BSP_OS_SemPost(&ptz_power_off_mutex);
return 1;
}
if(data_a == 0 && data_b == 1)//ֻ<>д洢<D0B4><E6B4A2>B<EFBFBD><42><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǶԵ<C7B6>,<2C><>ֻ<EFBFBD><D6BB>B<EFBFBD><42><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
memcpy(&power_off_data, &power_off_data_b, sizeof(power_off_data));
memcpy(&g_ptz.hori_as5047d, &power_off_data.hori_as5047d, sizeof(g_ptz.hori_as5047d));
memcpy(&g_ptz.vert_as5047d, &power_off_data.vert_as5047d, sizeof(g_ptz.vert_as5047d));
g_ptz.offset_angle.offset_anle = power_off_data.power_down_offset_anle;//<2F><>ȡƫ<C8A1><C6AB><EFBFBD><EFBFBD>
if(power_off_data.num == 65535)
{
power_off_data.num = 0;
}
else
{
power_off_data.num ++;
}
BSP_OS_SemPost(&ptz_power_off_mutex);
return 1;
}
if(data_a == 1 && data_b == 1)//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E6B4A2>A<EFBFBD><41><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǶԵģ<D4B5><C4A3><EFBFBD><E6B4A2>B<EFBFBD><42><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҳ<EFBFBD>ǶԵ<C7B6>
{
if(power_off_data_a.num > power_off_data_b.num)
{
if((power_off_data_a.num - power_off_data_b.num) == 1)
{
memcpy(&power_off_data, &power_off_data_a, sizeof(power_off_data));
memcpy(&g_ptz.hori_as5047d, &power_off_data.hori_as5047d, sizeof(g_ptz.hori_as5047d));
memcpy(&g_ptz.vert_as5047d, &power_off_data.vert_as5047d, sizeof(g_ptz.vert_as5047d));
g_ptz.offset_angle.offset_anle = power_off_data.power_down_offset_anle;//<2F><>ȡƫ<C8A1><C6AB><EFBFBD><EFBFBD>
if(power_off_data.num == 65535)
{
power_off_data.num = 0;
}
else
{
power_off_data.num ++;
}
BSP_OS_SemPost(&ptz_power_off_mutex);
return 1;
}
if((power_off_data_a.num - power_off_data_b.num) == 65535)
{
memcpy(&power_off_data, &power_off_data_b, sizeof(power_off_data));
memcpy(&g_ptz.hori_as5047d, &power_off_data.hori_as5047d, sizeof(g_ptz.hori_as5047d));
memcpy(&g_ptz.vert_as5047d, &power_off_data.vert_as5047d, sizeof(g_ptz.vert_as5047d));
g_ptz.offset_angle.offset_anle = power_off_data.power_down_offset_anle;//<2F><>ȡƫ<C8A1><C6AB><EFBFBD><EFBFBD>
if(power_off_data.num == 65535)
{
power_off_data.num = 0;
}
else
{
power_off_data.num ++;
}
BSP_OS_SemPost(&ptz_power_off_mutex);
return 1;
}
}
if(power_off_data_b.num > power_off_data_a.num)
{
if((power_off_data_b.num - power_off_data_a.num) == 1)
{
memcpy(&power_off_data, &power_off_data_b, sizeof(power_off_data));
memcpy(&g_ptz.hori_as5047d, &power_off_data.hori_as5047d, sizeof(g_ptz.hori_as5047d));
memcpy(&g_ptz.vert_as5047d, &power_off_data.vert_as5047d, sizeof(g_ptz.vert_as5047d));
g_ptz.offset_angle.offset_anle = power_off_data.power_down_offset_anle;//<2F><>ȡƫ<C8A1><C6AB><EFBFBD><EFBFBD>
if(power_off_data.num == 65535)
{
power_off_data.num = 0;
}
else
{
power_off_data.num ++;
}
BSP_OS_SemPost(&ptz_power_off_mutex);
return 1;
}
if((power_off_data_b.num - power_off_data_a.num) == 65535)
{
memcpy(&power_off_data, &power_off_data_a, sizeof(power_off_data));
memcpy(&g_ptz.hori_as5047d, &power_off_data.hori_as5047d, sizeof(g_ptz.hori_as5047d));
memcpy(&g_ptz.vert_as5047d, &power_off_data.vert_as5047d, sizeof(g_ptz.vert_as5047d));
g_ptz.offset_angle.offset_anle = power_off_data.power_down_offset_anle;//<2F><>ȡƫ<C8A1><C6AB><EFBFBD><EFBFBD>
if(power_off_data.num == 65535)
{
power_off_data.num = 0;
}
else
{
power_off_data.num ++;
}
BSP_OS_SemPost(&ptz_power_off_mutex);
return 1;
}
}
}
BSP_OS_SemPost(&ptz_power_off_mutex);
return 0;
}
char ptz_power_off_data_erase(unsigned short int add)
{
BSP_OS_SemWait(&ptz_power_off_mutex, 0u);
PowerOffData power_off_data_a;
int i;
memset(&power_off_data, 0, sizeof(power_off_data));
power_off_data.crc = -100;
for(i = 0; i < PTZ_POWER_OFF_DATA_SAVE_NUM; i++)
{
memset(&power_off_data_a, 0, sizeof(power_off_data_a));
mb85rc64_page_write(add, (unsigned char *)&power_off_data, sizeof(power_off_data));
asm("nop");
asm("nop");
mb85rc64_add_read(add, (unsigned char *)&power_off_data_a, sizeof(power_off_data_a));
if(memcmp(&power_off_data_a, &power_off_data, sizeof(power_off_data)) == 0)//<2F>жϲ<D0B6><CFB2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD>ȷ
{
BSP_OS_SemPost(&ptz_power_off_mutex);
return 1;
}
}
BSP_OS_SemPost(&ptz_power_off_mutex);
return 0;
}
#define ADC1_NUM 5 //<2F><>ѹ<EFBFBD>ɼ<EFBFBD><C9BC><EFBFBD><EFBFBD><EFBFBD>
static char ptz_power_off_task()
{
unsigned short int number;
#ifdef PTZ_POWER_OFF_ADC_MANY
static float adc1_v[ADC1_NUM];
float tem;
char i,j;
#endif
while(1)
{
#ifdef PTZ_POWER_OFF_ADC_MANY
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1>ѹ
for(i = 0; i < ADC1_NUM; i++)
{
tem = 0;
tem = ptz_voltage_adc1();
if(tem < 0 || isnan(tem) == 1)
{
tem = 0;
}
adc1_v[i] = tem;
OSTimeDlyHMSM(0u, 0u, 0u, 1u);
}
//<2F>Զ<EFBFBD>ȡ<EFBFBD><C8A1>ѹ<EFBFBD><D1B9><EFBFBD><EFBFBD>
for(i = 0; i < ADC1_NUM-1; i++)//<2F><><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5>С<EFBFBD><D0A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
for(j = 0; j < ADC1_NUM-i-1; j++)
{
if(adc1_v[j] > adc1_v[j+1])
{
tem = adc1_v[j];
adc1_v[j] = adc1_v[j+1];
adc1_v[j+1] = tem;
}
}
}
//ȥ<><C8A5>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>Сֵ<D0A1><D6B5>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>
tem = 0;
for(i = 1; i < ADC1_NUM - 1; i++)
{
tem = tem + adc1_v[i];
}
tem = tem /((float)(ADC1_NUM - 2));//ȥ<><C8A5>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>Сֵ<D0A1><D6B5>ƽ<EFBFBD><C6BD>ֵ
g_ptz.Voltage = tem;
power_v = tem;
#endif
#ifdef PTZ_POWER_OFF_ADC_SINGLE
OSTimeDlyHMSM(0u, 0u, 0u, 2u);
//<2F><>ȡʵʱ<CAB5><CAB1>ѹ
g_ptz.Voltage = ptz_voltage_adc1();
//<2F>ж϶<D0B6><CFB6><EFBFBD><EFBFBD>ĵ<EFBFBD>ѹ<EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD>0<EFBFBD>Լ<EFBFBD><D4BC>Ƿ<EFBFBD><C7B7><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if(g_ptz.Voltage < 0 || isnan(g_ptz.Voltage) == 1)
{
g_ptz.Voltage = 0;
}
if(g_ptz.Voltage == 0)//<2F><><EFBFBD><EFBFBD><EFBFBD>ɼ<EFBFBD><C9BC><EFBFBD>ֵΪ0<CEAA><30><EFBFBD>ɼ<EFBFBD><C9BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>쳣Ϊ0<CEAA><30><EFBFBD>ߵ<EFBFBD>ѹ<EFBFBD><D1B9><EFBFBD><EFBFBD>ȷʵ<C8B7><CAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0<EFBFBD><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ٴ<EFBFBD><D9B4>²ɼ<C2B2>һ<EFBFBD>Σ<EFBFBD>
//<2F><><EFBFBD>Է<EFBFBD>ֹij<D6B9><C4B3>ʱ<EFBFBD>̳<EFBFBD><CCB3>ֵ<EFBFBD>ѹ<EFBFBD>ɼ<EFBFBD><C9BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̨<EFBFBD><CCA8><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>Դ<EFBFBD>ص<EFBFBD>
{
//OSTimeDlyHMSM(0u, 0u, 0u, 1u);
asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");
g_ptz.Voltage = ptz_voltage_adc1();//<2F>ٲɼ<D9B2>һ<EFBFBD><D2BB>
asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");
g_ptz.Voltage = ptz_voltage_adc1();//<2F>ٲɼ<D9B2>һ<EFBFBD><D2BB>
//<2F>ж϶<D0B6><CFB6><EFBFBD><EFBFBD>ĵ<EFBFBD>ѹ<EFBFBD>Ƿ<EFBFBD>С<EFBFBD><D0A1><EFBFBD><EFBFBD>0<EFBFBD>Լ<EFBFBD><D4BC>Ƿ<EFBFBD><C7B7><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if(g_ptz.Voltage < 0 || isnan(g_ptz.Voltage) == 1)
{
g_ptz.Voltage = 0;
}
}
power_v = g_ptz.Voltage;
#endif
/*****************************************ǿ<>Ʊ<EFBFBD><C6B1><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>********************************************************/
if(g_ptz.no_self_check_force_save == 1)
{
//<2F><EFBFBD><E6B4A2>̨<EFBFBD><CCA8>ǰ<EFBFBD><C7B0><EFBFBD>е<EFBFBD><D0B5><EFBFBD><EFBFBD><EFBFBD>
if((power_off_data.num & 1) == 0)//ż<><C5BC>
{
if(ptz_power_off_data_save(PTZ_MB85RC64_ADD_A) == 1)//<2F><EFBFBD><E6B4A2>̨<EFBFBD><CCA8>ǰ<EFBFBD><C7B0><EFBFBD>е<EFBFBD><D0B5><EFBFBD><EFBFBD><EFBFBD>
{
if(power_off_data.num == 65535)
{
power_off_data.num = 0;
}
else
{
power_off_data.num ++;
}
}
}
else
{
if(ptz_power_off_data_save(PTZ_MB85RC64_ADD_B) == 1)//<2F><EFBFBD><E6B4A2>̨<EFBFBD><CCA8>ǰ<EFBFBD><C7B0><EFBFBD>е<EFBFBD><D0B5><EFBFBD><EFBFBD><EFBFBD>
{
if(power_off_data.num == 65535)
{
power_off_data.num = 0;
}
else
{
power_off_data.num ++;
}
}
}
g_ptz.no_self_check_force_save = 2;//<2F><>ʾǿ<CABE>Ʊ<EFBFBD><C6B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̨<EFBFBD><CCA8><EFBFBD><EFBFBD>
}
if((g_ptz.hori_start_stop_set == PTZ_HORI_START || g_ptz.vert_start_stop_set == PTZ_VERT_START)
&& g_ptz.no_self_check_force_save == 2)
{//ǿ<>Ʊ<EFBFBD><C6B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݺ<EFBFBD><DDBA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̨<EFBFBD><CCA8>ת<EFBFBD><D7AA><EFBFBD>ˣ<EFBFBD><CBA3><EFBFBD><EFBFBD>ָֻ<D6BB><D6B8>Զ<EFBFBD><D4B6>жϵ<D0B6><CFB5><EFBFBD><EFBFBD><E6B9A6>
g_ptz.no_self_check_force_save = 0;
}
/**************************************ǿ<>Ʋ<EFBFBD><C6B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>******************************************************/
if(g_ptz.no_self_check_force_erase == 1)
{
ptz_power_off_data_erase(PTZ_MB85RC64_ADD_A);
ptz_power_off_data_erase(PTZ_MB85RC64_ADD_B);
g_ptz.no_self_check_force_erase = 2;
}
/********************************************<2A>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*****************************************************/
if(g_ptz.hori_self_check == PTZ_HORI_SELF_CHECK_END &&
g_ptz.vert_self_check == PTZ_VERT_SELF_CHECK_END &&
g_ptz.no_self_check_force_save != 2 &&
g_ptz.no_self_check_force_erase != 2 &&
g_ptz.no_self_check_state != 1 &&
g_ptz.hori_angle_state == 1 &&
g_ptz.vert_angle_state == 1 )
{
//<2F><>ѹ<EFBFBD><D1B9><EFBFBD>ִ<EFBFBD><D6B4><EFBFBD><EFBFBD>½<EFBFBD>
if(power_v < power_v1 && ((power_v1 - power_v) >= PTZ_POWER_DOWN_INC))
{
if((power_off_data.num & 1) == 0)//ż<><C5BC>
{
if(ptz_power_off_data_save(PTZ_MB85RC64_ADD_A) == 1)//<2F><EFBFBD><E6B4A2>̨<EFBFBD><CCA8>ǰ<EFBFBD><C7B0><EFBFBD>е<EFBFBD><D0B5><EFBFBD><EFBFBD><EFBFBD>
{
if(power_off_data.num == 65535)
{
power_off_data.num = 0;
}
else
{
power_off_data.num ++;
}
power_v1 = power_v;
}
}
else
{
if(ptz_power_off_data_save(PTZ_MB85RC64_ADD_B) == 1)//<2F><EFBFBD><E6B4A2>̨<EFBFBD><CCA8>ǰ<EFBFBD><C7B0><EFBFBD>е<EFBFBD><D0B5><EFBFBD><EFBFBD><EFBFBD>
{
if(power_off_data.num == 65535)
{
power_off_data.num = 0;
}
else
{
power_off_data.num ++;
}
power_v1 = power_v;
}
}
}
//<2F><>ѹ<EFBFBD><D1B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if(power_v > power_v1)
{
power_v1 = power_v;
}
// term_printf("\n power down save angle \r\n\r\n");//<2F><><EFBFBD><EFBFBD>
}
/**********************************<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֻҪ<D6BB><D2AA>̨һת<D2BB><D7AA><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>ԭ<EFBFBD>ȱ<EFBFBD><C8B1><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>**************************************/
if(g_ptz.no_self_check_state == 1 &&
(g_ptz.hori_start_stop_set == PTZ_HORI_START || g_ptz.vert_start_stop_set == PTZ_VERT_START))
{
number = power_off_data.num;
ptz_power_off_data_erase(PTZ_MB85RC64_ADD_A);
ptz_power_off_data_erase(PTZ_MB85RC64_ADD_B);
power_off_data.num = number;
g_ptz.no_self_check_state = 2;
}
}
}
static OS_STK task_power_off_stk[POWER_OFF_STK_SIZE];
static void creat_task_power_off(void)
{
CPU_INT08U task_err;
CPU_INT08U name_err;
task_err = OSTaskCreateExt((void (*)(void *)) ptz_power_off_task,
(void *) 0,
(OS_STK *)&task_power_off_stk[POWER_OFF_STK_SIZE - 1],
(INT8U ) POWER_OFF_PRIO,
(INT16U ) POWER_OFF_PRIO,
(OS_STK *)&task_power_off_stk[0],
(INT32U ) POWER_OFF_STK_SIZE,
(void *) 0,
(INT16U )(OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR));
#if (OS_TASK_NAME_EN > 0)
OSTaskNameSet(POWER_OFF_PRIO, "ptz_power_off_task", &name_err);
#endif
}
void init_power_off_module(void)
{
#ifdef PTZ_NO_SELF_CHECK
mb85rc64_gpio_init();
BSP_OS_SemCreate(&ptz_power_off_mutex,1u,"ptz_power_off_mutex");//<2F><><EFBFBD><EFBFBD><EFBFBD>ź<EFBFBD><C5BA><EFBFBD>
creat_task_power_off();
#endif
}