GDB и G ++: изменение случайных параметров на 0

Я пишу библиотеку, позволяющую новой Wi-Fi-системе на кристалле (процессор Cortex-M4) работать с API Arduino WiFi, однако я сталкиваюсь с очень странная ошибка при отладке с помощью GDB.

Часто параметры, передаваемые в функции, изменяются на 0 без причины. Например, во время тестирования моей библиотеки я звоню delay(1000)Однако мой набросок был запущен намного быстрее, чем я ожидал. Срыв казни по вызову задержки показал, что на самом деле, delay(0) был вызван …
выделена строка 63 - должна задержаться на 1000 мс
приостановлено выполнение с задержкой - параметр изменился с 1000 на 0 ?!
Это не так уж важно, но это имеет гораздо худшие последствия для строк. Например, передав строку в strlen() часто вызывает огромные проблемы. Указатель будет изменен на (char*) 0x0,
а потом strlen(0x0) возвращает несколько тысяч байт, потому что нулевой символ некоторое время не встречается.

Еще хуже, неявное this указатель часто меняется на 0x0 а также, изменяя значение всех переменных экземпляра
введите описание изображения здесь

Я перепробовал все, что мог придумать. Я перешел на другую доску разработки, перекомпилировал весь свой код и IDE, отключил всю оптимизацию (используя -O0). Я потерялся.

Почему параметры меняются на 0 без видимой причины?

редактировать Итак, похоже, что это определенно проблема переполнения стека (насколько это уместно), поэтому я думаю, что самым простым решением было бы увеличить мой локальный стек. Я компилирую с arm-none-eabi-g ++, так какой же аргумент командной строки я могу использовать, чтобы увеличить свой стек? В этом отношении, каков размер стека по умолчанию?

2

Решение

Задача ещё не решена.

Другие решения


По вопросам рекламы [email protected]