Совместная работа ИК приёмника и засветка LED в цикле

В этом случае прерывание вызывается “типа рекурсивно” 34 раза. Прерывания от IR идут с периодом ~ (1 - 2.5 мс). Расход памяти на стеке будет очень большим. Вывод - в рабочей программе так делать не стоит.

Здесь Вас не понял. Если не трудно, подробнее объясните пжлст.

Пакет IR состоит примерно из 34 импульсов
Импульсы идут с периодом примерно ~ 1 - 2.5 мс (кроме одного стартового)
Поэтому во время delay(4) точно придет следующий импульс, вызовет новое прерывание до выхода из текущего. И так примерно 34 раза. Каждый вызов прерывания сохраняет на стеке регистры. Причем в этом случае - наверное все регистры. Получаем 34 раза по 32 регистра = 1 кБайт.

1 лайк

Да, Вы правы, сохраняются все регистры. Иначе данные были бы утеряны. Костыль есть костыль. Памяти вроде хватает, раз работает.

Не зря я и написал(хотя полностью не осознавая), что это только для сериала, для отладки. Поэтому надо не

А нужно потом убрать.

Спасибо за разъяснение.

1 лайк

Единственно здесь , возможно , меньше будет. Т.к. буфер (и другие переменные в tick() )объявлен глобально uint32_t, и в него по очереди задвигаются биты…

1 лайк