Tema: Re: AVR GCC, kaip daryti geriau ir teisingiau
Autorius: kef
Data: 2017-02-21 15:29:29
Jei greicio truksta ir yra atminties lentelei - lentele, jei ne - dalini 
antra varianta i 2 ar 4 dalis, kad nereiktu visi if'u pereit. Tuo patrumpini 
leciausia varianta atitinkamai beveik 2 ar 4 kartus. pvz

unsigned char v_vu(unsigned int a)
{
if(a > 390)
{
    if(a>1020) return 25; //OVER
    if(a>980) return 24; // +6
    if(a>778) return 23; // +4
    if(a>655) return 22; // +2.5
    if(a>618) return 21; // +2
    if(a>581) return 20; // +1.5
    if(a>551) return 19; // +1
    if(a>520) return 18; // +0.5
    if(a>491) return 17; // 0
    if(a>453) return 16; // -0.7
    if(a>413) return 15; // -1.5
    if(a>390) return 14; // -2
}
else
{
    if(a>368) return 13; // -2.5
    if(a>309) return 12; // -4
    if(a>292) return 11; // -4.5
    if(a>276) return 10; // -5
    if(a>246) return 9; // -6
    if(a>195) return 8; // -8
    if(a>174) return 7; // -9
    if(a>123) return 6; // -12
    if(a>109) return 5; // -13
    if(a>87) return 4;  // -15
    if(a>73) return 3;  // -16.5
    if(a>61) return 2;  // -18
    if(a>49) return 1;  // -20
}

return 0;
}



"Levas" <kazkur@pasbobute.com> wrote in message 
news:o8fkif$q12$1@trimpas.omnitel.net...
> nuskaityta ADC reiksme turi buti perskaiciuojama i diskrecius elementus. 
> (jei idomu, formule y=10^(x/20) )
> Taciau visur reiksmiu nereikia, reikia tik 25 specifiniu reiksmiu. Kaip 
> toki veiksma darytu protingieji? Kad veiktu greitai, teisingai ir nedaug 
> baitu. Mano du variantai skiriasi tik 10 baitu ilgiu. Aisku greiciu turetu 
> skirtis stipriai:
>
> /*
> unsigned char v_vu(unsigned int a)
> {
> unsigned char i=0;
> if(a>49) i++;  // -20
> if(a>61) i++;  // -18
> if(a>73) i++;  // -16.5
> if(a>87) i++;  // -15
> if(a>109) i++; // -13
> if(a>123) i++; // -12
> if(a>174) i++; // -9
> if(a>195) i++; // -8
> if(a>246) i++; // -6
> if(a>276) i++; // -5
> if(a>292) i++; // -4.5
> if(a>309) i++; // -4
> if(a>368) i++; // -2.5
> if(a>390) i++; // -2
> if(a>413) i++; // -1.5
> if(a>453) i++; // -0.7
> if(a>491) i++; // 0
> if(a>520) i++; // +0.5
> if(a>551) i++; // +1
> if(a>581) i++; // +1.5
> if(a>618) i++; // +2
> if(a>655) i++; // +2.5
> if(a>778) i++; // +4
> if(a>980) i++; // +6
> if(a>1020) i++; //OVER
> return i;
> }
> */
> unsigned char v_vu(unsigned int a)
> {
> if(a>1020) return 25; //OVER
> if(a>980) return 24; // +6
> if(a>778) return 23; // +4
> if(a>655) return 22; // +2.5
> if(a>618) return 21; // +2
> if(a>581) return 20; // +1.5
> if(a>551) return 19; // +1
> if(a>520) return 18; // +0.5
> if(a>491) return 17; // 0
> if(a>453) return 16; // -0.7
> if(a>413) return 15; // -1.5
> if(a>390) return 14; // -2
> if(a>368) return 13; // -2.5
> if(a>309) return 12; // -4
> if(a>292) return 11; // -4.5
> if(a>276) return 10; // -5
> if(a>246) return 9; // -6
> if(a>195) return 8; // -8
> if(a>174) return 7; // -9
> if(a>123) return 6; // -12
> if(a>109) return 5; // -13
> if(a>87) return 4;  // -15
> if(a>73) return 3;  // -16.5
> if(a>61) return 2;  // -18
> if(a>49) return 1;  // -20
>
> return 0;
> }
>
>
>
> -- 
> Bye, Levas
>
> --
> http://www.vabolis.lt