2011-11-17 24 views
6

gì? Nó khác với bản sao sâu và bản sao nông?Bản sao nối tiếp là gì? Và tại sao nó được thực hiện như thế này? <em>serial</em> bản sao là

Theo mục wiki dưới Duff's device, nó được truyền thống thực hiện như:

do {    //count > 0 assumed 
    *to = *from++; //Note that the 'to' pointer is NOT incremented 
} while(--count > 0); 

Và sau đó nó làm cho một lưu ý, nói

Lưu ý rằng to không tăng vì Duff đã được sao chép để một thanh ghi đầu ra được ánh xạ bộ nhớ duy nhất.

Tôi thực sự không hiểu lưu ý này.

Nếu to con trỏ không được tăng lên, thì điểm của vòng lặp là gì? Tại sao sau đó nó được thực hiện như:

*to = from[count-1]; //does it not do the same thing? 

Tôi nghi ngờ rằng nó có cái gì để làm với định nghĩa của serial bản sao.

Làm cách nào chúng tôi có thể cấp phát bộ nhớ cho to để vòng lặp có thể tạo sự khác biệt?

+0

Có thể là một bản sao cho một BUFFER FIFO. Ví dụ. một bộ đệm phần cứng cho một thiết bị. – neagoegab

Trả lời

9

Điểm của bản sao như vậy là nó không được thực hiện cho bộ nhớ thông thường, nhưng đến một đăng ký nối tiếp.

Vì vậy, mỗi lần ghi được ghi vào địa chỉ của thanh ghi (to), phần cứng được liên kết với thanh ghi sẽ thực hiện như gửi bit qua liên kết nối tiếp hoặc đẩy chúng vào hàng đợi để giải quyết.

Thông thường bạn thậm chí không thể đọc từ các địa chỉ đăng ký như thế này, vì vậy chúng không giống như bình thường memory và tốt nhất là giao diện cho một phần cứng cụ thể xảy ra tại địa chỉ bộ nhớ.

4

http://en.wikipedia.org/wiki/Memory-mapped_I/O#Example

Một số nền tảng có địa chỉ đặc biệt mà khi bạn đọc từ/viết thư cho nó, hệ thống sẽ thực hiện một số I/O. Ví dụ: to có thể là địa chỉ điều khiển loa khi được viết. Trong trường hợp đó, vòng lặp sẽ, ví dụ: có thể phát âm thanh, trong khi *to = from[count-1]; sẽ không cung cấp bất kỳ đầu ra hữu ích nào.

+0

Tôi bắt đầu hiểu điều này. Bạn có thể vui lòng giải thích thêm về điều này? – Nawaz

2

Con trỏ to ở đây là "đặc biệt". Trên một số phần cứng, bạn có thể truy cập các cổng IO bằng cách ghi vào các vùng bộ nhớ đặc biệt. Nếu bạn muốn gửi một mẫu bit trên một cổng IO, nơi mẫu đã có sẵn trong bộ nhớ, đây là thứ bạn muốn làm.

Mọi văn bản gửi to làm cho đầu ra từ cổng IO được thay đổi thường. Điều này là để lặp qua mẫu và ghi nó vào bộ nhớ "đặc biệt".

Cách bạn truy cập vào bộ nhớ "đặc biệt" như vậy là rất cụ thể và nền tảng. Đôi khi nó chỉ là một câu hỏi luôn luôn bằng văn bản đến một địa chỉ cố định - thông thường một số tiêu đề nền tảng cung cấp một #define hoặc tương tự sau đó để làm cho thông tin đó có sẵn cho bạn tại thời gian biên dịch. Đôi khi có một cuộc gọi hệ thống bạn cần phải thực hiện điều đó cho bạn biết địa chỉ mà một thiết bị cụ thể mà bạn quan tâm được ánh xạ tại.