Один из пользователей засветил проблему, когда "Уже не первый раз сталкиваюсь с таким явлением на разных процах STM32 (F103xx, F205xx...) Программа работает отлично при подключённом отладчике. Как только компилится релиз и программа запускается без подключённого отладчика (при чём акцент именно на этом), схема работает нестабильно. Точнее просто через некоторое время зависает." 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)
А ну-ка растолкуйте для тех, у кого одна извилина. Вот у меня Ф334 под ФриРтос. Пока запускаю в отладчике с выключенными точками останова или даже вовсе без них - пашет как часы. Как только запускаю в нормальном рантайме тот-же дебужный хекс - время от времени не генерит HRTIM. Причину пока не нашел, вот наткнулся на ваши эмоции. Safe my code, comrades!
Заголовок сообщения: Re: Как спасти безнадежные код ничего не делая по существу
Добавлено: Сб июл 11, 2020 18:18:24
Опытный кот
Карма: 16
Рейтинг сообщений: 170
Зарегистрирован: Вс дек 02, 2012 16:58:33 Сообщений: 828 Откуда: Уже не город Белых гор
Рейтинг сообщения:0
Долго ждал, чтобы кто-нибудь написал по существу, чем отличается запуск под отладчиком от свободного запуска процессора. Не дождался. Под отладчиком вся оперативная память обнуляется. Ищите не инициализированные переменные или регистры. Вот и всё.
Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ очень важен контроль процесса заряда и разряда для избегания воздействия внешнего зарядного напряжения после достижения 100% заряда. Инженеры КОМПЭЛ подготовили список таких решений от разных производителей.
Неправда ваша. И вы сами можете это проверить. Запускаем МК с прогой, она работает. Потом перезапускаем под отладкой, поставив брекпоинт на самую первую инструкцию после вектора сброса. Видим, сочто содержимое ОЗУ осталось без изменений (см.скрин). Код ниже - это инит сишных глобальных и статических переменных, он не имеет отношения к отладке и выполняется всегда Есть конечно некоторые МК, у которых одна из областей ОЗУ имеет хардварный сброс. Например, в 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 (вообще бесполезна), потоковый обмен данными или управление моторами. Пишите программы так, как если бы вы не использовали отладки вообще - и не будет косяков.
Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре.
Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.
_________________ Правило для российского гражданина: Во всем принимай сторону России, независимо от того, кто Россию возглавляет в данный момент, и какая страна или страны ей противостоят. Руководствуйся мудростью: "Россия, - всё, остальное - ничто!"
Я думаю, что 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)
Внешний таковый сигнал SCL у I2C в слейве может как-то влиять на работу этого МК? Никак. Вот и тут так же. И уж тем более, никакие приоритеты не "вращаются". Тактовый сигнал ИНТЕРФЕЙСА отладчика уж никак не может повлиять на внутренние приоритеты DMA. У отладки вообще самый низший приоритет в системе. При том, что у отладки есть собственная шина PPB. Такое впечатление, что вы на летнем солнышке перегрелись и начали сочинять какие-то сказки-выдумки.
_________________ Почти все плюсы в свою карму и в рейтинги сообщения поставил себе сам, своими же созданными для этих целей клонами. aen
А ну-ка растолкуйте для тех, у кого одна извилина. Вот у меня Ф334 под ФриРтос. Пока запускаю в отладчике с выключенными точками останова или даже вовсе без них - пашет как часы. Как только запускаю в нормальном рантайме тот-же дебужный хекс - время от времени не генерит HRTIM. Причину пока не нашел, вот наткнулся на ваши эмоции. Safe my code, comrades!
К сожалению, FreeRTOS имеет "8 разрядную идеологию" и, не управляет шиной микропроцессора отсюда проистекают такие проблемы. FreeRTOS не разруливает ситуации конкуренции пользовательского кода за шину AMBA. Все отдается на откуп писателю кода без соответствующей поддержки со стороны ОС. Прозрачную поддержку такого типа, (прозрачно для ОС, но и допускает вмешательство ОС) обеспечивает патент NetSilicon, но ST Micro не покупала этот патент и, отсюда такие ситуации.
Внешний таковый сигнал SCL у I2C в слейве может как-то влиять на работу этого МК? Никак. Вот и тут так же. И уж тем более, никакие приоритеты не "вращаются". Тактовый сигнал ИНТЕРФЕЙСА отладчика уж никак не может повлиять на внутренние приоритеты DMA. У отладки вообще самый низший приоритет в системе. При том, что у отладки есть собственная шина PPB. Такое впечатление, что вы на летнем солнышке перегрелись и начали сочинять какие-то сказки-выдумки.
Вопреки "Вашим ощущениям" отладка имеет приоритет в системе выше чем у ядра процессора и 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)
Последний раз редактировалось astrahard Ср июл 22, 2020 14:05:53, всего редактировалось 2 раз(а).
К сожалению, FreeRTOS имеет "8 разрядную идеологию" и, не управляет шиной микропроцессора отсюда проистекают такие проблемы. FreeRTOS не разруливает ситуации конкуренции пользовательского кода за шину AMBA.
Это вообще не уровень ОС. Все равно что написать - "винда не разруливает маршрутизацию пакетов между компом и сервером где-то в сети". Вы кроме вращения приоритетов и AMBA что-то еще знаете?
Винда как раз разруливает почти все, что Вы способны вспомнить. И, очень часто упоминает (Винда) слово "директ".
_________________ "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)
Нехило господин перегрелся Про 8-разрядную FreeRTOS - эт вообще что-то дикое. Где такое только приснилось топикстартеру? Приведите номер документа и страницу в нем, где это всё написано (про приоритеты и 8-разрядную FreeRTOS)! Без этого - все эти выдумки - беспочвенны и даже не стоят обсуждений!
_________________ Почти все плюсы в свою карму и в рейтинги сообщения поставил себе сам, своими же созданными для этих целей клонами. aen
Почитать можно здесь https://kit-e.ru/cpu/konstrukczii-shin- ... yh-sistem/ Цитата "NetSilicon разработала новую систему управления полосой пропускания взамен той, что используется в AMBA-архитектуре" Смотрите Программирование «вращающегося» арбитра шины. Я предложил сделать подобное для STM32, за счет свойств отладки.
P.S. FreeRTOS не в курсе такого "перфекционизма" именно поэтому (и по некоторым другим причинам) я назвал ее "8 разрядной", кстати заковычив !!!! это высказывание.
_________________ "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)
Чепуха! "У меня на заборе #$% написано, а там дрова лежат". Я просил официальные документы, а не безымянные рассуждения некому неизвестных писателей. Так что не принимается!
Фраза
Цитата:
на процессоре STM32F4
уже сама за себя говорит. Бестолковые малограмотные рассуждения.
_________________ Почти все плюсы в свою карму и в рейтинги сообщения поставил себе сам, своими же созданными для этих целей клонами. aen
Ну Вы даете. Публично признаться в своей малограмотности?, хотя, ваш ник Питание....
_________________ "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)
Винда как раз разруливает почти все, что Вы способны вспомнить. И, очень часто упоминает (Винда) слово "директ".
Не пишите бред! Если вы так хорошо знаете винду, скажите почему комп не получает белый IP когда сеть за NAT? Винда должна, просто обязана это разрулить! Надеюсь теперь понимаете бредовоть ваших высказываний по поводу ОС и уровня железа?
Чего-то не хочется, откликаться на элементарное вымогательство под видом оскорблений.
_________________ "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)
Запуск от "без отладчика" может отличаться от запуска "под отладчиком" ещё например тем, что под отладчиком во флешь были установлены бряки. Которые не были сняты. Например - из-за аварийного отключения отладчика. И которые будут срабатывать во время выполнения программы, вызывая необрабатываемые исключения.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 35
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения