Mình đang làm 1 project về gọi điện thoại, trong đó có nhiều máy con và 1 máy mẹ (do mình điều khiển thông qua RS 232). Cụ thể là:
Máy con muốn liên lạc với máy mẹ thì sẽ gửi 1 đoạn byte (độ dài 8 byte) đến máy mẹ, và nhiệm vụ của mình là nghe đoạn byte đó và xác định đó là máy con có ID bao nhiêu (cái này mình đã làm đc) và có cho phép nói chuyện với máy mẹ hay không (cái này mình cũng làm đc).
Nhưng trong quá trình làm mình gặp vài vấn đề sau, thực sự là tìm nhiều cách rồi mà không giải quyết được..
Thứ 1: Xử lý động trong thời gian thực. Mình muốn liên tục cập nhật request của các máy con, tức là khi máy con request là phải có tên trong danh sách luôn. Hiện tại thì mình chỉ xác định được máy con nào request sau khi ấn 1 button lưu lại dữ liệu nhận được từ các máy con rồi mới xử lý. Mình rất muốn quá trình đọc đoạn byte gửi về và phân tích này nó tự động.
Thứ 2: Mình lắng nghe đoạn dữ liệu gửi về ở dạng string, sau đó chuyển về dạng byte, sau đó chuyển ra hex rồi phân tích chuỗi hex đó theo protocol cho trước, nhưng cách phân tích này nhiều lúc gặp lỗi vì là thao tác cắt, xén chuỗi string rồi so sánh:
Ví dụ 07 6A 01 01 02 00 02 00 => minh sẽ cắt xén lấy ra chuỗi tại vị trí 13-14 tức là 02 để xử lý, nhưng hay gặp lỗi do dữ liệu nhận về không đủ, hoặc nhiều máy con cùng request dẫn đến chèn dữ liệu lên nhau và không đúng định dạng protocol cho trước.
Có một anh đã nói mình nên dùng Ring buffer, nhưng mình chưa hiểu lắm, mình nghĩ nhận dữ liệu về dạng byte rồi lưu vào buffer để chờ xử lý vẫn là chuẩn nhất rồi chứ không phải là receive data như kiểu của mình. Nhưng nên lưu thế nào thì mình vẫn đang mắc.
Mong các bạn giúp đỡ mình 2 vấn đề này. Mình rất cần hướng giải quyết sớm vì sắp đến deadline rồi. Cám ơn mọi người nhiều.
Máy con muốn liên lạc với máy mẹ thì sẽ gửi 1 đoạn byte (độ dài 8 byte) đến máy mẹ, và nhiệm vụ của mình là nghe đoạn byte đó và xác định đó là máy con có ID bao nhiêu (cái này mình đã làm đc) và có cho phép nói chuyện với máy mẹ hay không (cái này mình cũng làm đc).
Nhưng trong quá trình làm mình gặp vài vấn đề sau, thực sự là tìm nhiều cách rồi mà không giải quyết được..
Thứ 1: Xử lý động trong thời gian thực. Mình muốn liên tục cập nhật request của các máy con, tức là khi máy con request là phải có tên trong danh sách luôn. Hiện tại thì mình chỉ xác định được máy con nào request sau khi ấn 1 button lưu lại dữ liệu nhận được từ các máy con rồi mới xử lý. Mình rất muốn quá trình đọc đoạn byte gửi về và phân tích này nó tự động.
Thứ 2: Mình lắng nghe đoạn dữ liệu gửi về ở dạng string, sau đó chuyển về dạng byte, sau đó chuyển ra hex rồi phân tích chuỗi hex đó theo protocol cho trước, nhưng cách phân tích này nhiều lúc gặp lỗi vì là thao tác cắt, xén chuỗi string rồi so sánh:
Ví dụ 07 6A 01 01 02 00 02 00 => minh sẽ cắt xén lấy ra chuỗi tại vị trí 13-14 tức là 02 để xử lý, nhưng hay gặp lỗi do dữ liệu nhận về không đủ, hoặc nhiều máy con cùng request dẫn đến chèn dữ liệu lên nhau và không đúng định dạng protocol cho trước.
Có một anh đã nói mình nên dùng Ring buffer, nhưng mình chưa hiểu lắm, mình nghĩ nhận dữ liệu về dạng byte rồi lưu vào buffer để chờ xử lý vẫn là chuẩn nhất rồi chứ không phải là receive data như kiểu của mình. Nhưng nên lưu thế nào thì mình vẫn đang mắc.
Mong các bạn giúp đỡ mình 2 vấn đề này. Mình rất cần hướng giải quyết sớm vì sắp đến deadline rồi. Cám ơn mọi người nhiều.
Comment