I use SDK16 and softdevice S140. I use cdc_acm to simulate a UART port. My data traffic is very heavy. It cause data overwrite and send out many zero. My source code snippet is as follows.
Does anyone know how to prevent from UART (cdc_acm) overwriting?
UART receives message. Send out many 0, it seems overwriting. (NULL is 0x00) 2021/3/30 13:37:35.431 [RX] - <NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL> 2021/3/30 13:37:35.479 [RX] - 98588A110014 10014 15 24 2.89 0 0 -066 11 24 BSI03-T-SB <CR><LF> 2021/3/30 13:37:35.484 [RX] - 98588A0FC414 1C414 0 25 2.92 129 136 -056 0d 08 BSE09-T <CR><LF> 2021/3/30 13:37:35.489 [RX] - 98588A0FC4C2 1C4C2 0 25 2.92 144 139 -052 0d 08 BSE09-T <CR><LF> 2021/3/30 13:37:35.525 [RX] - 98588A110014 10014 15 24 2.89 0 0 -066 11 24 BSI03-T-SB <CR><LF> 2021/3/30 13:37:35.561 [RX] - 98588A0023FF 023FF 0 24 2.87 0 0 -053 11 24 BSI03-T-SB <CR><LF> 2021/3/30 13:37:35.569 [RX] - 98588A110014 10014 15 24 2.89 0 0 -078 11 24 BSI03-T-SB <CR><LF> 2021/3/30 13:37:35.618 [RX] - <NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL>
My source code snippet.
char m_dongle_buffer[200];
void sysg_send_uart_string_to_device(uint8_t* pdata, uint8_t len)
{
app_usbd_cdc_acm_write(&m_app_cdc_acm, pdata, len);
}
void output_char(void)
{
char buf[64];
....
memset(m_dongle_buffer, 0, sizeof(m_dongle_buffer));
sprintf((char*)m_dongle_buffer," %02X%02X%02X%02X%02X%02X%02X%02X ",
p_adv_report->data.p_data[0],p_adv_report->data.p_data[1],p_adv_report->data.p_data[2],p_adv_report->data.p_data[3],
p_adv_report->data.p_data[4],p_adv_report->data.p_data[5],p_adv_report->data.p_data[6],p_adv_report->data.p_data[7]);
sprintf((buf," %02X%02X%02X%02X%02X%02X%02X%02X ",
....
strcat(m_dongle_buffer, buf);
sysg_send_uart_string_to_device(m_dongle_buffer, strlen(m_dongle_buffer));
...
}