Robi się coraz ciekawiej, Bascom wypada lepiej niż WinAVR
Pawle aby było sprawiedliwie dla wszystkich kompilatorów f_vfo i f_clk należy zadeklarować nie jako stałe a jako zmienne ( kod Bascom ). W normalnym programie najczęściej są one zmieniane dynamicznie w trakcie programu. Przy stałych odpadają funkcje konwersji formatów.
Tradycyjnie poproszę o pliki wynikowe wygenerowane z Bascom aby popatrzeć dlaczego wypada tak dobrze.
Zmieniłem lekko kod zadania testowego aby wyeliminować obliczenia wykonywane przez kompilator w czasie kompilacji.
Wyniki dla kompilatora WinAVR nadal są bardzo złe, może należy coś poustawiać w optymalizacji kodu ???
Nie mam pojęcia dlaczego najpopularniejszy kompilator dla procków AVR wypada najsłabiej w tych testach.
Kod:
////////////////////////////////////////////////////////////////////////
// Test_1 - obliczanie nastawy dla AD9951
////////////////////////////////////////////////////////////////////////
unsigned long int f_clk=400000000;
unsigned long int FTW;
void Oblicz_FTW (unsigned long int f_vfo)
{
FTW= (unsigned long int) ( (float) 0x100000000 * f_vfo/f_clk );
}
void main(void)
{
Oblicz_FTW(20000000); //oblicz FTW dla f_vfo=20MHz
}
WinAVR: kod: 3920 bajt, RAM: 272, cykle: 7532
CodeVision: kod: 802 bajt, RAM: 8, cykle 1372