Цитата(Aaron @ Mar 1 2016, 10:04)

посмотрите ld-файлы для STM32F407 и для STM32L151 - может, у вас ссылки на heap в скриптах по-разному заданы? может, для 151 размер кучи = 0?
Совпадают слово в слово. Разве что в 407 еще ram1 есть.
Все-таки посмотрел ассемблер и память, и стало более понятно.
Нашел в startup файле 151го такую особенность:
Код
void Default_Reset_Handler(void)
{
/* Initialize data and bss */
// unsigned long *pulSrc, *pulDest;
/* Copy the data segment initializers from flash to SRAM */
// pulSrc = &_sidata;
//
// for(pulDest = &_sdata; pulDest < &_edata; )
// {
// *(pulDest++) = *(pulSrc++);
// }
//
// /* Zero fill the bss segment. */
// for(pulDest = &_sbss; pulDest < &_ebss; )
// {
// *(pulDest++) = 0;
// }
/* Setup the microcontroller system. */
SystemInit();
/* Call the application's entry point.*/
main();
}
Из-за этого в начале SRAM находился какой-то мусор и в процессе работы функции malloc в один момент происходило деление на 0.
Раскомментировал этот кусок. Мусор стал более системотизированным, но остался мусором (в сравнении с 407). Куда дальше копать?
И еще заметил особенность. Во всех других ARMах и не только, при инициализации структуры таким вот образом:
Код
static type struct_name = {};
все поля структуры инициализируются нулями. А тут почему-то в них тоже какой-то мусор находится.