Например TDA7294

Форум РадиоКот • Просмотр темы - stm32f0 - абсолютно непонятное поведение и зависание...
Форум РадиоКот
Здесь можно немножко помяукать :)

Текущее время: Сб июл 26, 2025 02:51:03

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 12 ] 
Автор Сообщение
Не в сети
 Заголовок сообщения: stm32f0 - абсолютно непонятное поведение и зависание...
СообщениеДобавлено: Ср апр 09, 2025 15:02:07 
Первый раз сказал Мяу!

Зарегистрирован: Пн апр 20, 2009 12:48:30
Сообщений: 23
Рейтинг сообщения: 0
Проект относительно простой - stm8F042F6 + дисплей Nokia 1202 + nRF24l01+. Питание батарейное.

В какой-то момент, стали происходить абсолютно необъяснимые вещи. В первом же цикле задержки, с использованием SysTick, отладка выпадает (переходит) на неиспользуемый диапазон адресов (не знаю, как правильно описать), причем в прерывание SysTick_Handler даже не входит.

Пишу в Segger. CMSIS. Тактирование от HSI. На ногах PF0, PF1 висит управление дисплеем (ножек не хватало). Пока песец в гости не зашел, с дисплеем разобрался, рисовал без проблем.

Стал грешить на камень. Поменял на новый. Те-же грабли.

Поменял на stm32f030F4 (заголовки и скипт линковщика поменял), то-же самое.

Поставил кварц, перекинув сигнал CS дисплея на другой порт, сброс дисплея вообще убрал. Изменил на запуск от HSE. то-же самое.
Изображение

Стал грешить на Segger. Обновил версию. То-же самое. Поставил свежий stm32cubeIDE. Перетащил проект туда. Похожая картина, также виснет.
Изображение

Уже весь мозг сломал :( Если убираю задержку, работает нормально, картинку рисует.

Может кто подскажет, в какую сторону копать?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: stm32f0 - абсолютно непонятное поведение и зависание...
СообщениеДобавлено: Ср апр 09, 2025 15:57:05 
Грызет канифоль

Карма: 13
Рейтинг сообщений: 86
Зарегистрирован: Чт ноя 06, 2014 13:09:06
Сообщений: 278
Рейтинг сообщения: 0
Стек (переполнен)?
Роспись памяти (запись по неинициализированному/"неправильному" указателю)?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: stm32f0 - абсолютно непонятное поведение и зависание...
СообщениеДобавлено: Ср апр 09, 2025 16:09:40 
Первый раз сказал Мяу!

Зарегистрирован: Пн апр 20, 2009 12:48:30
Сообщений: 23
Рейтинг сообщения: 0
Стек (переполнен)?
Роспись памяти (запись по неинициализированному/"неправильному" указателю)?

Да вряд-ли, у меня вложенных вызовов мало, виснет в самом начале.
Segger вроде не сильно косячит при линковке, были проекты значительно сложнее, непонятных косяков вообще не вылезало. В листинге дизассемблера нет вообще вызовов в эту область памяти, у меня в ОЗУ нет исполняемого кода.

Сейчас притянул BOOT0 через 4.7К к земле, вроде выпадения прекратились. Не совсем понятна причина, ведь BOOT0 считывается при запуске только, а я отладчиком весь инит проходил, или я не прав?
Верну назад HSIи сопли на плате приберу, посмотрим. Если опять вылезет эта-же проблема, напишу.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: stm32f0 - абсолютно непонятное поведение и зависание...
СообщениеДобавлено: Ср апр 09, 2025 19:08:40 
Потрогал лапой паяльник

Карма: 4
Рейтинг сообщений: 26
Зарегистрирован: Вс авг 16, 2015 13:08:53
Сообщений: 333
Рейтинг сообщения: 0
Была у меня подобная проблема. Только на массу полностью boot0 подтянул. Когда отладчик подключается он сбрасывает контроллер и начинает грузится абы где. Потому как наводка плавающая.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: stm32f0 - абсолютно непонятное поведение и зависание...
СообщениеДобавлено: Чт апр 10, 2025 13:07:40 
Говорящий с текстолитом

Карма: -10
Рейтинг сообщений: 173
Зарегистрирован: Вт авг 15, 2017 10:51:13
Сообщений: 1504
Рейтинг сообщения: 1
Стал грешить на камень. Поменял на новый. Те-же грабли.
Стал грешить на Segger.
Конечно - на кого же ещё грешить?! Не на свой же "дивный" код, правда? :)))

