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 ...

10 luty 2014

Mikrokontolery - pierwsze poważne starcie

Mając do dyspozycji porządny procesor człowiek nie zdaje sobie sprawy ile można zrobić w ciągu sekundy mając prosty mikrokontroler taktowany zegarem 1MHz.

Właśnie skończyłem pierwszą, działającą wersję pary programów do nadawania i odbierania danych wykorzystując podczerwień. Nadajnik banalny, nadaje stałą, zakodowaną wiadomość o rozmiarze 2 bajtów z kilku bajtową przerwą około 100 razy na sekundę. Odbiornik trochę mniej banalny bo oprócz odebrania tego musi sobie poradzić, z wychwytywaniem błędów, dekodowaniem, obsługą kilku kanałów na raz (doszedłem do wniosku, że szkoda marnować kilka układów do obsługi wielu detektorów, skoro jeden ma całkiem sporo wejść i jak mi się wydawało całkiem sporo ...