Кто-нибудь сталкивался со странным поведением vsnprintf() на ESP32? У меня две задачи, запущены на ядре0 (arduino core запущен на core1). Иногда крэшится при вызове vsnprintf(). Причем, даже не важна сама строка - она может быть как с форматированием, так и просто hello world!. Происходит редко, обычно в самом начале исполнения скетча. Stack overrun. Я уже и стеки у задач увеличивал, и что только не делал.
Это фишка newlib на данной платформе такая, или что? Всякие log_e работают без вопросов.
В глобальный буфер vsnprintf отрабатывает без вопросов, а если буфер на стеке - то лотерея. Делал большой буфер на стеке, писал в него маленькие строчки - один хрен, stack overrun, canary exception.
Явные гонки какие-то происходят. Но, может, так оно и задумано, и vsnprintf на ESP32 не reentrant, и нужно все обкладывать мутексами.
Почитал вашу дискуссию на другом форуме. Вопрос, конечно, сложноват для хоббийного форума.
Я не совсем понял, зачем вам изобретать свой принтФ - разве пакет для есп32:штатно его не поддерживает?
Да ни в чей конкретно.
Сами посудите - самописный vsnprintf() да еще под мультизадачной средой - много ли вообще любителей хотя бы понимают, о чем речь?
Это специфика, до которой добираются единицы.
это как иллюстрация, что ТС ничего “особенного” не делает. Обычные локальные переменные.
Он пишет, что если buf выделять динамически - проблема исчезает (что, в общем, тоже понятно).
Непонятно, почему эти два вызова наезжают друг на друга
@Komandir не заводись, дело не в ТС, просто вопрос интересный