В этом случае прерывание вызывается “типа рекурсивно” 34 раза. Прерывания от IR идут с периодом ~ (1 - 2.5 мс). Расход памяти на стеке будет очень большим. Вывод - в рабочей программе так делать не стоит.
Здесь Вас не понял. Если не трудно, подробнее объясните пжлст.
Пакет IR состоит примерно из 34 импульсов
Импульсы идут с периодом примерно ~ 1 - 2.5 мс (кроме одного стартового)
Поэтому во время delay(4) точно придет следующий импульс, вызовет новое прерывание до выхода из текущего. И так примерно 34 раза. Каждый вызов прерывания сохраняет на стеке регистры. Причем в этом случае - наверное все регистры. Получаем 34 раза по 32 регистра = 1 кБайт.
Да, Вы правы, сохраняются все регистры. Иначе данные были бы утеряны. Костыль есть костыль. Памяти вроде хватает, раз работает.
Не зря я и написал(хотя полностью не осознавая), что это только для сериала, для отладки. Поэтому надо не
А нужно потом убрать.
Спасибо за разъяснение.
Единственно здесь , возможно , меньше будет. Т.к. буфер (и другие переменные в tick() )объявлен глобально uint32_t, и в него по очереди задвигаются биты…