Я работаю над встроенным проектом, где мне нужно записать значение тайм-аута в два байтовых регистра некоторых микрочипов.Разделить целое число на два байта
Тайм-аут определяется как:
timeout = REG_a * (REG_b +1)
Я хочу запрограммировать эти регистры с помощью целого числа в диапазоне от 256 до 60000. позволяет сказать, что я ищу, для которого алгоритма, учитывая timeout- значение, вычисляет REG_a и REG_b.
Если точное решение невозможно, я хотел бы получить следующее возможное большее значение тайм-аута.
Что я сделал до сих пор:
Мое текущее решение вычисляет:
temp = integer_square_root (timeout) +1;
REG_a = temp;
REG_b = temp-1;
Это приводит к значениям, которые хорошо работают на практике. Однако я бы хотел, чтобы вы могли придумать более оптимальное решение.
О, и я ограничена памятью, поэтому большие таблицы не могут быть и речи. Также важно время работы, поэтому я не могу просто переустановить решение.
Вы хотите минимизировать разницу между 'timeout' и вычисленным значением? Это цель этого упражнения? В противном случае то, что у вас есть, кажется прекрасным. –
Одним из вариантов оптимального является минимизация одного регистра и максимизация другого. Возможны проблемы с этим интерфейсом регистра, где вы не хотели бы менять оба регистра внезапно. Поскольку вы не можете одновременно записывать две записи, могут возникнуть проблемы, если регистры записаны **, когда ** работает таймер. Минимизируя один регистр, вы можете оставить его одинаковым при переходе на меньший тайм-аут, поскольку минимум дает лучшую временную детализацию. –