Хотелось бы не повторять своих ошибок в дальнейшем.
Как исправить, чтобы не был «говнокод»? Может, есть ссылки в загашнике, что почитать?
Говнокод везде — и в asm и в C?
В моем конкретном коде — дa, добавить пару строк, ввести дополнительно две переменные, изменить строку с заданием маски выходов. Про применение массивов я упомянул, при большем числе каналов — есть смысл, и будет меньше манипуляций при добавлении каналов.
Перекомпилировать и перезалить прошивку. (а без этого никак, в любом случае).
Согласен.
Но если мы говорим о AVR, а тем более о Tiny, то тут, по большому счёту, даже использование высокоуровнего C — перебор. Для примера, если скомпилировать приведенный код, то C-прошивка займет 266 байт, а ассемблерная только 118. А на борту всего лишь 1 килобайт флеша.
Ну не знаю, как на счет проще. Мне кажется сомнительной такая выгода.
Похоже, вы не совсем поняли что происходит в программе.
Обработка и так вся в прерывании. Можно смело идти в спячку. Бесконечный цикл лишь для демонстрации работы, в нём постепенно увеличивается коэффициет заполнения ШИМ по всем каналам. Если подключить к выходам светодиоды, то их яркость будет плавно увеличиваться, и гаснуть достигнув максимума. Начальные значения яркости даны со сдвигом, по-этому светодиоды будут разгораться и гаснуть по очереди.
2) Самое правильное — буферизовать значение длительности ШИМ. То есть на каждый канал использовать две переменные: первую юзер меняет, когда ему вздумается, вторая используется в обработчике прерывания, и ей значение присваивается один раз в начале каждого периода.
но ведь именно так и сделано. при if (++counter==0) присваюваются значения буферным переменным.
Как исправить, чтобы не был «говнокод»? Может, есть ссылки в загашнике, что почитать?
Говнокод везде — и в asm и в C?
Перекомпилировать и перезалить прошивку. (а без этого никак, в любом случае).
Согласен.
Но если мы говорим о AVR, а тем более о Tiny, то тут, по большому счёту, даже использование высокоуровнего C — перебор. Для примера, если скомпилировать приведенный код, то C-прошивка займет 266 байт, а ассемблерная только 118. А на борту всего лишь 1 килобайт флеша.
Похоже, вы не совсем поняли что происходит в программе.
Обработка и так вся в прерывании. Можно смело идти в спячку. Бесконечный цикл лишь для демонстрации работы, в нём постепенно увеличивается коэффициет заполнения ШИМ по всем каналам. Если подключить к выходам светодиоды, то их яркость будет плавно увеличиваться, и гаснуть достигнув максимума. Начальные значения яркости даны со сдвигом, по-этому светодиоды будут разгораться и гаснуть по очереди.
oolite, если что.
но ведь именно так и сделано. при
if (++counter==0)
присваюваются значения буферным переменным.