В BSP-ATMEL-AT91SAM9260-EK при запуске startup ключ -f c аргументами анализируется вызовом
...
case 'f':
/* cpu frequency, clock cycles frequency, timer chip frequency */
get_freq(&cpu_freq);
get_freq(&cycles_freq);
get_freq(&timer_freq);
break;
но только далее переменные cpu_freq, cycles_freq, timer_freq никак не используются, т.о. ключ -f бездействет. ( исправляется в init_qtime_at91sam9xx.c )
Так же опечаткой выглядит разбор аргумента
...
switch(*end) {
case 'm': case 'M':
freq *= 1000;
/* fall through */
case 'k': case 'K':
freq *= 1000;
/* fall through */
где с суффиксом m(M) умножение вроде должно идти на 1000000. (common_options.c)
Но действительно изменение cycles_freq, timer_freq ускоряет/замедляет ход времени...
Странно что c BSP-ATMEL-AT91SAM9260-EK на фирменной плате отставание времени составляет примерно 2 секунды за минуту.
Как это можно объяснить (для ОС реального времени) ?
Еще хотелось бы понять: на что влияет установка значения cpu->speed=100 мГц в startup? Почему это значение в 2 раза отличается от задаваемого -c50000000 ( input clock rate ) при запуске драйвера последовательного порта devc-serusart? Стоит ли установить cpu->speed в 0, чтобы вызвать arm_cpuspeed() ?