From c11db2c9bf067322d97a19afd7eefb3a387ca302 Mon Sep 17 00:00:00 2001 From: yelvlab Date: Thu, 23 Jan 2025 10:35:12 +0800 Subject: [PATCH] for debug --- ld/gd32e23x_gcc.ld | 2 +- src/gd32e23x_it.c | 8 +++---- src/rs485_protocol.c | 56 +++++++++++++++++++++++++++----------------- 3 files changed, 40 insertions(+), 26 deletions(-) diff --git a/ld/gd32e23x_gcc.ld b/ld/gd32e23x_gcc.ld index 65afe02..4773fab 100644 --- a/ld/gd32e23x_gcc.ld +++ b/ld/gd32e23x_gcc.ld @@ -2,7 +2,7 @@ MEMORY { FLASH (rx) : ORIGIN = 0x08000000, LENGTH = 64K - RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 4K + RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 8K } ENTRY(Reset_Handler) diff --git a/src/gd32e23x_it.c b/src/gd32e23x_it.c index b82e933..75ec00a 100644 --- a/src/gd32e23x_it.c +++ b/src/gd32e23x_it.c @@ -163,15 +163,15 @@ void USART1_IRQHandler(void) { // static uint8_t rx_buffer[RX_BUFFER_SIZE]; if (RESET != usart_interrupt_flag_get(USART_PHY, USART_INT_FLAG_RBNE)) { - usart_interrupt_flag_clear(USART_PHY, USART_INT_FLAG_RBNE); + // usart_interrupt_flag_clear(USART_PHY, USART_INT_FLAG_RBNE); uint8_t received_data = (uint8_t) usart_data_receive(USART_PHY); - printf("%c", received_data); - // // 将接收到的数据存储到缓冲区 + // printf("%c", received_data); + // 将接收到的数据存储到缓冲区 // if (rx_index < RX_BUFFER_SIZE - 1) { // rx_buffer[rx_index++] = received_data; // } - // store_char(received_data, &rx_buffer); + store_char(received_data, &rx_buffer); } // // if (RESET != usart_interrupt_flag_get(USART0, USART_INT_FLAG_IDLE)) { diff --git a/src/rs485_protocol.c b/src/rs485_protocol.c index c81a9b9..78f3596 100644 --- a/src/rs485_protocol.c +++ b/src/rs485_protocol.c @@ -18,9 +18,20 @@ static char *strchr_pointer = NULL; static packet_state_t packet_state = PS_LEN; +// bool code_seen(char code) { +// // strchr_pointer = strchr(cmd_buffer[buf_index_r], code); +// return (strchr_pointer != NULL); //Return True if a character was found +// } + bool code_seen(char code) { - strchr_pointer = strchr(cmd_buffer[buf_index_r], code); - return (strchr_pointer != NULL); //Return True if a character was found + strchr_pointer = NULL; + for (int i = 0; cmd_buffer[buf_index_r][i] != '\0'; i++) { + if (cmd_buffer[buf_index_r][i] == code) { + strchr_pointer = &cmd_buffer[buf_index_r][i]; + break; + } + } + return (strchr_pointer != NULL); // Return True if a character was found } float code_value(void) { @@ -149,6 +160,7 @@ void start_communication(void) { } if (buf_length) { + printf("DONE!\r\n"); prcess_command(); buf_length--; buf_index_r = (buf_index_r + 1) % BUF_SIZE; @@ -178,34 +190,36 @@ void get_command(void) { } else { serial_count = 0; } - break; + break; case PS_TYPE: packet_type = serial_char; - check_sum += serial_char; - packet_state = PS_LEN; - break; + check_sum += serial_char; + packet_state = PS_LEN; + break; case PS_LEN: check_sum += serial_char; - packet_len = serial_char; - packet_state = PS_PAYLOAD; - break; + packet_len = serial_char; + packet_state = PS_PAYLOAD; + break; case PS_PAYLOAD: check_sum += serial_char; - cmd_buffer[buf_index_w][serial_count++] = serial_char; - if (serial_count >= packet_len) { - packet_state = PS_CRC; - } - break; + cmd_buffer[buf_index_w][serial_count++] = serial_char; + if (serial_count >= packet_len) { + packet_state = PS_CRC; + } + break; case PS_CRC: packet_state = PS_NULL; - if (!serial_count || check_sum != serial_char) { + if (!serial_count || check_sum != serial_char) { + serial_count = 0; + return; + } + cmd_buffer[buf_index_w][serial_count] = 0; + buf_index_w = (buf_index_w + 1) % BUF_SIZE; + buf_length++; serial_count = 0; - return; - } - cmd_buffer[buf_index_w][serial_count] = 0; - buf_index_w = (buf_index_w + 1) % BUF_SIZE; - buf_length++; - serial_count = 0; + default: + break; } } }