Непонятный баг в виде выпадения в HardFault из sprintf при выводе форматированного float, причём в некоторых случаях. Юзал эту версию ИАРа вместе со sprintf для LPC1768 и ни на какие грабли не попадал. Стек проверял, его достаточно, оптимизация никак не влияет. Простенький кастрированный проект прилагаю для LPC1114 (без кварца) можно потестить. Прочитал все исправленные баги в версии 6.30 и не нашёл ничего об исправленном sprintf. Хотя тот же код в 6.30 не зависает, но проверил наспех. Поэтому самому интересно в чём косяк и исправлен ли он в новых версиях ИАРа.
Код
sprintf((char *)&buf, "started\15\12");
sendBuf(&buf[0]);
for (uInt i=0; i<sizeof(buf); ++i) buf[i] = 0xeb;
float freq = 82.6046981;
sprint_flag = 10;
sprintf((char *)&buf, "freq1=%1.5f\15\12", freq); // <------- тут происходит падение на HardFault
sprint_flag = 0;
sendBuf(&buf[0]);
sprintf((char *)&buf, "ended\15\12");
sendBuf(&buf[0]);
Регистры на картинке взяты из режима исключения HardFault, на котором стоит бесконечный цикл.
Эскизы прикрепленных изображений