Как спасти безнадежные код ничего не делая по существу
Как спасти безнадежные код ничего не делая по существу
Один из пользователей засветил проблему, когда "Уже не первый раз сталкиваюсь с таким явлением на разных процах STM32 (F103xx, F205xx...)
Программа работает отлично при подключённом отладчике.
Как только компилится релиз и программа запускается без подключённого отладчика (при чём акцент именно на этом), схема работает нестабильно.
Точнее просто через некоторое время зависает."
http://forum.easyelectronics.ru/viewtop ... 35&t=40790
Мое Объяснение проблемы: Отладчик и в самом деле влияет на стабильность работы. Для того чтобы понять, как это происходит, нужно иметь ввиду, что отладчик напрягает шину процессора работающую по спецификации AMBA2 (Амба - жаргонизм: конец, конец всему, логическое завершение начатого, шутка) про нее и читайте. Физически подключенный отладчик (даже если он не выполняет команды) изменяет логику арбитража шины AHB и APB. Сигнал SWCLK заставляет приоритеты "вращаться". Так,что это помогает против лени программиста и, одновременно ставит его в тупик... Следовательно есть очень важное свойство SWCLK изменяя его частоту вы можете "вращать" приоритеты как Вам удобно будет. Попробуйте изменять частоту SWCLK и, заметьте его частоту, когда вновь начнутся сбои, период SWCLK даст Вам дополнительную информацию о критическом времени захвата шины для Вашей блок схемы. Иными словами есть возможность измерить Ваш код в смысле арбитража шины AMBA2....
Решение: Спасибо Вам за этот уникальный вопрос. Вы, невольно, подсказали всем путь, как можно позволить себе лениться, или спасти безнадежный код (особенно если он чужой и работает в готовом устройстве). Для этого нужно выбрать частоту SWCLK при которой становиться лучше и, подать ее на постоянной основе. Я проверил на своем "дефектном коде" и, это работает отлично!!!
P.S. Как говориться, Вы любите DMA?, тогда мы идем к Вам...
Программа работает отлично при подключённом отладчике.
Как только компилится релиз и программа запускается без подключённого отладчика (при чём акцент именно на этом), схема работает нестабильно.
Точнее просто через некоторое время зависает."
http://forum.easyelectronics.ru/viewtop ... 35&t=40790
Мое Объяснение проблемы: Отладчик и в самом деле влияет на стабильность работы. Для того чтобы понять, как это происходит, нужно иметь ввиду, что отладчик напрягает шину процессора работающую по спецификации AMBA2 (Амба - жаргонизм: конец, конец всему, логическое завершение начатого, шутка) про нее и читайте. Физически подключенный отладчик (даже если он не выполняет команды) изменяет логику арбитража шины AHB и APB. Сигнал SWCLK заставляет приоритеты "вращаться". Так,что это помогает против лени программиста и, одновременно ставит его в тупик... Следовательно есть очень важное свойство SWCLK изменяя его частоту вы можете "вращать" приоритеты как Вам удобно будет. Попробуйте изменять частоту SWCLK и, заметьте его частоту, когда вновь начнутся сбои, период SWCLK даст Вам дополнительную информацию о критическом времени захвата шины для Вашей блок схемы. Иными словами есть возможность измерить Ваш код в смысле арбитража шины AMBA2....
Решение: Спасибо Вам за этот уникальный вопрос. Вы, невольно, подсказали всем путь, как можно позволить себе лениться, или спасти безнадежный код (особенно если он чужой и работает в готовом устройстве). Для этого нужно выбрать частоту SWCLK при которой становиться лучше и, подать ее на постоянной основе. Я проверил на своем "дефектном коде" и, это работает отлично!!!
P.S. Как говориться, Вы любите DMA?, тогда мы идем к Вам...
"Every profession is a conspiracy against the uninitiated" (B. Shaw)
"A textbook can be defined as a book unsuitable for reading" (B. Shaw)
Tautology is humor in "this" place (Vigo Carpathian)
"A textbook can be defined as a book unsuitable for reading" (B. Shaw)
Tautology is humor in "this" place (Vigo Carpathian)
- Реклама
-
sslobodyan
- Родился
- Сообщения: 9
- Зарегистрирован: Чт авг 12, 2010 00:55:38
Re: Как спасти безнадежные код ничего не делая по существу
А ну-ка растолкуйте для тех, у кого одна извилина.
Вот у меня Ф334 под ФриРтос. Пока запускаю в отладчике с выключенными точками останова или даже вовсе без них - пашет как часы. Как только запускаю в нормальном рантайме тот-же дебужный хекс - время от времени не генерит HRTIM. Причину пока не нашел, вот наткнулся на ваши эмоции. Safe my code, comrades!
Вот у меня Ф334 под ФриРтос. Пока запускаю в отладчике с выключенными точками останова или даже вовсе без них - пашет как часы. Как только запускаю в нормальном рантайме тот-же дебужный хекс - время от времени не генерит HRTIM. Причину пока не нашел, вот наткнулся на ваши эмоции. Safe my code, comrades!
Re: Как спасти безнадежные код ничего не делая по существу
Все дело в том что приоритеты шины AMBA2 вращаются не в ту сторону!
Других прочин просто быть не может! 
- GARMIN
- Держит паяльник хвостом
- Сообщения: 954
- Зарегистрирован: Вс дек 02, 2012 16:58:33
- Откуда: от туда
- Контактная информация:
Re: Как спасти безнадежные код ничего не делая по существу
Долго ждал, чтобы кто-нибудь написал по существу, чем отличается запуск под отладчиком от свободного запуска процессора. Не дождался. Под отладчиком вся оперативная память обнуляется. Ищите не инициализированные переменные или регистры. Вот и всё.
Re: Как спасти безнадежные код ничего не делая по существу
Неправда ваша. И вы сами можете это проверить. Запускаем МК с прогой, она работает. Потом перезапускаем под отладкой, поставив брекпоинт на самую первую инструкцию после вектора сброса. Видим, со что содержимое ОЗУ осталось без изменений (см.скрин). Код ниже - это инит сишных глобальных и статических переменных, он не имеет отношения к отладке и выполняется всегдаПод отладчиком вся оперативная память обнуляется
Есть конечно некоторые МК, у которых одна из областей ОЗУ имеет хардварный сброс. Например, в L476 область SRAM2:
2.4.4 SRAM2 Erase
The SRAM2 can be erased with a system reset using the option bit SRAM2_RST in the user
option byte (refer to Section 3.4.1: Option bytes description).
The SRAM2 erase can also be requested by software by setting the bit SRAM2ER in the
SYSCFG SRAM2 control and status register (SYSCFG_SCSR).
Но в остальных случаях ничего не обнуляется. При запуске происходит инициализация глобальных и статических переменных, и выполняют это участки кода, написанные на ассемблере в стартап-файле.
Вообще-то, по той ссылке проблема была как раз наоборот - под отладчиком всё норм, а БЕЗ отладчика - косяки. Так что топикстартер здесь перепутал всё наоборот и стал сочинять другую "сказку".Попробуйте изменять частоту SWCLK и, заметьте его частоту, когда вновь начнутся сбои,
AMBA2 - это не от "амба", а сокращение Advanced Microcontroller Bus Architecture https://developer.arm.com/architectures ... mba/amba-2. И эта ваша "амба-конец" тут в принципе то не при чем. Поскольку собственно отладка идет по шине Internal private peripheral bus и руководящие документы там совсем другие. Топикстартер конечно собрал всё в одну кучу. Это называется "поиск проблемы методом научного тыка".
Под отладкой могут быть остановки в брекпоинтах, небольшие задержки, которые необходимы для внешней периферии, но не были учтены в коде. Самый распространенный косяк - отсутствие выдержки времени после подачи питания перед первой командой в подключенные внешние микросхемы. Я и сам на это ловился. Под отладкой всё пашет, а когда закрываешь корпус устройства и заново включаешь питание - и вот тут начинается ерунда. Еще и не сразу поймешь, что часть посылаемых команд во внешнюю микросхемку просто игнорится в самом начале.
Если релизная прошивка компилится заново, то косяки надо искать именно в изменениях компиляции - разные уровни оптимизации, разные настройки компилятора. Настроек очень много, могут быть незамеченные различия.
Тут надо разбираться не абстрактно, а конкретно - что и как "не работает", где нестабильность, в чем косяки.
Вообще, поменьше пользуйтесь отладкой. Отладка - она только либо для изучения работы, либо для отслеживания каких-то математических или логических алгоритмов. Чаще всего, отладка бесполезна в реалтаймовых задачах, таких как USB (вообще бесполезна), потоковый обмен данными или управление моторами.
Пишите программы так, как если бы вы не использовали отладки вообще - и не будет косяков.
- Вложения
-
- Безымянный.png
- (55.14 КБ) 260 скачиваний
Последний раз редактировалось Питание Вс июл 19, 2020 11:30:32, всего редактировалось 2 раза.
Почти все плюсы в свою карму и в рейтинги сообщения поставил себе сам, своими же созданными для этих целей клонами. aen
- Реклама
Re: Как спасти безнадежные код ничего не делая по существу
Всё понятно, кроме одного: что такое "со содержимое"?
Re: Как спасти безнадежные код ничего не делая по существу
[uquote="Kuzmin",url="/forum/viewtopic.php?p=3868824#p3868824"]что такое "со содержимое"?[/uquote]
Описка. Следует читать "что содержимое".
Описка. Следует читать "что содержимое".
Правило для российского гражданина: Во всем принимай сторону России, независимо от того, кто Россию возглавляет в данный момент, и какая страна или страны ей противостоят. Руководствуйся мудростью: "Россия, - всё, остальное - ничто!"
Re: Как спасти безнадежные код ничего не делая по существу
Да, просто опислался, случается такое
"...что содержимое"
Почти все плюсы в свою карму и в рейтинги сообщения поставил себе сам, своими же созданными для этих целей клонами. aen
Re: Как спасти безнадежные код ничего не делая по существу
Я думаю, что SWCLK прерывает высокоприоритетный обмен DMA, давая возможность работать DMA с другим приоритетом. Поэтому код работает стабильнее когда высокоприоритетное DMA блокирует низкоприоритетное на недопустимое для логики приложения время. Поскольку SWCLK сигнал довольно высокочастотный, то это проходит незаметно, но помогает, Как бы несколько уравнивает в "Правах" разноприоритетные DMA и, поскольку этот делается с высокой частотой (для нужд отладки) но достается некая "Польза" и коду пользователя. Кстати, можно просто соединить ножки выхода тактовой частоты процессора с делителем и вход для SWCLK на постоянной основе.
Это не значит, что так делать хорошо. Но может помочь, тем более что это объяснимо.
Это не значит, что так делать хорошо. Но может помочь, тем более что это объяснимо.
"Every profession is a conspiracy against the uninitiated" (B. Shaw)
"A textbook can be defined as a book unsuitable for reading" (B. Shaw)
Tautology is humor in "this" place (Vigo Carpathian)
"A textbook can be defined as a book unsuitable for reading" (B. Shaw)
Tautology is humor in "this" place (Vigo Carpathian)
Re: Как спасти безнадежные код ничего не делая по существу
Внешний таковый сигнал SCL у I2C в слейве может как-то влиять на работу этого МК? Никак. Вот и тут так же. И уж тем более, никакие приоритеты не "вращаются". Тактовый сигнал ИНТЕРФЕЙСА отладчика уж никак не может повлиять на внутренние приоритеты DMA. У отладки вообще самый низший приоритет в системе. При том, что у отладки есть собственная шина PPB.
Такое впечатление, что вы на летнем солнышке перегрелись и начали сочинять какие-то сказки-выдумки.
Такое впечатление, что вы на летнем солнышке перегрелись и начали сочинять какие-то сказки-выдумки.
Почти все плюсы в свою карму и в рейтинги сообщения поставил себе сам, своими же созданными для этих целей клонами. aen
Re: Как спасти безнадежные код ничего не делая по существу
[uquote="sslobodyan",url="/forum/viewtopic.php?p=3865827#p3865827"]А ну-ка растолкуйте для тех, у кого одна извилина.
Вот у меня Ф334 под ФриРтос. Пока запускаю в отладчике с выключенными точками останова или даже вовсе без них - пашет как часы. Как только запускаю в нормальном рантайме тот-же дебужный хекс - время от времени не генерит HRTIM. Причину пока не нашел, вот наткнулся на ваши эмоции. Safe my code, comrades!
[/uquote]
К сожалению, FreeRTOS имеет "8 разрядную идеологию" и, не управляет шиной микропроцессора отсюда проистекают такие проблемы. FreeRTOS не разруливает ситуации конкуренции пользовательского кода за шину AMBA. Все отдается на откуп писателю кода без соответствующей поддержки со стороны ОС. Прозрачную поддержку такого типа, (прозрачно для ОС, но и допускает вмешательство ОС) обеспечивает патент NetSilicon, но ST Micro не покупала этот патент и, отсюда такие ситуации.
Добавлено after 14 minutes 21 second:
[uquote="Питание",url="/forum/viewtopic.php?p=3869819#p3869819"]Внешний таковый сигнал SCL у I2C в слейве может как-то влиять на работу этого МК? Никак. Вот и тут так же. И уж тем более, никакие приоритеты не "вращаются". Тактовый сигнал ИНТЕРФЕЙСА отладчика уж никак не может повлиять на внутренние приоритеты DMA. У отладки вообще самый низший приоритет в системе. При том, что у отладки есть собственная шина PPB.
Такое впечатление, что вы на летнем солнышке перегрелись и начали сочинять какие-то сказки-выдумки.[/uquote]
Вопреки "Вашим ощущениям" отладка имеет приоритет в системе выше чем у ядра процессора и DMA вместе взятых (вообще, наивысший из возможных), иначе, она (отладка) не смогла бы выполнять свои функции.
Вот у меня Ф334 под ФриРтос. Пока запускаю в отладчике с выключенными точками останова или даже вовсе без них - пашет как часы. Как только запускаю в нормальном рантайме тот-же дебужный хекс - время от времени не генерит HRTIM. Причину пока не нашел, вот наткнулся на ваши эмоции. Safe my code, comrades!
К сожалению, FreeRTOS имеет "8 разрядную идеологию" и, не управляет шиной микропроцессора отсюда проистекают такие проблемы. FreeRTOS не разруливает ситуации конкуренции пользовательского кода за шину AMBA. Все отдается на откуп писателю кода без соответствующей поддержки со стороны ОС. Прозрачную поддержку такого типа, (прозрачно для ОС, но и допускает вмешательство ОС) обеспечивает патент NetSilicon, но ST Micro не покупала этот патент и, отсюда такие ситуации.
Добавлено after 14 minutes 21 second:
[uquote="Питание",url="/forum/viewtopic.php?p=3869819#p3869819"]Внешний таковый сигнал SCL у I2C в слейве может как-то влиять на работу этого МК? Никак. Вот и тут так же. И уж тем более, никакие приоритеты не "вращаются". Тактовый сигнал ИНТЕРФЕЙСА отладчика уж никак не может повлиять на внутренние приоритеты DMA. У отладки вообще самый низший приоритет в системе. При том, что у отладки есть собственная шина PPB.
Такое впечатление, что вы на летнем солнышке перегрелись и начали сочинять какие-то сказки-выдумки.[/uquote]
Вопреки "Вашим ощущениям" отладка имеет приоритет в системе выше чем у ядра процессора и DMA вместе взятых (вообще, наивысший из возможных), иначе, она (отладка) не смогла бы выполнять свои функции.
Последний раз редактировалось astrahard Ср июл 22, 2020 14:05:53, всего редактировалось 2 раза.
"Every profession is a conspiracy against the uninitiated" (B. Shaw)
"A textbook can be defined as a book unsuitable for reading" (B. Shaw)
Tautology is humor in "this" place (Vigo Carpathian)
"A textbook can be defined as a book unsuitable for reading" (B. Shaw)
Tautology is humor in "this" place (Vigo Carpathian)
Re: Как спасти безнадежные код ничего не делая по существу
Это вообще не уровень ОС. Все равно что написать - "винда не разруливает маршрутизацию пакетов между компом и сервером где-то в сети".astrahard писал(а):К сожалению, FreeRTOS имеет "8 разрядную идеологию" и, не управляет шиной микропроцессора отсюда проистекают такие проблемы. FreeRTOS не разруливает ситуации конкуренции пользовательского кода за шину AMBA.
Вы кроме вращения приоритетов и AMBA что-то еще знаете?
Re: Как спасти безнадежные код ничего не делая по существу
Винда как раз разруливает почти все, что Вы способны вспомнить. И, очень часто упоминает (Винда) слово "директ".
"Every profession is a conspiracy against the uninitiated" (B. Shaw)
"A textbook can be defined as a book unsuitable for reading" (B. Shaw)
Tautology is humor in "this" place (Vigo Carpathian)
"A textbook can be defined as a book unsuitable for reading" (B. Shaw)
Tautology is humor in "this" place (Vigo Carpathian)
Re: Как спасти безнадежные код ничего не делая по существу
Нехило господин перегрелся
Про 8-разрядную FreeRTOS - эт вообще что-то дикое. Где такое только приснилось топикстартеру?
Приведите номер документа и страницу в нем, где это всё написано (про приоритеты и 8-разрядную FreeRTOS)! Без этого - все эти выдумки - беспочвенны и даже не стоят обсуждений!
Приведите номер документа и страницу в нем, где это всё написано (про приоритеты и 8-разрядную FreeRTOS)! Без этого - все эти выдумки - беспочвенны и даже не стоят обсуждений!
Почти все плюсы в свою карму и в рейтинги сообщения поставил себе сам, своими же созданными для этих целей клонами. aen
Re: Как спасти безнадежные код ничего не делая по существу
Почитать можно здесь https://kit-e.ru/cpu/konstrukczii-shin- ... yh-sistem/
Цитата "NetSilicon разработала новую систему управления полосой пропускания взамен той, что используется в AMBA-архитектуре"
Смотрите Программирование «вращающегося» арбитра шины. Я предложил сделать подобное для STM32, за счет свойств отладки.
P.S. FreeRTOS не в курсе такого "перфекционизма" именно поэтому (и по некоторым другим причинам) я назвал ее "8 разрядной", кстати заковычив !!!! это высказывание.
Можно, также, почитать это https://progi.pro/kompensiruyushaya-lat ... rm-1459641
Цитата "NetSilicon разработала новую систему управления полосой пропускания взамен той, что используется в AMBA-архитектуре"
Смотрите Программирование «вращающегося» арбитра шины. Я предложил сделать подобное для STM32, за счет свойств отладки.
P.S. FreeRTOS не в курсе такого "перфекционизма" именно поэтому (и по некоторым другим причинам) я назвал ее "8 разрядной", кстати заковычив !!!! это высказывание.
Можно, также, почитать это https://progi.pro/kompensiruyushaya-lat ... rm-1459641
"Every profession is a conspiracy against the uninitiated" (B. Shaw)
"A textbook can be defined as a book unsuitable for reading" (B. Shaw)
Tautology is humor in "this" place (Vigo Carpathian)
"A textbook can be defined as a book unsuitable for reading" (B. Shaw)
Tautology is humor in "this" place (Vigo Carpathian)
Re: Как спасти безнадежные код ничего не делая по существу
Чепуха! "У меня на заборе #$% написано, а там дрова лежат". Я просил официальные документы, а не безымянные рассуждения некому неизвестных писателей. Так что не принимается!
Фраза
Фраза
уже сама за себя говорит. Бестолковые малограмотные рассуждения.на процессоре STM32F4
Почти все плюсы в свою карму и в рейтинги сообщения поставил себе сам, своими же созданными для этих целей клонами. aen
Re: Как спасти безнадежные код ничего не делая по существу
Ну Вы даете. Публично признаться в своей малограмотности?, хотя, ваш ник Питание....
"Every profession is a conspiracy against the uninitiated" (B. Shaw)
"A textbook can be defined as a book unsuitable for reading" (B. Shaw)
Tautology is humor in "this" place (Vigo Carpathian)
"A textbook can be defined as a book unsuitable for reading" (B. Shaw)
Tautology is humor in "this" place (Vigo Carpathian)
Re: Как спасти безнадежные код ничего не делая по существу
Не пишите бред!astrahard писал(а):Винда как раз разруливает почти все, что Вы способны вспомнить. И, очень часто упоминает (Винда) слово "директ".
Если вы так хорошо знаете винду, скажите почему комп не получает белый IP когда сеть за NAT?
Надеюсь теперь понимаете бредовоть ваших высказываний по поводу ОС и уровня железа?
Re: Как спасти безнадежные код ничего не делая по существу
Чего-то не хочется, откликаться на элементарное вымогательство под видом оскорблений.
"Every profession is a conspiracy against the uninitiated" (B. Shaw)
"A textbook can be defined as a book unsuitable for reading" (B. Shaw)
Tautology is humor in "this" place (Vigo Carpathian)
"A textbook can be defined as a book unsuitable for reading" (B. Shaw)
Tautology is humor in "this" place (Vigo Carpathian)
Re: Как спасти безнадежные код ничего не делая по существу
Запуск от "без отладчика" может отличаться от запуска "под отладчиком" ещё например тем, что под отладчиком во флешь были установлены бряки. Которые не были сняты. Например - из-за аварийного отключения отладчика. И которые будут срабатывать во время выполнения программы, вызывая необрабатываемые исключения.


