atollic - newlib - повреждение стека

Я использую newlib (стандартный, а не newlib nano), который входит в atollic 8.1.

в настоящее время все виды версий XXXprintf повреждают мой стек, и я не могу понять, почему.

Я добавил 3 изображения, чтобы отобразить проблему:

вариант использования 1

на изображении 3.png вы видите либо vsprintf (rt_vsnprintf - это просто макрос, отправляющий его), который записывает max. 1024 на "sBuf.printf_buffer" длиной 1024 байта и расположенный по адресу 0x20001c08 (до 0x20002008).

при этом функции newlib printf перезаписывают как минимум 1 мою переменную, расположенную по адресу 0x20006014, так что это не просто небольшое переполнение, это совсем не работает ....

Я тестировал sprintf, snprintf, vsnprintf, vsprintf. все эти функции записываются в мою переменную.

Есть у кого-нибудь представление о том, как такое поведение могло произойти?

введите здесь описание ссылки

введите здесь описание ссылки

введите здесь описание ссылки

введите здесь описание ссылки


person ambedded    schedule 13.08.2018    source источник


Ответы (1)


Функции printf требуют довольно много места в стеке. Насколько велика ваша стопка и где она находится? Это близко к вашей канареечной переменной по адресу 0x20006014? Не могли бы вы попробовать увеличить стек на 2 КБ и посмотреть, есть ли разница?

person Pinetwig    schedule 21.08.2018