Здравствуйте, уважаемые коллеги!
Вопрос, может быть, достаточно тривиальный. Есть память EEPROM, размер страницы в ней - 16 байт (см. рисунок). Можно начать запись с любого байта, но за один сеанс записи нельзя вылезти в соседнюю страницу. В связи с этим требуется определить количество страниц памяти, которые подлежат записи. При этом известен номер ячейки, с которой начинается запись, и общее количество записываемых байт. Следует учесть и ту ситуацию, что одно и то же количество информации может занимать разное количество страниц в зависимости от начального адреса (см. рисунок).
Итак, коллеги, можете ли вы предложить маленькую красивую формулу, по которой можно вычислить количество страниц? Мне бы не хотелось использовать циклические алгоритмы. Язык - Си.
Не буду выкладывать свои наработки, скажу только, что моё решение не учитывает последней обозначенной проблемы, результат получается как в нижней части рисунка.
Ответ
static inline n_pages (unsigned int addr, unsigned int len) {
return len ? ((addr + len - 1) >> 4) - (addr >> 4) + 1 : 0;
}
вроде так?
(первое выражение -- номер страницы с адресом последнего байта данных (addr + len - 1 это адрес последнего байта) , второе -- номер страницы с началом данных, соответственно их разница + 1 -- это количество страниц)
Комментариев нет:
Отправить комментарий