Giá trị của ký tự ascii "NUL" là 0. Có thể gửi ký tự này qua một dòng nối tiếp mà không bị hiểu là không có dữ liệu nào được gửi không?
Giá trị của ký tự ascii "NUL" là 0. Có thể gửi ký tự này qua một dòng nối tiếp mà không bị hiểu là không có dữ liệu nào được gửi không?
Câu trả lời:
Phải, tất nhiên. Việc đóng khung các ký tự tách biệt với nội dung của chúng. Không có lý do gì mà tám bit bằng 0 sẽ được hiểu là "không có dữ liệu nào được gửi" - bất kỳ nhiều hơn một khu vực đĩa chứa đầy số không.
Để giải thích: Trong chuỗi async điển hình, bạn có một bit start, sau đó là tám bit dữ liệu, sau đó là bit stop. Bạn vẫn sẽ có tám bit dữ liệu - chúng chỉ là tất cả các số 0. Bit bắt đầu và dừng nói với người nhận "đây là một ký tự". Những gì các bit trong nhân vật xảy ra là không liên quan.
Nếu một chương trình nhận xảy ra để giải thích NUL là "không có dữ liệu", thì đó là việc của nó, nhưng đó là vấn đề của lớp ứng dụng.
Ví dụ, nếu chương trình nhận là trình giả lập thiết bị đầu cuối, nó có thể sẽ không làm gì khi nhận được NUL (vì đó là điều mà hầu hết các thiết bị đầu cuối thực sự đã làm). API cổng nối tiếp vẫn sẽ đăng ký nhận ký tự NUL và đưa nó cho chương trình. Đó là trình giả lập thiết bị đầu cuối đã quyết định "oh, tôi sẽ bỏ qua điều đó."
Có rất nhiều ứng dụng để gửi dữ liệu "nhị phân" qua các dòng nối tiếp không đồng bộ sẽ bị lỗi nếu NUL không được gửi hoặc nhận.
Để biết thêm thông tin, xem https://en.wikipedia.org/wiki/Asynyncous_serial_c truyền thông
Giao thức nối tiếp có các bit start và stop và dữ liệu được rào trong đó - N81 (không có chẵn lẻ, 8 bit, 1 bit stop sẽ cho phép bạn gửi bất kỳ ký tự ASCII nào và là 1 mã hóa phổ biến), do đó bằng cách gửi bit start không gửi bit bắt đầu, có thể phân biệt giữa không và null.