т.е. динамически выделять память можно только после того, как проинициализировано железо, дающее доступ к тому диапазону адресов.
Ну, это логично.
Но гарантируется ли то, что компилер не выдаст код, который туда полезет сам ещё до полного запуска всех железяк? Вроде не должно такого быть, верно? Или остаётся лишь уповать на то, что никаких обращений к каким-то библиотекам, которые вдруг захотят динамически выделить память, а там Hardfault.
Т.е. эта инициализация должна быть на самом раннем этапе, когда только-только настроили тактовый генератор, но ещё даже не попали в main(), верно?