Может кто подскажет, в какую сторону копать?
В ту же самую, что и всегда - в сторону своего кода.

Добавлено after 4 minutes 42 seconds:
В первом же цикле задержки, с использованием SysTick, отладка выпадает (переходит) на неиспользуемый диапазон адресов (не знаю, как правильно описать), причем в прерывание SysTick_Handler даже не входит.

1. Переполнение стека.
2. Кривая работа с указателями.
3. Выход за пределы индексов массивов.
4. Ещё 100500 причин...


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: stm32f0 - абсолютно непонятное поведение и зависание...
СообщениеДобавлено: Чт апр 10, 2025 13:10:10 
Опытный кот

Зарегистрирован: Вс мар 23, 2025 14:56:55
Сообщений: 700
Рейтинг сообщения: 2
Secondtick беззнаковая, не имеет инициализации, зато первая операция же с ней - постдекремент. По крайней мере, иное не видно из "предоставленного кода". Чему станет равна 16-битная переменная, если вначале она оказалась 0 или мусором заполнена, а потом от неё отняли 1?

А, не, протупил, условие всё равно выполнится и там её сбросит. Но всё равно, странно неинициализировать переменные. Особенно если рядом другие инициализируются.

Однажды Линус Торвальдс шёл по пляжу...
Спойлер..., думал о том, что мы все живём в матрице, и грустно смотрел под ноги. В песке он заметил бутылку, подозрительно похожую на коньяк, и возрадовался. Но при ближайшем рассмотрении бутылка оказалась непрозрачной, с сургучной печатью, на которой проступал религиозный символ страны, с которой сложные отношения.

Линус конечно же применил брутфорс и открыл бутылку, из которой немедленно вылез джинн.

— Значит так, у тебя есть три желания, — сообщил джинн. — Но нельзя желать, чтобы кто-то умер, нельзя желать, чтобы кто-то влюбился в тебя, и нельзя желать больше желаний.

— А меньше желаний желать можно? — уточнил Линус, продолжая думать про матрицу.

Джин озадачился, почесал в затылке и решил, что можно.

— Тогда я хочу чтобы количество моих желаний уменьшилось на три.

— Зачем? — поинтересовался джинн.

— Потому что я думаю, что ваши джинновые серверы записывают количество желаний в целочисленные переменные и не хранят информацию об отрицательных значениях, так что когда количество моих желаний уменьшится на три, оно станет равно нулю, после чего тебе нужно вычесть ещё единицу за то желание, которое только что исполнилось, переменная переполнится и количество моих желаний станет равно максимальному возможному значению.

— Слушай, я из 900-х годов до нашей эры, я не понимаю, — покачал головой джинн. — Меня как царь Соломон запечатал сюда, я выпал из новостной ленты совершенно.

— Ты просто сделай так, как я говорю, — посоветовал Линус.

Джинн вырвал жменьку волос из бороды, пошептал, поводил руками в воздухе, и ничего не произошло. Тогда он достал из широких шаровар записной свиток из папируса.

— У тебя теперь три желания, — прокомментировал он, сверившись с папирусом.

— O shit, — удивился Линус.

— Но вообще довольно здорово, — попытался ободрить его джинн. — Я никогда раньше не видел, чтобы человек загадал желание, и у него осталось столько же желаний. Даже если бесполезное. Хороший фокус для вечеринок.

— Двухбитная переменная, — удивился Линус. — Необычно.

— Может, дворец? — сочувственно предложил джинн. — Миллион динаров? 72 девственницы? Я могу, если что...

— Я хочу, чтобы переменная, хранящая информацию о доступных мне желаниях, стала 16-битной, определился Линус.

