编辑代码

#include <stdio.h>

void parseSerialData(unsigned char* data, int length) {
    int packetCount = 0;
    int packetStartIndex = -1;

    // 遍历接收到的数据
    for (int i = 0; i < length; i++) {
        // 检查帧头
        if (data[i] == 0xBB) {
            // 如果当前位置已经有一个包的起始位置,则判断前一个包是否完整
            if (packetStartIndex != -1) {
                if (i - packetStartIndex >= 10) {
                    // 前一个包是完整的,将其传递给处理函数
                    MolPump_RS232_RX_message(&data[packetStartIndex]);
                    packetCount++;
                }
            }
            // 设置当前包的起始位置
            packetStartIndex = i;
        }

        // 检查帧尾
        if (data[i] == 0x0D && i + 1 < length && data[i + 1] == 0x0A) {
            // 如果当前位置有一个包的起始位置,则判断当前包是否完整
            if (packetStartIndex != -1 && i - packetStartIndex + 2 >= 10) {
                // 当前包是完整的,将其传递给处理函数
                MolPump_RS232_RX_message(&data[packetStartIndex]);
                packetCount++;
                packetStartIndex = -1;
            }
        }
    }

    printf("Detected packets: %d\n", packetCount);
}

void MolPump_RS232_RX_message(unsigned char* rx_buf) {
    // 在这里处理接收到的包
    // 这里只是示例,你可以根据需要进行相应的操作
    printf("Received packet: ");
    for (int i = 0; i < 10; i++) {
        printf("%02X ", rx_buf[i]);
    }
    printf("\n");
}

int main() {
    // 示例数据
    unsigned char receivedData[] = {0xBB, 0x01, 0x02, 0x03, 0x04, 0x05, 0x0D, 0x0A, 0xBB, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0D, 0x0A};
    int dataLength = sizeof(receivedData) / sizeof(receivedData[0]);

    // 调用解析函数
    parseSerialData(receivedData, dataLength);

    return 0;
}