您好!
我使用的是基于 CC2652P7芯片的定制设计电路板。
使用的 SDK:simplelink_cc13xx_cc26xx_sdk_7_10_00_98
使用的 API:uART2_write (uart、data、len、&bytesWritten);
串行终端上打印的数据不完整。 bytesWritten (50个字节)小于'len'字节(59个字节)。
为什么会发生这种情况? 我应该交叉检查什么?
谢谢
卡尔蒂克
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
您好!
我使用的是基于 CC2652P7芯片的定制设计电路板。
使用的 SDK:simplelink_cc13xx_cc26xx_sdk_7_10_00_98
使用的 API:uART2_write (uart、data、len、&bytesWritten);
串行终端上打印的数据不完整。 bytesWritten (50个字节)小于'len'字节(59个字节)。
为什么会发生这种情况? 我应该交叉检查什么?
谢谢
卡尔蒂克
它是:
以下 printf 在包含4次迭代的循环中运行。
UART_printf ("\n\t:%d:%d:%d:%d:%d:%d:%d:%d:%d:%d:%d:%d:%d:%d:%d:%d:%d:%d:%d:%d:%d:%d:%d:%d:%d:%d:%d:%d:%d:%d:\n\r\xff"、
无线电、
lastPacket[radio].len、
//lastPacket[radio].lastSeqNo、
lastPacket[radio].seqNo、
rxPktCount[radio]、
otherPktCount[radio]、
crcErrorCount[radio]、
pristinePktCount[radio]、
noiceInPktCount[无线电]、
noiceOutPktCount[radio]、
reflectionInPktCount[radio]、
reflectionOutPktCount[radio]、
InterferenceInPktCount[radio]、
InterferenceOutPktCount[radio]、
阻塞性 InPktCount[radio],
阻塞性 OutPktCount[radio],
lastPacket[radio].rssi、
lastPacket[radio].lqi、
lastPacket[radio].syncDelta、
lastPacket[radio].missedAcks、
(CHANNEL_NUMBER_TABLE_LAST[RADIO]- 11)* 5 + 2405,
lastASN);
void uart_printf (const char *格式、...)
{
va_list 参数;
va_start (args、格式);
char buffer [128];//根据需要调整缓冲器大小
vsnprintf (buffer、sizeof (buffer)、format、args);
va_end (args);
uart_send_data ((const uint8_t *) buffer、strlen (buffer));
}
void uart_send_data (const uint8_t * data、uint32_t len)
{
size_t bytesWritten = 0;
int16_t RETURN_STATUS;
return_status = UART2_WRITE (uart、data、len、&bytesWritten);
//Karts[15-02-2024]:错误处理
if (return_status == UART2_STATUS_EINUSE)
{
UART_printf ("\n UART 错误 UART2_STATUS_EINUSE \n\n");
while (1);
}
否则
{
;
}
}
谢谢
卡尔蒂克
Karthik、您好、
您应该在 UART2_WRITE 中调试 UART_SEND_DATA、以确保参数始终正确并且没有被 vsnprintf 错误地更改。 您还显示了对退货状态的不完整监控、因为还有更多可用的信息。 同时监控 bytesWritten 的值以查看其是否与您的预期相符。 请确定是否将 UART_printf 与包含>50个字节(即字符串)的单个参数一起使用时显示类似的行为。 为了节省时间并解决当前的问题、您只需将 UART_printf 扩展到多个调用中、每个调用的参数更少。
此致、
瑞安
以下代码片段解决了该问题:
void uart_send_data (const uint8_t * data、uint32_t len){
int16_t RETURN_STATUS;
针对(uint32_t i = 0;i < len;i++){
return_status = UART2_WRITE (UART、&data[i]、1、NULL);
// Karts[15-02-2024]:错误处理
if (return_status == UART2_STATUS_EINUSE){
UART_printf ("\n UART 错误 UART2_STATUS_EINUSE \n\n");
while (1);
}
//如果需要,添加其他错误处理条件
}
}
此外、在 syscfg 中将 Tx 环形缓冲器配置为50。 导致了该问题。
谢谢
卡尔蒂克