Có thể gửi NUL qua một dòng nối tiếp?


1

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:


4

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


Vì vậy, 0 trên một dòng nối tiếp sẽ như thế nào?
user233009

2
Một chút thời gian của điều kiện "giãn cách", đó sẽ là bit bắt đầu. Thêm tám lần "khoảng cách" - các bit dữ liệu, trong trường hợp này là tất cả các số 0. Và sau đó ít nhất một chút thời gian "đánh dấu" - bit stop. Sau đó, quá trình chuyển sang điều kiện "giãn cách" báo hiệu khung ký tự tiếp theo đã bắt đầu. Điều này có thể xảy ra bất cứ lúc nào sau khi một bit stop (hoặc bất cứ yêu cầu nào là yêu cầu; một vài thiết bị cũ yêu cầu hai hoặc thậm chí 1,5 bit stop) đã được hoàn thành; một dòng nhàn rỗi được giữ ở điều kiện "đánh dấu" miễn là cần thiết, cho đến khi khung ký tự tiếp theo bắt đầu.
Jamie Hanrahan

0

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.


"do đó bằng cách gửi bit stop hoặc không gửi bit stop, có thể phân biệt giữa không và null" -- Không đúng. Một bit stop tự nó là vô hình so với trạng thái nhàn rỗi (đánh dấu). Đó thực sự là bit start cho biết có một cái gì đó (tức là một khung) trên dây và (các) bit dừng xác nhận kết thúc của khung đó. Một bit stop bị thiếu / không hợp lệ tạo ra lỗi định khung. Mặt khác, có một ký tự nhận được với kiểm tra chẵn lẻ đang chờ xử lý / tùy chọn.
sawdust
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.