Делал на этой неделе прогу-обновлятор загрузчика для стм32... Она прикидывалась приложением с поддержкой накопителя внутри флеши с LFS. И на накопитель надо было вместить и обновлятор и сам бинарник загрузчика.
Так стоило сделать вызов удаления файла обновлятора чтобы он случайно кем-то (как-то) не применился - так сразу +20 кбайт! .. и уже ничего не лезет.
Хотя иногда ну никак компилятор не желает понять что не стоило бы включать в код лишнее.
Вот пример кейл51:
сейчас сделал так ради экономии пары тактов
PCA0CPL0 = *(1+(uint8_t*)&last);
PCA0CPH0 = *((uint8_t*)&last);
вот дизасм. тупое копирование из ячейки в SFR, короче не сделать
а вот "нормальный" код
PCA0CPL0 = last;
PCA0CPH0 = last >> 8;
нахера сначала загружается аккумулятор, а затем он переносится в SFR?!