Я пишу библиотеку, позволяющую новой Wi-Fi-системе на кристалле (процессор Cortex-M4) работать с API Arduino WiFi, однако я сталкиваюсь с очень странная ошибка при отладке с помощью GDB.
Часто параметры, передаваемые в функции, изменяются на 0 без причины. Например, во время тестирования моей библиотеки я звоню delay(1000)
Однако мой набросок был запущен намного быстрее, чем я ожидал. Срыв казни по вызову задержки показал, что на самом деле, delay(0)
был вызван …
Это не так уж важно, но это имеет гораздо худшие последствия для строк. Например, передав строку в strlen()
часто вызывает огромные проблемы. Указатель будет изменен на (char*) 0x0
,
а потом strlen(0x0)
возвращает несколько тысяч байт, потому что нулевой символ некоторое время не встречается.
Еще хуже, неявное this
указатель часто меняется на 0x0
а также, изменяя значение всех переменных экземпляра
Я перепробовал все, что мог придумать. Я перешел на другую доску разработки, перекомпилировал весь свой код и IDE, отключил всю оптимизацию (используя -O0
). Я потерялся.
Почему параметры меняются на 0 без видимой причины?
редактировать Итак, похоже, что это определенно проблема переполнения стека (насколько это уместно), поэтому я думаю, что самым простым решением было бы увеличить мой локальный стек. Я компилирую с arm-none-eabi-g ++, так какой же аргумент командной строки я могу использовать, чтобы увеличить свой стек? В этом отношении, каков размер стека по умолчанию?
Задача ещё не решена.