处理IO中断偶然性丢失数据的BUG
This commit is contained in:
parent
d280ca2a05
commit
20a463febf
|
@ -22,7 +22,7 @@
|
||||||
#define API_FRAME_RESPONSE (0x01) /* 响应帧 */
|
#define API_FRAME_RESPONSE (0x01) /* 响应帧 */
|
||||||
#define API_FRAME_NOTIFICATION (0x02) /* 通知帧 */
|
#define API_FRAME_NOTIFICATION (0x02) /* 通知帧 */
|
||||||
|
|
||||||
#define SOFTWARE_VERSION ("V1.25")
|
#define SOFTWARE_VERSION ("V1.26")
|
||||||
#define HARDWARE_VERSION ("V1.01")
|
#define HARDWARE_VERSION ("V1.01")
|
||||||
|
|
||||||
extern uint8_t api_upgrade_mode;
|
extern uint8_t api_upgrade_mode;
|
||||||
|
|
|
@ -12,12 +12,13 @@ static uint64_t diaodu_rx_led_timestamp = 0;
|
||||||
static uint64_t run_led_timestamp = 0;
|
static uint64_t run_led_timestamp = 0;
|
||||||
static uint64_t diaodu_status_rx_timestamp = 0;
|
static uint64_t diaodu_status_rx_timestamp = 0;
|
||||||
|
|
||||||
|
static uint8_t vehicle_status_trigger_mode = 0; /* 车辆状态触发方式:0 IO; 1 CAN */
|
||||||
static uint8_t door_front_status = 1, door_front_status_temporary = 1;
|
static uint8_t door_front_status = 1, door_front_status_temporary = 1;
|
||||||
static uint8_t door_back_status = 1, door_back_status_temporary = 1;
|
static uint8_t door_back_status = 1, door_back_status_temporary = 1;
|
||||||
static uint8_t door_status = 2, door_status_temporary = 2;
|
static uint8_t door_status = 2, door_status_temporary = 2;
|
||||||
static uint8_t turn_left_type = 0, turn_left_status = 1, turn_left_status_temporary = 1; /* turn_left_type:0 IO; 1 CAN */
|
static uint8_t turn_left_status = 1, turn_left_status_temporary = 1;
|
||||||
static uint8_t turn_left_parsing_count = 0; /* 转向接收次数 */
|
static uint8_t turn_left_parsing_count = 0; /* 转向接收次数 */
|
||||||
static uint8_t turn_right_type = 1, turn_right_status = 1, turn_right_status_temporary = 1;
|
static uint8_t turn_right_status = 1, turn_right_status_temporary = 1;
|
||||||
static uint8_t turn_right_parsing_count = 0; /* 转向接收次数 */
|
static uint8_t turn_right_parsing_count = 0; /* 转向接收次数 */
|
||||||
static uint8_t emergency_flashers_status = 1, emergency_flashers_status_temporary = 1; /* 双闪 */
|
static uint8_t emergency_flashers_status = 1, emergency_flashers_status_temporary = 1; /* 双闪 */
|
||||||
static uint8_t reversing_status = 1, reversing_status_temporary = 1;
|
static uint8_t reversing_status = 1, reversing_status_temporary = 1;
|
||||||
|
@ -88,30 +89,33 @@ void gpio_interrupt_callback(uint32_t pin)
|
||||||
switch (pin)
|
switch (pin)
|
||||||
{
|
{
|
||||||
case DOOR_FRONT_PIN:
|
case DOOR_FRONT_PIN:
|
||||||
door_front_status_temporary = gpio_input_bit_get(DOOR_FRONT_PERIPH, DOOR_FRONT_PIN);
|
|
||||||
door_front_upload_status = 0x01;
|
door_front_upload_status = 0x01;
|
||||||
|
vehicle_status_trigger_mode = 0;
|
||||||
|
door_front_status_temporary = gpio_input_bit_get(DOOR_FRONT_PERIPH, DOOR_FRONT_PIN);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case DOOR_BACK_PIN:
|
case DOOR_BACK_PIN:
|
||||||
door_back_status_temporary = gpio_input_bit_get(DOOR_BACK_PERIPH, DOOR_BACK_PIN);
|
|
||||||
door_back_upload_status = 0x01;
|
door_back_upload_status = 0x01;
|
||||||
|
vehicle_status_trigger_mode = 0;
|
||||||
|
door_back_status_temporary = gpio_input_bit_get(DOOR_BACK_PERIPH, DOOR_BACK_PIN);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case TURN_LEFT_PIN:
|
case TURN_LEFT_PIN:
|
||||||
turn_left_type = 0;
|
|
||||||
turn_left_status_temporary = gpio_input_bit_get(TURN_LEFT_PERIPH, TURN_LEFT_PIN);
|
|
||||||
turn_left_upload_status = 0x01;
|
turn_left_upload_status = 0x01;
|
||||||
|
vehicle_status_trigger_mode = 0;
|
||||||
|
turn_left_status_temporary = gpio_input_bit_get(TURN_LEFT_PERIPH, TURN_LEFT_PIN);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case TURN_RIGHT_PIN:
|
case TURN_RIGHT_PIN:
|
||||||
turn_right_type = 0;
|
|
||||||
turn_right_status_temporary = gpio_input_bit_get(TURN_RIGHT_PERIPH, TURN_RIGHT_PIN);
|
|
||||||
turn_right_upload_status = 0x01;
|
turn_right_upload_status = 0x01;
|
||||||
|
vehicle_status_trigger_mode = 0;
|
||||||
|
turn_right_status_temporary = gpio_input_bit_get(TURN_RIGHT_PERIPH, TURN_RIGHT_PIN);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case REVERSING_PIN:
|
case REVERSING_PIN:
|
||||||
reversing_status_temporary = gpio_input_bit_get(REVERSING_PERIPH, REVERSING_PIN);
|
|
||||||
reversing_upload_status = 0x01;
|
reversing_upload_status = 0x01;
|
||||||
|
vehicle_status_trigger_mode = 0;
|
||||||
|
reversing_status_temporary = gpio_input_bit_get(REVERSING_PERIPH, REVERSING_PIN);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -350,24 +354,26 @@ static void can_parsing_task(uint8_t uuid)
|
||||||
{
|
{
|
||||||
can_channge_status = 1;
|
can_channge_status = 1;
|
||||||
door_front_upload_status = 0x01;
|
door_front_upload_status = 0x01;
|
||||||
|
vehicle_status_trigger_mode = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (door_back_status_temporary != door_back_status)
|
if (door_back_status_temporary != door_back_status)
|
||||||
{
|
{
|
||||||
can_channge_status = 1;
|
can_channge_status = 1;
|
||||||
door_back_upload_status = 0x01;
|
door_back_upload_status = 0x01;
|
||||||
|
vehicle_status_trigger_mode = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (turn_left_status_temporary != turn_left_status)
|
if (turn_left_status_temporary != turn_left_status)
|
||||||
{
|
{
|
||||||
turn_left_type = 1;
|
|
||||||
can_channge_status = 1;
|
can_channge_status = 1;
|
||||||
turn_left_upload_status = 0x01;
|
turn_left_upload_status = 0x01;
|
||||||
|
vehicle_status_trigger_mode = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (turn_right_status_temporary != turn_right_status)
|
if (turn_right_status_temporary != turn_right_status)
|
||||||
{
|
{
|
||||||
turn_right_type = 1;
|
vehicle_status_trigger_mode = 1;
|
||||||
can_channge_status = 1;
|
can_channge_status = 1;
|
||||||
turn_right_upload_status = 0x01;
|
turn_right_upload_status = 0x01;
|
||||||
}
|
}
|
||||||
|
@ -376,6 +382,7 @@ static void can_parsing_task(uint8_t uuid)
|
||||||
{
|
{
|
||||||
can_channge_status = 1;
|
can_channge_status = 1;
|
||||||
reversing_upload_status = 0x01;
|
reversing_upload_status = 0x01;
|
||||||
|
vehicle_status_trigger_mode = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (can_channge_status == 1)
|
if (can_channge_status == 1)
|
||||||
|
@ -470,6 +477,10 @@ static void vehicle_status_parsing_task(uint8_t uuid)
|
||||||
|
|
||||||
uint8_t door_change = 0;
|
uint8_t door_change = 0;
|
||||||
|
|
||||||
|
/* IO状态下必须保持是实时状态 */
|
||||||
|
if (vehicle_status_trigger_mode == 0)
|
||||||
|
reversing_status_temporary = gpio_input_bit_get(REVERSING_PERIPH, REVERSING_PIN);
|
||||||
|
|
||||||
/* 倒车状态判断 */
|
/* 倒车状态判断 */
|
||||||
if (reversing_status != reversing_status_temporary)
|
if (reversing_status != reversing_status_temporary)
|
||||||
{
|
{
|
||||||
|
@ -498,10 +509,17 @@ static void vehicle_status_parsing_task(uint8_t uuid)
|
||||||
if (reversing_status == 0)
|
if (reversing_status == 0)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (door_front_status_temporary != door_front_status)
|
/* IO状态下必须保持是实时状态 */
|
||||||
|
if (vehicle_status_trigger_mode == 0)
|
||||||
|
{
|
||||||
|
door_front_status_temporary = gpio_input_bit_get(DOOR_FRONT_PERIPH, DOOR_FRONT_PIN);
|
||||||
|
door_back_status_temporary = gpio_input_bit_get(DOOR_BACK_PERIPH, DOOR_BACK_PIN);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (door_front_status != door_front_status_temporary)
|
||||||
door_front_status = door_front_status_temporary;
|
door_front_status = door_front_status_temporary;
|
||||||
|
|
||||||
if (door_back_status_temporary != door_back_status)
|
if (door_back_status != door_back_status_temporary)
|
||||||
door_back_status = door_back_status_temporary;
|
door_back_status = door_back_status_temporary;
|
||||||
|
|
||||||
door_status_temporary = door_front_status_temporary & door_back_status_temporary;
|
door_status_temporary = door_front_status_temporary & door_back_status_temporary;
|
||||||
|
@ -579,7 +597,6 @@ static void vehicle_status_parsing_task(uint8_t uuid)
|
||||||
|
|
||||||
goto EXECUTE;
|
goto EXECUTE;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -598,7 +615,7 @@ static void vehicle_status_parsing_task(uint8_t uuid)
|
||||||
if (turn_left_status != turn_left_status_temporary)
|
if (turn_left_status != turn_left_status_temporary)
|
||||||
{
|
{
|
||||||
/* 只有通过IO接收的数据,才需要做脉冲判断 */
|
/* 只有通过IO接收的数据,才需要做脉冲判断 */
|
||||||
if (turn_left_type == 0)
|
if (vehicle_status_trigger_mode == 0)
|
||||||
{
|
{
|
||||||
/* 如果未触发状态, 需进行二次判断 */
|
/* 如果未触发状态, 需进行二次判断 */
|
||||||
if (turn_left_status_temporary == 1)
|
if (turn_left_status_temporary == 1)
|
||||||
|
@ -634,7 +651,7 @@ TURN_RIGHT_STATUS_TAG2:
|
||||||
if (turn_right_status != turn_right_status_temporary)
|
if (turn_right_status != turn_right_status_temporary)
|
||||||
{
|
{
|
||||||
/* 只有通过IO接收的数据,才需要做脉冲判断 */
|
/* 只有通过IO接收的数据,才需要做脉冲判断 */
|
||||||
if (turn_right_type == 0)
|
if (vehicle_status_trigger_mode == 0)
|
||||||
{
|
{
|
||||||
/* 如果未触发状态, 需进行二次判断 */
|
/* 如果未触发状态, 需进行二次判断 */
|
||||||
if (turn_right_status_temporary == 1)
|
if (turn_right_status_temporary == 1)
|
||||||
|
|
|
@ -49,19 +49,11 @@ static void bsp_initialization(void)
|
||||||
gpio_config(VOLUME_3_PERIPH, VOLUME_3_PIN, GPIO_MODE_IN_FLOATING, GPIO_OSPEED_50MHZ, nullptr);
|
gpio_config(VOLUME_3_PERIPH, VOLUME_3_PIN, GPIO_MODE_IN_FLOATING, GPIO_OSPEED_50MHZ, nullptr);
|
||||||
gpio_config(VOLUME_4_PERIPH, VOLUME_4_PIN, GPIO_MODE_IN_FLOATING, GPIO_OSPEED_50MHZ, nullptr);
|
gpio_config(VOLUME_4_PERIPH, VOLUME_4_PIN, GPIO_MODE_IN_FLOATING, GPIO_OSPEED_50MHZ, nullptr);
|
||||||
|
|
||||||
/* 前门 检测引脚 初始化 */
|
/* 前门 后门 左转弯 右转弯 倒车 检测引脚 初始化 */
|
||||||
gpio_interrupt_config(DOOR_FRONT_PERIPH, DOOR_FRONT_PIN, EXTI_TRIG_BOTH);
|
gpio_interrupt_config(DOOR_FRONT_PERIPH, DOOR_FRONT_PIN, EXTI_TRIG_BOTH);
|
||||||
|
|
||||||
/* 后门 检测引脚 初始化 */
|
|
||||||
gpio_interrupt_config(DOOR_BACK_PERIPH, DOOR_BACK_PIN, EXTI_TRIG_BOTH);
|
gpio_interrupt_config(DOOR_BACK_PERIPH, DOOR_BACK_PIN, EXTI_TRIG_BOTH);
|
||||||
|
|
||||||
/* 左转弯 检测引脚 初始化 */
|
|
||||||
gpio_interrupt_config(TURN_LEFT_PERIPH, TURN_LEFT_PIN, EXTI_TRIG_BOTH);
|
gpio_interrupt_config(TURN_LEFT_PERIPH, TURN_LEFT_PIN, EXTI_TRIG_BOTH);
|
||||||
|
|
||||||
/* 右转弯 检测引脚 初始化 */
|
|
||||||
gpio_interrupt_config(TURN_RIGHT_PERIPH, TURN_RIGHT_PIN, EXTI_TRIG_BOTH);
|
gpio_interrupt_config(TURN_RIGHT_PERIPH, TURN_RIGHT_PIN, EXTI_TRIG_BOTH);
|
||||||
|
|
||||||
/* 倒车 检测引脚 初始化 */
|
|
||||||
gpio_interrupt_config(REVERSING_PERIPH, REVERSING_PIN, EXTI_TRIG_BOTH);
|
gpio_interrupt_config(REVERSING_PERIPH, REVERSING_PIN, EXTI_TRIG_BOTH);
|
||||||
|
|
||||||
/* 功放控制脚,默认开启 */
|
/* 功放控制脚,默认开启 */
|
||||||
|
|
Loading…
Reference in New Issue
Block a user