Форум РадиоКот https://radiokot.ru/forum/ |
|
stm32f0 - абсолютно непонятное поведение и зависание... https://radiokot.ru/forum/viewtopic.php?f=59&t=197517 |
Страница 1 из 1 |
Автор: | viiv [ Ср апр 09, 2025 15:57:05 ] |
Заголовок сообщения: | Re: stm32f0 - абсолютно непонятное поведение и зависание... |
Стек (переполнен)? Роспись памяти (запись по неинициализированному/"неправильному" указателю)? |
Автор: | d2r [ Ср апр 09, 2025 16:09:40 ] |
Заголовок сообщения: | Re: stm32f0 - абсолютно непонятное поведение и зависание... |
Стек (переполнен)? Роспись памяти (запись по неинициализированному/"неправильному" указателю)? Да вряд-ли, у меня вложенных вызовов мало, виснет в самом начале. Segger вроде не сильно косячит при линковке, были проекты значительно сложнее, непонятных косяков вообще не вылезало. В листинге дизассемблера нет вообще вызовов в эту область памяти, у меня в ОЗУ нет исполняемого кода. Сейчас притянул BOOT0 через 4.7К к земле, вроде выпадения прекратились. Не совсем понятна причина, ведь BOOT0 считывается при запуске только, а я отладчиком весь инит проходил, или я не прав? Верну назад HSIи сопли на плате приберу, посмотрим. Если опять вылезет эта-же проблема, напишу. |
Автор: | Бубоник [ Ср апр 09, 2025 19:08:40 ] |
Заголовок сообщения: | Re: stm32f0 - абсолютно непонятное поведение и зависание... |
Была у меня подобная проблема. Только на массу полностью boot0 подтянул. Когда отладчик подключается он сбрасывает контроллер и начинает грузится абы где. Потому как наводка плавающая. |
Автор: | jcxz [ Чт апр 10, 2025 13:07:40 ] |
Заголовок сообщения: | Re: stm32f0 - абсолютно непонятное поведение и зависание... |
Стал грешить на камень. Поменял на новый. Те-же грабли. Стал грешить на Segger. Конечно - на кого же ещё грешить?! Не на свой же "дивный" код, правда? ![]() Может кто подскажет, в какую сторону копать? В ту же самую, что и всегда - в сторону своего кода.Добавлено after 4 minutes 42 seconds: В первом же цикле задержки, с использованием SysTick, отладка выпадает (переходит) на неиспользуемый диапазон адресов (не знаю, как правильно описать), причем в прерывание SysTick_Handler даже не входит. 1. Переполнение стека. 2. Кривая работа с указателями. 3. Выход за пределы индексов массивов. 4. Ещё 100500 причин... |
Автор: | Уош [ Чт апр 10, 2025 13:10:10 ] |
Заголовок сообщения: | Re: stm32f0 - абсолютно непонятное поведение и зависание... |
Secondtick беззнаковая, не имеет инициализации, зато первая операция же с ней - постдекремент. По крайней мере, иное не видно из "предоставленного кода". Чему станет равна 16-битная переменная, если вначале она оказалась 0 или мусором заполнена, а потом от неё отняли 1? А, не, протупил, условие всё равно выполнится и там её сбросит. Но всё равно, странно неинициализировать переменные. Особенно если рядом другие инициализируются. Однажды Линус Торвальдс шёл по пляжу... Спойлер..., думал о том, что мы все живём в матрице, и грустно смотрел под ноги. В песке он заметил бутылку, подозрительно похожую на коньяк, и возрадовался. Но при ближайшем рассмотрении бутылка оказалась непрозрачной, с сургучной печатью, на которой проступал религиозный символ страны, с которой сложные отношения.Линус конечно же применил брутфорс и открыл бутылку, из которой немедленно вылез джинн. — Значит так, у тебя есть три желания, — сообщил джинн. — Но нельзя желать, чтобы кто-то умер, нельзя желать, чтобы кто-то влюбился в тебя, и нельзя желать больше желаний. — А меньше желаний желать можно? — уточнил Линус, продолжая думать про матрицу. Джин озадачился, почесал в затылке и решил, что можно. — Тогда я хочу чтобы количество моих желаний уменьшилось на три. — Зачем? — поинтересовался джинн. — Потому что я думаю, что ваши джинновые серверы записывают количество желаний в целочисленные переменные и не хранят информацию об отрицательных значениях, так что когда количество моих желаний уменьшится на три, оно станет равно нулю, после чего тебе нужно вычесть ещё единицу за то желание, которое только что исполнилось, переменная переполнится и количество моих желаний станет равно максимальному возможному значению. — Слушай, я из 900-х годов до нашей эры, я не понимаю, — покачал головой джинн. — Меня как царь Соломон запечатал сюда, я выпал из новостной ленты совершенно. — Ты просто сделай так, как я говорю, — посоветовал Линус. Джинн вырвал жменьку волос из бороды, пошептал, поводил руками в воздухе, и ничего не произошло. Тогда он достал из широких шаровар записной свиток из папируса. — У тебя теперь три желания, — прокомментировал он, сверившись с папирусом. — O shit, — удивился Линус. — Но вообще довольно здорово, — попытался ободрить его джинн. — Я никогда раньше не видел, чтобы человек загадал желание, и у него осталось столько же желаний. Даже если бесполезное. Хороший фокус для вечеринок. — Двухбитная переменная, — удивился Линус. — Необычно. — Может, дворец? — сочувственно предложил джинн. — Миллион динаров? 72 девственницы? Я могу, если что... — Я хочу, чтобы переменная, хранящая информацию о доступных мне желаниях, стала 16-битной, определился Линус. — Я всё ещё не понимаю, — покачал головой джин. — 900-е годы. До нашей эры. — Это ничего, — ответил Линус, привыкший иметь дело с гуманитариями. — Ты просто сделай то что я сказал, слово в слово. Джинн вырвал волоски из брови, пошептал, поводил руками, и снова ничего не произошло. Он снова сверился с папирусом. — У тебя теперь два желания, — развёл руками он. — А вот теперь я хочу, чтобы у меня стало на два желания меньше. Джинн вырвал волоски из подмышки, поколдовал и посмотрел в папирус. — У тебя 65 535 желаний, — озадаченно сказал он. Линус Торвальдс нехорошо улыбнулся. — Я же говорил, что мы живём в матрице. Присаживайся. Записывай. Значит, во-первых... |
Автор: | jcxz [ Чт апр 10, 2025 13:20:31 ] |
Заголовок сообщения: | Re: stm32f0 - абсолютно непонятное поведение и зависание... |
В листинге дизассемблера нет вообще вызовов в эту область памяти, у меня в ОЗУ нет исполняемого кода. Для этого не нужен код в ОЗУ. Достаточно просто немного промахнуться при записи по указателю или индексу массива. И записать мусор в стек. А потом выйти из функции по этому мусору.То же самое - при переполнении стека. Добавлено after 9 minutes 19 seconds: Secondtick беззнаковая, не имеет инициализации, зато первая операция же с ней - постдекремент. По крайней мере, иное не видно из "предоставленного кода". Чему станет равна 16-битная переменная, если вначале она оказалась 0 или мусором заполнена, а потом от неё отняли 1? С Secondtick не видно криминала. Глобальные и статические переменные в си, не имеющие явного инициализатора, по дефолту неявно инитятся 0. Так что первая же операция if будет: "if (0 <= 1)" - истина. Всё корректно тут.Единственный вариант чтобы Secondtick оказалась непроинициализирована 0 - это если секция её содержащая, будет в скрипте компоновщика помечена как "no init". Но это надо специально постараться так сделать. Случайно не получится. Код дивно коряв, но явного криминала в приведённом кусочке не вижу. Он где-то вне его. |
Автор: | Уош [ Чт апр 10, 2025 13:52:02 ] |
Заголовок сообщения: | Re: stm32f0 - абсолютно непонятное поведение и зависание... |
Да, верно, я спросонья что-то не то подумал. |
Автор: | d2r [ Пт апр 11, 2025 16:15:03 ] |
Заголовок сообщения: | Re: stm32f0 - абсолютно непонятное поведение и зависание... |
Код дивно коряв, но явного криминала в приведённом кусочке не вижу. Он где-то вне его. Уфф... Тут блин такие великие спецы собрались, что мне сразу неуютно стало. К коду прицепились, хотя проблема явно не с ним. Больше мыслей не было? Или главное - докопаться? Может покажете пример "дивно ровного" кода, а мы обсудим? Короче, тему можно закрывать, BOOT0 висел в воздухе и на нем, в отличии от NRST внутренней подтяжки нет. Притянул к нулю, проблемы прекратились. |
Автор: | viiv [ Пт апр 11, 2025 18:02:38 ] |
Заголовок сообщения: | Re: stm32f0 - абсолютно непонятное поведение и зависание... |
хотя проблема явно не с ним. Проверка земли/питания/других "специфичных" ног (кварц/ресет/бут) - это первое, что делаю еще до изучения как ведет себя программа... Поэтому как бы считал, что это давно проверено ![]() Да и В какой-то момент, стали происходить абсолютно необъяснимые вещи. как бы указывает на код. обычно так и бывает - ошибка есть, но не сильно то и проявляется. Когда код изменяется - "плывут" смещения и ошибка проявляется более явно и с "очень странным поведением". Или раньше BOOT0 был подключен земле, а потом ты его отпаял? Почему до какого-то момента неподключенный BOOT0 ни на что не влиял? |
Автор: | d2r [ Пт апр 11, 2025 19:20:44 ] |
Заголовок сообщения: | Re: stm32f0 - абсолютно непонятное поведение и зависание... |
Да лажанулся, каюсь ![]() |
Автор: | jcxz [ Сб апр 12, 2025 14:17:22 ] |
Заголовок сообщения: | Re: stm32f0 - абсолютно непонятное поведение и зависание... |
Больше мыслей не было? Или главное - докопаться? Может покажете пример "дивно ровного" кода, а мы обсудим? Состояние BOOT0 никак не влияет на работу под отладчиком. Ведь речь идёт о ней:Короче, тему можно закрывать, BOOT0 висел в воздухе и на нем, в отличии от NRST внутренней подтяжки нет. Притянул к нулю, проблемы прекратились. В первом же цикле задержки, с использованием SysTick, отладка выпадает (переходит) на неиспользуемый диапазон адресов А значит - причину вы не нашли. Отладчик сам выставляет стартовый адрес, и ему состояние BOOT0 совершенно фиолетово. Хотя лучше, на всякий случай, ставить его в состояние запрещающее старт кода из флешь.Насчёт "докопаться": Удалённо, с форума, никто не видит - в чём вы там рукожопите. И видим мы только ту инфу, которую предоставляет вопрошающий. Вы предоставили маленький кусочек кода. Про то, что что-то там у вас болтается в воздухе - вы ничего не писали. И естественно никто не станет тут предполагать такие очевидные, само собой разумеющиеся вещи, как установка корректных уровней на всех ногах. С таким же успехом мы могли бы предположить, что у вас и ноги питания чипа "болтаются в воздухе". А запитка идёт паразитными токами через сигнальные ноги. От того и глюки. PS: А собственно да - ноги питания МК у вас случайно в воздухе не болтаются? А то - кто вас знает, что вы там в схеме нарукожопили.... ![]() Схему вы ведь тоже на показали. Только какие-то скриншоты, непонятно как относящиеся к теме. Добавлено after 3 minutes 6 seconds: Или раньше BOOT0 был подключен земле, а потом ты его отпаял? Почему до какого-то момента неподключенный BOOT0 ни на что не влиял? BOOT0 вообще никак не влияет на "работу под отладчиком".Добавлено after 3 minutes 18 seconds: ресет болтался в воздухе. Вот это и есть причина.В следующий раз сразу пишите, что он болтается в воздухе. ![]() Добавлено after 37 minutes 21 second: PS: Насчёт дивности кода: Интересно чего автор ожидает добиться кодом???: Код: SysTick->VAL = ... SysTick->CTRL |= ... ![]() |
Страница 1 из 1 | Часовой пояс: UTC + 3 часа |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |