"static uint8_t uartRead(serialPort_t *instance)\n{\n\t"uint8_t ch;\n\tuartPort_t *uartPort = (uartPort_t *)instance;\n\n#ifdef USE_DMA\n\tif (uartPort->rxDMAResource) {\n\t\tch = uartPort->port.rxBuffer[uartPort->port.rxBufferSize - uartPort->rxDMAPos];\n\t\tif (--uartPort->rxDMAPos == 0)\n\t\t\tuartPort->rxDMAPos = uartPort->port.rxBufferSize;\n\t} else\n#endif\n\t{\n\t\tch = uartPort->port.rxBuffer[uartPort->port.rxBufferTail];\n\t\tif (uartPort->port.rxBufferTail + 1 >= uartPort->port.rxBufferSize) {\n\t\t\tuartPort->port.rxBufferTail = 0;\n\t\t} else {\n\t\t\tuartPort->port.rxBufferTail++;\n\t\t}\n\t}\n\n\treturn ch;\n}\n"该函数中, if (--uartPort->rxDMAPos == 0)\n\t\tuartPort->rxDMAPos = uartPort->port.rxBufferSize;\n是为了什么内容:这个语句的目的是确保uartPort->rxDMAPos的值不会变为0。当uartPort->rxDMAPos的值减到0时,将其重新设置为uartPort->port.rxBufferSize的值,以便循环读取接收缓冲区中的数据。这样可以保证接收缓冲区中的数据能够被连续地读取并处理。


原文地址: https://www.cveoy.top/t/topic/pDST 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录