— Я всё ещё не понимаю, — покачал головой джин. — 900-е годы. До нашей эры.

— Это ничего, — ответил Линус, привыкший иметь дело с гуманитариями. — Ты просто сделай то что я сказал, слово в слово.

Джинн вырвал волоски из брови, пошептал, поводил руками, и снова ничего не произошло. Он снова сверился с папирусом.

— У тебя теперь два желания, — развёл руками он.

— А вот теперь я хочу, чтобы у меня стало на два желания меньше.

Джинн вырвал волоски из подмышки, поколдовал и посмотрел в папирус.

— У тебя 65 535 желаний, — озадаченно сказал он.

Линус Торвальдс нехорошо улыбнулся.

— Я же говорил, что мы живём в матрице. Присаживайся. Записывай. Значит, во-первых...


Последний раз редактировалось Уош Чт апр 10, 2025 13:16:59, всего редактировалось 2 раз(а).

Вернуться наверх
 
Распродажа паяльного оборудования ATTEN!
Паяльные станции, паяльники и аксессуары по самой выгодной цене.

По промокоду radiokot скидка 10%
Не в сети
 Заголовок сообщения: Re: stm32f0 - абсолютно непонятное поведение и зависание...
СообщениеДобавлено: Чт апр 10, 2025 13:20:31 
Говорящий с текстолитом

Карма: -10
Рейтинг сообщений: 173
Зарегистрирован: Вт авг 15, 2017 10:51:13
Сообщений: 1504
Рейтинг сообщения: 5
В листинге дизассемблера нет вообще вызовов в эту область памяти, у меня в ОЗУ нет исполняемого кода.
Для этого не нужен код в ОЗУ. Достаточно просто немного промахнуться при записи по указателю или индексу массива. И записать мусор в стек. А потом выйти из функции по этому мусору.
То же самое - при переполнении стека.

Добавлено after 9 minutes 19 seconds:
Secondtick беззнаковая, не имеет инициализации, зато первая операция же с ней - постдекремент. По крайней мере, иное не видно из "предоставленного кода". Чему станет равна 16-битная переменная, если вначале она оказалась 0 или мусором заполнена, а потом от неё отняли 1?
С Secondtick не видно криминала. Глобальные и статические переменные в си, не имеющие явного инициализатора, по дефолту неявно инитятся 0. Так что первая же операция if будет: "if (0 <= 1)" - истина. Всё корректно тут.
Единственный вариант чтобы Secondtick оказалась непроинициализирована 0 - это если секция её содержащая, будет в скрипте компоновщика помечена как "no init". Но это надо специально постараться так сделать. Случайно не получится.

Код дивно коряв, но явного криминала в приведённом кусочке не вижу. Он где-то вне его.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: stm32f0 - абсолютно непонятное поведение и зависание...
СообщениеДобавлено: Чт апр 10, 2025 13:52:02 
Опытный кот

Зарегистрирован: Вс мар 23, 2025 14:56:55
Сообщений: 700
Рейтинг сообщения: 0
Да, верно, я спросонья что-то не то подумал.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: stm32f0 - абсолютно непонятное поведение и зависание...
СообщениеДобавлено: Пт апр 11, 2025 16:15:03 
Первый раз сказал Мяу!

Зарегистрирован: Пн апр 20, 2009 12:48:30
Сообщений: 23
Рейтинг сообщения: 0
Код дивно коряв, но явного криминала в приведённом кусочке не вижу. Он где-то вне его.

Уфф... Тут блин такие великие спецы собрались, что мне сразу неуютно стало. К коду прицепились, хотя проблема явно не с ним.
Больше мыслей не было? Или главное - докопаться? Может покажете пример "дивно ровного" кода, а мы обсудим?

Короче, тему можно закрывать, BOOT0 висел в воздухе и на нем, в отличии от NRST внутренней подтяжки нет. Притянул к нулю, проблемы прекратились.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: stm32f0 - абсолютно непонятное поведение и зависание...
СообщениеДобавлено: Пт апр 11, 2025 18:02:38 
Грызет канифоль

