Tôi đang làm việc trên một dự án nhúng, trong đó tôi phải ghi một giá trị hết thời gian vào hai thanh ghi byte của một số vi chip.Phân tách số nguyên thành hai byte
Các time-out được định nghĩa là:
timeout = REG_a * (REG_b +1)
Tôi muốn chương trình này đăng ký sử dụng một số nguyên trong khoảng từ 256 đến phép nói 60000. Tôi đang tìm kiếm một thuật toán mà, cho một timeout- giá trị, tính REG_a và REG_b.
Nếu một giải pháp chính xác là không thể, tôi muốn nhận được giá trị thời gian chờ lớn hơn có thể tiếp theo.
Tôi đã làm gì cho đến nay:
giải pháp hiện tại của tôi tính toán:
temp = integer_square_root (timeout) +1;
REG_a = temp;
REG_b = temp-1;
Điều này dẫn đến giá trị mà làm việc tốt trong thực tế. Tuy nhiên tôi muốn xem các bạn có thể đưa ra một giải pháp tối ưu hơn không.
Ồ, và tôi bị hạn chế về bộ nhớ, vì vậy các bảng lớn không được đề cập đến. Ngoài ra thời gian chạy là quan trọng, vì vậy tôi không thể chỉ đơn giản là brute-lực lượng giải pháp.
Bạn có muốn giảm thiểu chênh lệch giữa 'timeout' và giá trị được tính không? Đó có phải là mục đích của bài tập này không? Nếu không những gì bạn có vẻ tốt. –
Một phiên bản tối ưu là giảm thiểu một đăng ký và tối đa hóa một đăng ký khác. Có thể có vấn đề với giao diện đăng ký này, nơi bạn không muốn thay đổi cả hai thanh ghi đột ngột. Vì bạn không thể làm cả hai bộ nhớ ghi cùng một lúc, có thể có vấn đề nếu sổ đăng ký được viết ** trong khi ** bộ hẹn giờ đang chạy. Bằng cách giảm thiểu một đăng ký, bạn có thể để nó giống nhau khi đi đến một thời gian chờ nhỏ hơn vì mức tối thiểu cho độ chi tiết thời gian tốt hơn. –