Psych писал(а):Массив указателей очень много места сэкономит, а свитч это куча cmp и jmp
Но ведь к массиву указателей будут еще функции, у которых До и После полезного кода всякая лабуда с сохраненнием/извлечением из стека используемых в ней регистров. В свиче же место занимают rjmp'ы и т. п. Так что вопрос достаточно спорный. Но ради интереса попробую - и сравню что окажется меньше.
Psych писал(а):а вот какая то хня в определенный сегмент не помещается
Это врят ли - оперативы и ЭСППЗУ у Тини2313 по 128 байт. Там же написано:
38 bytes of DATA memory (+ 20 bytes shared)
31 bytes of XDATA memory
Т. е. меньше половины. Кроме того, из самого "жестокого" в ЭСППЗУ - это мой массив на 23 кнопки. В оперативе только переменные и стек, ничего сверхъестественного.
Всбрык линкера происходил после добавления одного if, в котором только вызов функции. Тот же вызов, но до помещения перед ним if еще помещался указанными результатами, но когда я открывал HEX в проге-программаторе, было видно ,что до конца флеши проца оставалось чуть ли не пару строчек.
Но ведь 1 374 байт - это не 2 свободный строчки из 2048 байт. Вот что удивило. Каким образом линкер мог ТАК раздуть код?
Вообще как-то странно у этого IARa отображается состояние памяти. CVAVR прямо писал сколько процентов уже занято. Может и тут можно где-то такую опцию включить?