Я пытаюсь диагностировать проблему. Проблема в том, что моя программа отлично работает, если я помещаю printf (в частности printf) в начало программы, и это не так, если я этого не делаю. Эта проблема очень специфична для цикла, который считывает переменную systick, которую я увеличиваю в systick_handler.ARM, .COMMON раздел и -fno-общий флаг
Если я, однако, компилирую с -fno-common, тогда все работает. Почему это поведение?
Кроме того, я удалил разделы .COMMON из моего сценария компоновщика, потому что они делают программу почти вдвое большей. Все так хорошо работает без них, но я подозреваю, что их отсутствие каким-то образом вызывало бесконечный цикл, когда я компилировался со стандартным (-fcommon) флагом. Тем не менее я не вижу ссылки на раздел .COMMON в моих файлах. Это должно быть просто из libc.
Может ли кто-нибудь объяснить, что происходит?
http://sscce.org/ – auselen
Я не могу представить один, потому что я не совсем уверен, что проблема заключается в первое место. Я думаю, что это где-то внутри libc, потому что я вообще не использую разделы .common. Я решил его, скомпилировав с -fno-common только потому, что я вообще исключил разделы .common. Но я не уверен, что это может привести к некоторым неизвестным проблемам в будущем или если -fno-common решило проблему навсегда. К сожалению, у меня нет доступа к интерфейсу аппаратной отладки на платформе, где проблема возникает. – Martin
Создайте файл карты и посмотрите, что находится в '.COMMON'. –