Комментарии 4
45% времени загрузки тратилось на malloc/free
Стандарты безопасности вообще разрешают динамическое выделение памяти в промышленных контроллерах? А то как-то страшно, вдруг станок будет полсекунды раздумывать, прежде чем обнаружить попадание тушки оператора в границы опасной зоны.
Как-то мутно и фрагментарно написано. Как будто про железо , но о железе очень слабые представления у автора. С кэшем он больше знаний показывал.
Начнем с того что сначала надо ждать пока разгонится PLL, и ждать надо с запасом.
Потом надо ждать запуска часового кварца, потом надо калибровать тактирование DDR.
Потом надо ждать пока очухаются периферийные модули, раз уж он собрался всю периферию инициализировать в загрузчике. Одна только SD карта может 500 мс не выходить на рабочий режим.
Ну а так в учетом возможностей Claude я бы сам UBoot отправил в утиль с его деревьями, динамической памятью и HAL-ами. Claude не нуждается в абстракциях и не дрожит за переносимость. Может написать большинство драйверов с нуля с полностью статическим выделением памяти.
У автора очень однобокое представление: у варианта с динамической памятью перечислены только недостатки, у статического - только преимущества.
Та же захардкоженная конфигурация неизвестно как себя поведет при переносе прошивки на другое железо.
С учетом жестких требований по времени загрузки, можно с большой долей вероятности предположить, что вся периферия котроллера фиксированная и значит избавление от любой динамики (не только конфигурации) во время выполнения - первый кандидат на оптимизацию.
Пример же как справляются с разными устройствами с одной стороны и с вкомпиленой конфигурацией сдругой - это тот же Marlin в качестве прошивки 3d-принтеров, там куча #define. А у автора вряд ли большой зоопарк устройств с такими требованиями.

Структуры данных на практике. Глава 17: Структуры данных загрузчиков