Карма: 13
Рейтинг сообщений: 86
Зарегистрирован: Чт ноя 06, 2014 13:09:06
Сообщений: 278
Рейтинг сообщения: 0
хотя проблема явно не с ним.


Проверка земли/питания/других "специфичных" ног (кварц/ресет/бут) - это первое, что делаю еще до изучения как ведет себя программа... Поэтому как бы считал, что это давно проверено :-)

Да и
В какой-то момент, стали происходить абсолютно необъяснимые вещи.


как бы указывает на код. обычно так и бывает - ошибка есть, но не сильно то и проявляется. Когда код изменяется - "плывут" смещения и ошибка проявляется более явно и с "очень странным поведением".

Или раньше BOOT0 был подключен земле, а потом ты его отпаял? Почему до какого-то момента неподключенный BOOT0 ни на что не влиял?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: stm32f0 - абсолютно непонятное поведение и зависание...
СообщениеДобавлено: Пт апр 11, 2025 19:20:44 
Первый раз сказал Мяу!

Зарегистрирован: Пн апр 20, 2009 12:48:30
Сообщений: 23
Рейтинг сообщения: 0
Да лажанулся, каюсь :( , не развел. Он и ресет болтался в воздухе. Проблема вылезла после напайки nrf24l01, видимо не особо тщательно отмыл от "безотмывочного" флюса Kettler TT.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: stm32f0 - абсолютно непонятное поведение и зависание...
СообщениеДобавлено: Сб апр 12, 2025 14:17:22 
Говорящий с текстолитом

Карма: -10
Рейтинг сообщений: 173
Зарегистрирован: Вт авг 15, 2017 10:51:13
Сообщений: 1504
Рейтинг сообщения: 1
Больше мыслей не было? Или главное - докопаться? Может покажете пример "дивно ровного" кода, а мы обсудим?

Короче, тему можно закрывать, BOOT0 висел в воздухе и на нем, в отличии от NRST внутренней подтяжки нет. Притянул к нулю, проблемы прекратились.
Состояние BOOT0 никак не влияет на работу под отладчиком. Ведь речь идёт о ней:
В первом же цикле задержки, с использованием SysTick, отладка выпадает (переходит) на неиспользуемый диапазон адресов
А значит - причину вы не нашли. Отладчик сам выставляет стартовый адрес, и ему состояние BOOT0 совершенно фиолетово. Хотя лучше, на всякий случай, ставить его в состояние запрещающее старт кода из флешь.

Насчёт "докопаться": Удалённо, с форума, никто не видит - в чём вы там рукожопите. И видим мы только ту инфу, которую предоставляет вопрошающий. Вы предоставили маленький кусочек кода. Про то, что что-то там у вас болтается в воздухе - вы ничего не писали.
И естественно никто не станет тут предполагать такие очевидные, само собой разумеющиеся вещи, как установка корректных уровней на всех ногах. С таким же успехом мы могли бы предположить, что у вас и ноги питания чипа "болтаются в воздухе". А запитка идёт паразитными токами через сигнальные ноги. От того и глюки.

PS: А собственно да - ноги питания МК у вас случайно в воздухе не болтаются? А то - кто вас знает, что вы там в схеме нарукожопили.... :)))
Схему вы ведь тоже на показали. Только какие-то скриншоты, непонятно как относящиеся к теме.

Добавлено after 3 minutes 6 seconds:
Или раньше BOOT0 был подключен земле, а потом ты его отпаял? Почему до какого-то момента неподключенный BOOT0 ни на что не влиял?
BOOT0 вообще никак не влияет на "работу под отладчиком".

Добавлено after 3 minutes 18 seconds:
ресет болтался в воздухе.
Вот это и есть причина.
В следующий раз сразу пишите, что он болтается в воздухе. 8) Если не хотите гаданий на кофейной гуще.

Добавлено after 37 minutes 21 second:
PS: Насчёт дивности кода: Интересно чего автор ожидает добиться кодом???:
Код:
SysTick->VAL = ...
SysTick->CTRL |= ...
:shock:


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 12 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 8


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y