ARV писал(а):кстати, рассказывая о технологии получения минимального кода вы помогаете конкурентам, не выигрывая гонку сами
Как говорил Макс Отто фон Ширлиц - "Тот кто не знает Германию - поехал бы там. А я знаю Германию".
Так вот, я могу сказать, что я достаточно хорошо знаю старые АВРки.
Программная генерация меандра возможна. Но нужно сильно-сильно считать такты. Что на Си не всегда получается с наскоку.
1. поднять пин
2. задержка1
3. положить пин
4. задержка 2
5. перейти к 1.
вот эти пункты 1,3 и 5 тоже имеют время выполнения, которое нужно учесть в пунктах 2 и/или 4.
Тут надо играться.
Но МК - это ЦПУ+периферия. Поэтому проще и правильней использовать таймер.
Код простой.
Нужно проинициализировать 5 портов - DDR, TCCR0A/B,OCR0A/B.
Потом пустой цикл.
По идее 4 из них - это комбинация LDI и OUT, один SBI и один RJMP.
Минимальная прога на АСМе должна составлять 10 команд. 20 байт.
И в результате соревнование сводится к тому, кто лучше знает ключи компилятора/линковщика, что бы выбросить из программы все лишние ненужные телодвижения.
Эмулировать в протезе не хочу. Просто облом.
Чисто ради спорт интереса накидал. Оптимизация -О1
При оптимизации -Os - те же 60 байт.
Вот теперь задача сводится к тому, что б компилятор забыл все, чему его учили в школе и скомпили код с адреса 0х0000 без всяких инициализаций.
Добавлено after 3 minutes 3 seconds:
Упс. вдогонку.
DDRB = _BV(PORTB1); тоже компилируется в LDI + OUT
А вот DDRB |= _BV(PORTB1); компилится в SBI.
Итого - 58 байт.
Кто меньше сделает и покажет в протезе - тот и выиграет )
А я в конкурсе НЕ УЧАСТВУЮ.