Как спасти безнадежный код ничего не делая по существу STM32

Контроллеры, драйверы, датчики, управляющие устройства.
astrahard
Опытный
Сообщения: 167
Зарегистрирован: 26 апр 2018, 07:58
Репутация: 1
Контактная информация:

Как спасти безнадежный код ничего не делая по существу STM32

Сообщение astrahard »

Один из пользователей засветил проблему, когда "Уже не первый раз сталкиваюсь с таким явлением на разных процах STM32 (F103xx, F205xx...)
Программа работает отлично при подключённом отладчике.
Как только компилится релиз и программа запускается без подключённого отладчика (при чём акцент именно на этом), схема работает нестабильно.
Точнее просто через некоторое время зависает."

Мое Объяснение проблемы: Отладчик и в самом деле влияет на стабильность работы. Для того чтобы понять, как это происходит, нужно иметь ввиду, что отладчик напрягает шину процессора работающую по спецификации AMBA2 (Амба - жаргонизм: конец, конец всему, логическое завершение начатого, шутка) про нее и читайте. Физически подключенный отладчик (даже если он не выполняет команды) изменяет логику арбитража шины AHB и APB. Сигнал SWCLK заставляет приоритеты "вращаться". Так,что это помогает против лени программиста и, одновременно ставит его в тупик... Следовательно есть очень важное свойство SWCLK изменяя его частоту вы можете "вращать" приоритеты как Вам удобно будет. Попробуйте изменять частоту SWCLK и, заметьте его частоту, когда вновь начнутся сбои, период SWCLK даст Вам дополнительную информацию о критическом времени захвата шины для Вашей блок схемы. Иными словами есть возможность измерить Ваш код в смысле арбитража шины AMBA2....

Решение: Спасибо Вам за этот уникальный вопрос. Вы, невольно, подсказали всем путь, как можно позволить себе лениться, или спасти безнадежный код (особенно если он чужой и работает в готовом устройстве). Для этого нужно выбрать частоту SWCLK при которой становиться лучше и, подать ее на постоянной основе. Я проверил на своем "дефектном коде" и, это работает отлично!!!

P.S. Как говориться, Вы любите DMA?, тогда мы идем к Вам...
Последний раз редактировалось astrahard 18 июн 2020, 05:27, всего редактировалось 1 раз.
astrahard
Опытный
Сообщения: 167
Зарегистрирован: 26 апр 2018, 07:58
Репутация: 1
Контактная информация:

Re: Как спасти безнадежный код ничего не делая по существу S

Сообщение astrahard »

Еще меня заинтересовал вопрос о времени входа в прерывание (увеличении этого времени) в условии максимально напряженной работы DMA (STM32F103). Хочу устроить преобразование последовательного интерфейса в параллельные слова на GPIO. Скорость GPIO предполагается 400 КГц. Интересно, какой получиться фазовый дребезг параллельного вывода по таймеру. Поскольку GPIO не снабжено DMA вывод будет по таймеру. А также сделать буферизацию для нивелирования ошибок последовательного интерфейса, иначе клок будет определятся свойствами последовательного интерфейса, что крайне не желательно, поскольку я хочу менять частоту вывода. Я хочу на практике показать влияние клока отладки SWD интерфейса на фазовый дребезг в таком случае. То-есть доказать, что CLK SWD "вращает" приоритеты DMA. Таким образом подтвердить свое теоретическое предсказание. Изменяя частоту CLK SWD посмотреть эффект.

P.S. Это все можно сделать на Blue Pill может пригодиться, чтобы сделать генератор шагов с частотой 400 Килогерц, с дискретностью 2,5 микросекунды и, предполагаемым фазовым дребезгом 166 наносекунд. В этом случае можно забыть о латентности Servo Linux CNC и думать только о латентности Servo thread и, думать только о латентности Base thread.
Аватара пользователя
MX_Master
Мастер
Сообщения: 7476
Зарегистрирован: 27 июн 2015, 19:45
Репутация: 3099
Настоящее имя: Михаил
Откуда: Алматы
Контактная информация:

Re: Как спасти безнадежный код ничего не делая по существу S

Сообщение MX_Master »

OK :)
Аватара пользователя
Serg
Мастер
Сообщения: 21923
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 5181
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

Re: Как спасти безнадежный код ничего не делая по существу S

Сообщение Serg »

Типовые ошибки с подобными симптомами:
1. Где-то в коде программы есть обращение к памяти по "запрещённому" адресу. Для отладки программа компилится без оптимизации и с добавлением отладочной информации, т.е. с сильно другим распределением памяти и "неправильное обращение" случайно попадает в "разрешённый" адрес.
2. Релиз программы компилится с сильными уровнями оптимизации (-Os или -Ofast), но никто не обещал (более того, в доках на нормальные компиляторы есть предупреждения на этот счёт) что при этом получится код, выполняющий именно то, что вы задумали.

Решение: тщательнее тестируйте релиз, не ленитесь создавать свои обработчики исключений с соотв. сигнализацией...

P.S. Кстати, "аккуратный код" сильно способствует недопущению подобных "глюков"... :)
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
astrahard
Опытный
Сообщения: 167
Зарегистрирован: 26 апр 2018, 07:58
Репутация: 1
Контактная информация:

Re: Как спасти безнадежный код ничего не делая по существу S

Сообщение astrahard »

По Вашей версии наличие SWCLK помогает попадать в нужный адрес? ну что-же это, отчасти, это правильно. Но справедливее будет думать, что отладчик прерывает транзакции, давая возможность работать другим участкам кода.
Аватара пользователя
Сергей Саныч
Мастер
Сообщения: 9116
Зарегистрирован: 30 май 2012, 14:20
Репутация: 2857
Откуда: Тюмень
Контактная информация:

Re: Как спасти безнадежный код ничего не делая по существу S

Сообщение Сергей Саныч »

Бубен и варган (комус) - необходимые инструменты при отладке :hehehe:
Чудес не бывает. Бывают фокусы.
Аватара пользователя
Serg
Мастер
Сообщения: 21923
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 5181
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

Re: Как спасти безнадежный код ничего не делая по существу S

Сообщение Serg »

astrahard писал(а):По Вашей версии наличие SWCLK помогает попадать в нужный адрес?
Нет. Про влияние самого процесса отладки я ни слова не сазал, я говорил только про влияние компилятора, ну и про качество кода.
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
Ответить

Вернуться в «Электроника»