Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/158.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 从串行端口解码二进制数据_C++_Raspberry Pi_Serial Port_Binary Data - Fatal编程技术网

C++ 从串行端口解码二进制数据

C++ 从串行端口解码二进制数据,c++,raspberry-pi,serial-port,binary-data,C++,Raspberry Pi,Serial Port,Binary Data,我正在尝试通过Raspberry Pi上的串行与Simplebgc板通信。我正在写命令到董事会,这似乎是工作,但我需要帮助解码二进制响应。为什么我会得到23个“是”,而指南似乎加了18个?我对C和二进制都是新手 void sendCommand(){ int-fd; 如果((fd=serialOpen(“/dev/ttyS0”,115200))

我正在尝试通过Raspberry Pi上的串行与Simplebgc板通信。我正在写命令到董事会,这似乎是工作,但我需要帮助解码二进制响应。为什么我会得到23个“是”,而指南似乎加了18个?我对C和二进制都是新手

void sendCommand(){
int-fd;
如果((fd=serialOpen(“/dev/ttyS0”,115200))<0){
//fprintf(stderr,“无法打开串行设备:%s\n”,strerror(errno));

cout响应是一条带有标题的消息:

消息格式
每个命令都由标题和正文组成,两者都带有校验和。标题错误的命令 或正文校验和,或正文大小与预期不同的,应忽略。解析器应扫描 下一个开始字符的传入数据流,并尝试从中恢复同步


这将为您提供23字节。4字节标头。正文。1字节正文校验和。

您的调试输出完全无用。您正在打印一长行数字,但您不知道从电路板收到的数字是多少。例如,
628
-您收到了6,后跟28,62后跟8还是6后跟2后跟8?什么是否正确执行此操作?更新了我的问题。是否%d应按照手册中的规定正确打印十进制数字?这现在是有意义的。如果值为2u,例如固件版本,我是否需要进行位移位,因为它似乎是错误的。
void sendCommand() {
    int fd;

    if ((fd = serialOpen ("/dev/ttyS0", 115200)) < 0) {
        //fprintf (stderr, "Unable to open serial device: %s\n", strerror (errno));
        cout<<"Unable to open serial device"<<endl;
        return;
    }

    unsigned char motor_on[6] = {0x3E, 0x4D, 0x01, 0x4E,0x01, 0x01}; //MOTOR ON
    unsigned char motor_off[6] = {0x3E, 0x6D, 0x01, 0x6E,0x01, 0x01};  //MOTOR OFF
    unsigned char board_info[6] = {0x3E, 0x56, 0x01, 0x57, 0x01, 0x01};  //BOARD_INFO

    serialFlush(fd);

    // Send command to grab board info
    write(fd, board_info, 6);
    sleep(2);

    // Read board response and print it
    char c;
    int counter = 0;
    while (read(fd, &c, 1) == 1) {
        //putchar(c);  // print out char    
        printf("%d ",c);
        counter++;
    }
    cout<<"\ncounter="<<counter<<endl;
    sleep(5);


}

int main() {
    sendCommand();
    return 0;
}
Header:
    Start Character    1u
    Command ID         1u
    Payload Size       1u
    Header Checksum    1u
Body
    18 bytes as defined by you.
    Body Checksum      1u