Подобные названию топика запросы не нагугливают конкретики. Кто в проблему погружен ?
Я на неделе обнаружил, что процессор из SoC на плате Альтеры стартует на очень слабой частоте. Функция:
Код
void my_chk() {
volatile int i = 0;
for (; i < 800*1000*1000; i++);
}
из 8-6 тактов цикла (в зависимости от оптимизации) работает порядка 4 минут в Baremetal режиме, а если её вызвать из Линукс-приложения (бывает на той же плате такая бяка) -- то 7 секунд.
Частота ARM-а позиционируется до 925 МГц, Линукс-результат очень подходит к этому числу.
А то, что у меня получается в без-ОС-ом случае -- на 25 МГц, которые подаются на процессор, судя по документации Альтеры, в которой больше нарыть ничего не удалось.
И ARM-овая избыточно подробна и необозрима, неудобна, ужасно пугающа, как много раз мне нагуглилось...
В ARM-ядре есть какие-то механизмы, PLL, регистры, чтобы установить множитель ко входу тактовой частоты ?
По идее, чтобы отсчитать 1 мс в любой ОС, нужно точно знать, на какой частоте ты работаешь, и запитать от неё таймер, а не надеяться на что-то внешнее.
Тогда 25 МГц и умножитель будут лучшим решением.
Но вдруг именно эту частоту 25 снаружи нужно подымать до 925 ? И Альтера должна дать описание, а их 10%, как я вижу ? Хотя и разбавленные...
Кто на ARM-ах собаку съел, как у них дело обстоит ?
И, пожалуйста, киньте конкретных ссылок для более-менее пристойного изучения этой архитектуры "сверху вниз" без ДТП, а в последнем случае уж и TRM из pdf сгодятся