ฉันกำลังเขียนโปรแกรมที่อ่านข้อมูลจากพอร์ตอนุกรมบน Linux ข้อมูลถูกส่งโดยอุปกรณ์อื่นด้วยรูปแบบเฟรมต่อไปนี้:
|start | Command | Data | CRC | End |
|0x02 | 0x41 | (0-127 octets) | | 0x03|
----------------------------------------------------
ฟิลด์ Data มี 127 octets ตามที่แสดง และ octet 1,2 มีข้อมูลประเภทหนึ่ง octet 3,4 มีข้อมูลอื่น ฉันต้องการรับข้อมูลเหล่านี้
เนื่องจากในCหนึ่งไบต์สามารถเก็บอักขระได้เพียงตัวเดียวและในช่องเริ่มต้นของเฟรมคือ 0x02 ซึ่งหมายถึง STX ซึ่งมีอักขระ 3 ตัว
ดังนั้น เพื่อทดสอบโปรแกรมของฉัน
ในด้านผู้ส่ง ฉันสร้างอาร์เรย์ตามรูปแบบเฟรมด้านบนดังนี้:
char frame[254];
frame[0] = 0x02; // starting field
frame[1] = 0x41; // command field which is character 'A'
..so on..
และจากนั้น ทางด้านผู้รับ ฉันนำฟิลด์ออกไปเช่น:
char result[254]; // read data read(result); printf("command = %c", result[1]); // get the command field of the frame // get other field's values
ค่าฟิลด์คำสั่ง (ผลลัพธ์ [1]) ไม่ใช่อักขระ 'A'
ฉันคิดว่านี่เป็นเพราะค่าฟิลด์แรกของเฟรมคือ 0x02 (STX) ที่ครอบครอง 3 ตำแหน่งแรกในเฟรมอาร์เรย์และนำไปสู่ผลลัพธ์ที่ไม่ถูกต้องในด้านผู้รับ
ฉันจะแก้ไขปัญหาหรือทำอะไรผิดที่ฝั่งผู้ส่งได้อย่างไร
คำถามที่เกี่ยวข้อง:
แยกวิเคราะห์และอ่าน data frame ใน C?
ล้างข้อมูลที่พอร์ตอนุกรมใน Linux ใน C?