Народ пытается разобраться в прошивке, что меня очень радует.
Народ хочет разобраться, но возникают затруднения.
Не хочу, чтобы руки опустились у отважившихся, поэтому постараюсь описать основные функции прошивки.
Ребята, вам не надо изучать каждую функцию под микроскопом, нужно знаать, что делает та или иная функция, какие параметры ей надо переджать и какие параметры она возвращает.
Давайте кратко об общем принципе работы прошивки.
У нас есть прерывания, есть главный цикл, который крутиться бесконечно.
Основную работу делают прерывания - они фиксируют те или иные события, такие как - прием пакета по ИК каналу (или ошибка приема), нажатие кнопок, прием символов по UART? и ... да и все, в общем то.
Как только наступает событие, прерывания информируют об этом главный цикл через глобальные переменные.
Основные события системы:
События клавиатуры (курка), за них отвечает глобальная переменная
keyboard_eventможет принимать всего два значения - было нажатие на курок, или не было нажатия
no_key_pressing,
key_pressing,Как только мы нажали на курок и удержали нажатым несколко миллисекунд (защита от дребезка) - сразу прерывание присваивает переменной
keyboard_event = key_pressingГлавный цикл, поочерёдно опрашивая все переменные-события обнаруживает, что было нажатие на курок и вызывает соответствующие функции, такие как отправка пакета по ИК
send_ir_package();и воспроизведение звука выстрела - но об этом позже расскажу, так акак звук выстрела воспроизводится не так, как остальные звуки.
Разумеется, перед этим проверит - а есть ли патроны в магазине.
После того, как мы обработали событие, мы должны сделать так
keyboard_event=no_key_pressing; Надеюсь, понятно, зачем?
Иначе каждый раз, проверяя эту переменную главный цикл будет вызывать вышенвзыванные функции, то есть таг будет палить, пока патроны не закончатся, не зависимо от того - жмете Вы курок или нет.