February 14th, 2014

Требуется грузчик

DSC_9402_s

На младших STM32F100 начало смущать то, что malloc так много весит - около 4 кило кода и почти 0.5 кило RAM. Был уже в полушаге от того, чтобы глобально перегрузить оператор new. Начал присматриваться к самодельным легким аллокаторам памяти, например, в исходниках FreeRTOS их нашлось три разных. На Электроникс нашел ссылку на еще один. Но мне-то вообще примитив нужен, все созданные объекты живут в памяти до конца жизни устройства, delete (и, соответственно, free) нигде не используется. Взялся было сам писать, но что-то дернуло заглянуть в документацию по компилятору от IAR. Оказывается, достаточно добавить опцию линкера --basic_heap, как всё становится так, как мне надо. На этом месте можно меня упрекнуть в том, что не прочел документацию. Да, не прочел. Потому что прочитать столько всего просто невозможно. Будешь все знать, но дело делать будет некогда. Вот так и балансируешь на грани минимальных знаний, отдавая время работе, а не обучению. Получается, что хорошие вещи - это совсем не те, которые хорошо документированы. Тонны документации нужно рассматривать как некий патч ущербности конструкции. Время - вот камень преткновения.

По случаю пятницы история на тему памяти, идею которой предложил коллега-эмбеддер Vladimir:

"Программист, находясь в нетрезвом состоянии, не справился с управлением памятью, в результате чего был совершен наезд heap-a на stack. К счастью, heap остановился всего в двух байтах от последнего сохраненного адреса возврата. Ни одна локальная переменная не пострадала. В настоящее время идет разбирательство, а программист находится под домашним арестом".