您好:
使用如下的串口程序。收到的数据发生的移位的情况。可以帮忙看看是什么问题造成的吗?
由串口发送如下数据:
程序控制的调试信息如下:
您好:
我在CLI_task 中加入串口程序。
把rxBuffer添加 Watch Windowns,但是查找不出他的内存。
可以详细说说怎么查看内存。
谢谢!
你好,
可以使用串口的HEX模式试一下。
/* Setup the default UART Parameters */
UART_Params_init(&uartParams);
uartParams.writeDataMode = UART_DATA_BINARY;
uartParams.readDataMode = UART_DATA_BINARY;
uartParams.clockFrequency = gMmwMssMCB.cfg.sysClockFrequency;
uartParams.baudRate = gMmwMssMCB.cfg.loggingBaudRate;
uartParams.isPinMuxDone = 1U;
您好:
按照您的设置,如下:
UART_Params_init(&uartParams);
uartParams.clockFrequency = gMmwMCB.cfg.platformCfg.sysClockFrequency;
uartParams.baudRate = gMmwMCB.cfg.platformCfg.commandBaudRate;
uartParams.readEcho = UART_ECHO_OFF;
uartParams.writeDataMode = UART_DATA_BINARY;
uartParams.readDataMode = UART_DATA_BINARY;
uartParams.isPinMuxDone = 1;
cliCfg.cliUartHandle = gMmwMCB.commandUartHandle;
memset ((void *)&rxBuffer[0], 0, 8);
int ret = UART_read(gCLI.cfg.cliUartHandle,&rxBuffer[0],8);
System_printf ("the number of readbyte %d\n",ret);
System_printf ("%x %x %x %x %x %x %x %x\n", rxBuffer[0],rxBuffer[1],rxBuffer[2],rxBuffer[3],rxBuffer[4],rxBuffer[5],rxBuffer[6],rxBuffer[7]);
UART_writePolling(gCLI.cfg.cliUartHandle,&rxBuffer[0],8);
还是出现了上述现象。
谢谢
创建了一个简短的小程序来模拟您使用UART API减去(例如)提供的代码段。 UART_read()。 但是无法复制乱序字节问题。可能有两个地方存在争议。
1.您使用的串行终端可能是原因,通常使用PuTTY或Teraterm。 请您尝试一下,看看是否会改变程序的输出。
2.您使用System_printf(),这可能是问题所在。
为了解决此错误,建议使用调试器+内存浏览器来查看程序中的变量/数据结构如何逐行变化。
如果找不到您的memory browser,请在Google中搜索您特定的IDE,并确定是否具有调试器以及memory browser。假设您正在使用CCS,则这两个功能需要使用。
从图1中可以看到,确实在内存地址0x08007498中字节序列是正确的。 在图2中,0x17字节是乱序的。
是什么在内存中生成了正确的数据? 是同一串行终端还是其他?如果当前的串行终端软件最初在内存中产生了正确的结果,那么在经过一些指令后,内存将被更改,则需要对其进行共享。
建议找另一个适用于该应用程序的串行终端,尝试复制该问题。如果不能复制循环移位,则可以确定问题出在主要的串行终端软件上。
请问是否可以提供对mss_main.c执行的所有更改,以便于更好分析您的问题。
您好:
当串口收到错误数据时,程序会丢弃这部分程序。但只要收到错误的数据后面就会一直错。我试过将数据字节少于8个字节,或者数据字节大于八个字节。都会将数据最后一个字节放在接收字节的第一位并不是循环移动的。
这个串口接收程序,可以在接收数据未满8个字节或者超过8个字节,在下次数据未发送时,将缓存再进行一次清理吗?换句话说,就能在下一次读取数据时,数据都是一次性接收的。
谢谢
您正在使用的是UART_read(),建议您改用UART_readPolling()试一下