blog.garaż.net

16 marzec 2014

Mikrokontolery - pierwsze poważne starcie cz. 2

Jakiś czas temu pisałem o małym projekcie wykorzystującym mikrokontrolery. Przez ten weekend postanowiłem posiedzieć trochę i zgodnie z postanowieniami nieco przepisać całość aby pozbyć się kilku potencjalnych problemów - lepiej założyć, że warunki laboratoryjne są sprzyjające. ;)

Część czasu spędziłem oczywiście nad optymalizacją i analizą wygenerowanego kodu. I to prawda, że kompilator potrafi zrobić naprawdę sporo świetnej roboty, ale trzeba mu w tym czasami pomóc…

Przykładowa funkcja:

void checkAndSendPing ()
{
    if (activeChannals)
    {
        ticksToSendPingLow = 0;
        ticksToSendPingHigh = 0;
    }
    else if ( ! ++ticksToSendPingLow && ++ticksToSendPingHigh >= 22)
    {
        ticksToSendPingLow = 0;
        ticksToSendPingHigh = 0;
        addByteToQueue(0xff);
    }
}

Przy odrobinie chęci można byłoby to zapisać tak:

void checkAndSendPing ()
{
    if (activeChannals)
        goto CHECK_AND_SEND_PING_RESET;
    else if ...