bash.im ithappens.me zadolba.li
2310

Иллюзия выбора

Учусь в универе и понемногу начинаю заниматься программированием микроконтроллеров. Дома лежит спаянная плата с программатором, на которых я и тренируюсь писать простенькие програмки на Си.

Как-то вечером я решил посмотреть, как в микроконтроллере реализуется рандом. Написал всё, как если бы это был обычный Си, и не особо удивился, когда компилятор стал ругаться. Полез в инет курить мануалы, всё нашел и сделал вроде бы правильно. По задумке в цикле загораются три светодиода, а при нажатии на кнопку один из них, выбранный случайно, должен гаснуть. Скомпилировал, прошил, жму на кнопку — каждый раз гаснет один и тот же светодиод.

Начинаю внимательно изучать код рандома. Всё вроде бы правильно: рандом присваивает иксу значение от нуля до двух, а затем идут три варианта развития событий. Отправляюсь дальше искать информацию — везде написано примерно одно и то же, но в результате проверки всегда гаснет светодиод, который соответствует х = 0. Полчаса поисков ничего не дают. Я уже почти решил оставить это дело на завтра и идти спать, но увидел следующие строчки у себя в коде:

if (x == 0) cbi(PORTB, 1);
if (x == 1) cbi(PORTB, 1);
if (x == 2) cbi(PORTB, 1);

Я ломал голову, что не так в рандоме, а он, оказывается, честно выполнял свою работу. С тех пор я стараюсь не использовать копипейст, а прописывать подобные вещи вручную.