Перейти к содержанию
    

Сергей Борщ

Модератор
  • Постов

    10 921
  • Зарегистрирован

  • Посещение

  • Победитель дней

    31

Сообщения, опубликованные Сергей Борщ


  1. 99.99%, что МК не виноват. А факт нажатия проблемной кнопки точно доходит до нужного места программы? Я бы для начала сделал самое простое - переключал светодиод в момент получения нужного кода кнопки соответствующей функцией MicroMenu. А потом это переключение светодиода двигал бы туда-сюда по программе от этой точки в зависимости от результата. Еще версия (более правдоподобная) - значение какого-то из счетчиков  выходит за допустимые границы и меню перестает обновляться. А кнопка ESC этот счетчик сбрасывает.

    Чудес не бывает. 

  2. 5 часов назад, haker_fox сказал:

    Нужно включать реле, которые срабатывают

    А сколько таких реле? Если одно-два реле, можно сгородить что-то вроде вольтодобавки - пока реле выключено - заряжаем конденсатор, когда надо реле включить - включаем этот конденсатор последовательно с источником питания. Вроде даже встречал где-то несложную схему, но сходу найти не смог.

  3. Я брал и F407 и F072 и другие (не STM). Проблемы были только когда брал уже ну самые дешевые лоты, но я был к этому готов. С STM на проблем не имел ни разу (если я вижу птицу, которая выглядит как утка, плавает как утка и крякает как утка - я называю такую птицу уткой).

  4. 5 часов назад, Diman_ сказал:

    Появилась плата на которой автоматически (после подачи питания) устанавливается самопроизвольно бит "Read Out Protection" Level 1.

    4 часа назад, Diman_ сказал:

    Оно никак не должно работать - и на здоровой и на плохой прошивки не было.

    Правильно ли  я понял, что такое поведение наблюдается на свежевпаянном, еще не запрограммированном контроллере? 

    Взять другую плату, на которой все работает, сдуть с обоих контроллеры и пройтись по всем ногам осциллографом, одновременно подавая через резистор подтяжки сначала высокий, потом низкий уровень поочередно на все остальные ноги.  Чудес не бывает, наверняка где-то замыкание. 

  5. 5 часов назад, Lithium сказал:

    Так как PDF можно получить с помощью сторонних pdf-принтеров

    Это будет просто картинка. Понятно, что "на безрыбье и рыбку раком", но хороший pdf обладает очень неслабой навигацией, оглавлением и текстовым поиском. Мне кажется, не стоит его совсем игнорировать. Полагаю, что чертеж по ГОСТ тоже может быть в pdf, если он в таком виде, что его не требуется допиливать. Это, конечно же, не исключает наличие возможности экспорта в dxf. А приоритеты расставлять авторам.

  6. Мне сейчас лень думать, но может эту идею можно как-то адаптировать под вашу задачу? 

    image.thumb.png.13fa9d269d265282324b56db296e39e2.png

    image.thumb.png.12bdb16cc4da641204f65c93cb6b179d.png

    Тут импульс на оптрон формируется при падении входного напряжения ниже напряжения на конденсаторе, в вашем можно формировать импульс при приближении напряжения на конденсаторе к входному, во время импульса конденсатор разряжается в оптрон и цикл повторяется.

  7. 1 час назад, Arlleex сказал:

    Ну Вы говорили, что баг довольно редкий... Так что дайте больше времени:wink:

    Ну как редкий - устройстово пишет во флеш 16 слов (8*64 бита) примерно раз в 4 часа. За сутки из 50 устройств на прогоне вешалось около 20 (в процессе отладки за сессию в 1-20 минут не получалось поймать ни разу, хотя первая запись делается в первую же секунду).  После замены strd на две str (одного обращения по uint64_t volatile * на два обращения по uint32_t volatile *) за двое суток из 50 устройств ни одного зависания. Результат налицо.

  8. В 26.10.2022 в 12:36, Arlleex сказал:

    либо разбивайте STRD на 2 отдельные STR

    Помогло. Спасибо.

    В 26.10.2022 в 15:11, jcxz сказал:

    Пишете кодом из ОЗУ?

    Нет. В документации таких требований нет. У L0 для записи половины страницы такое требование в документации есть, значит если бы здесь это требовалось - было бы указано в документации.

    В 26.10.2022 в 15:11, jcxz сказал:

    Кроме того, я бы и прерывания запретил (ISR и сама таблица у вас где - во флешь?) и писал бы не STRD и даже кеш флеша на всякий случай выключил (и инвалидировал) и DSB/ISB после добавил и MPU деактивировал.

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

  9. 4 минуты назад, Arlleex сказал:

    LDRD/STRD реализованы как interrupt-continuable, а воздействие таких инструкций на запись в память с побочными эффектами не предсказуема

    Вполне возможно. Подозревал, но не знал магического слова interrupt-continuable.

    4 минуты назад, Arlleex сказал:

    либо разбивайте STRD на 2 отдельные STR

    Да, сейчас попробую. Это самый простой способ, спасибо.

  10. Проц STM32WLE5, самописная (естественно) процедура записи во флеш. Собственно запись компилится в инструкцию strd. Адрес всегда выровнен на 8 байт. Почти всегда работает, но иногда (очень редко) вместо записи получаю флаг PGAERR. В документации написано, что этот флаг возникает в том случае, когда либо адрес первого слова не выровнен на 8 байт, либо второе слово не принадлежит этому же двойному слову. Первое условие у меня не выполняется, потому что обращение идет по указателю на uint64_t и явных приведений типа с этим указателем в программе нет. Для отладки добавил в случае ошибки сохранение адреса, по которому была попытка записи. Этот адрес в конкретном подвисшем ночью устройстве 0x803FED0, т.е. адрес выровнен. Второе условие не выполняется потому, что strd всегда пишет два слова в соседние ячейки. Прерывания во время strd не запрещаю - не нашел в документации таких требований, с горя посмотрел код куба - там прерывания не запрещаются и вообще запись идет двумя отдельными записями по 32 бита, т.е. между этими записями идет обращение к флешу на чтение команды.

    Что еще может приводить к PGAERR?

    Еще один вопрос: после попадания в эту ситуацию пытаюсь сбросить FLASH->CR, для чего сбрасываю все флаги в SR записью единиц, но флаг CFGBSY остается взведенным и обнуление FLASH->CR приводит к исключению BusError. Какого черта? CFGBSY должен сброситься при окончании записи либо прекращении записи из-за ошибки!

  11. 8 часов назад, jcxz сказал:

    Вопрос был: У вас памяти > 64К требуется? "Требуется" опустил. Исходя из контекста разговора (а разговор о модели памяти) думал, что и так понятно о чём речь.

    Телепатов тут нет. Пожелание в следующий раз формулировать вопрос более однозначно остается в силе.

  12. 3 часа назад, jcxz сказал:

    В чём именно узрели некое "выкручивание"? Речь шла о "модели памяти".

    Человек писал, что поставил в оболочке модель памяти Large. Вы, цитируя именно это его высказывание, пишете, дословно: "У вас памяти > 64K?" Любой, дружащий с логикой, человек воспримет этот вопрос как относящийся к имеющеюмуся в контроллере доступному объему памяти. И именно так его воспринял _pv. После чего вы начинаете утверждать, что спрашивали про занятый программой объем памяти. Вот в этом я и узрел выкручивание.

  13. 10 часов назад, RusikOk сказал:

    у меня нет такой функции. есть массив

    Я не телепат - вы написали "slaveRxBuf()", а скобки тут означают функцию.

    8 минут назад, RusikOk сказал:

    дебагер выплюнул такую строчку

    Куда выплюнул? Когда выплюнул? Как выплюнул? Это адрес какого-то регистра, а адреса регистров у разных семейств отличаются. Но вы даже не написали, какой контроллер вы отлаживаете, если это викторина - огласите приз победителю.

  14. 36 минут назад, RusikOk сказал:

    может дело в этом?

    Да все эти инструкции представляют собой какой-то бессмысленный набор. Это вообще адреса ОЗУ, как туда исполнение попало и почему отладчик думает, что там должен быть код функции slaveRxBuf()? А если он там должен быть - почему его там нет?

  15. Сделайте так:

    void HardFault_Handler(void)
    {
        volatile int i = 0;
        while(!i)
            ;
    }

    Попадете - включите отладку по ассемблерным командам (image.png.5e9f8db03e5fa83550f22ea0bb875b04.png), отладчиком в окне variables поставьте i=1 и одиночными шагами выходите из обработчика. Попадете как раз на инструкцию, перед которой произошло исключение. Смотрите предыдущую инструкцию, содержимое ее регистров, думайте.

    • Upvote 1
×
×
  • Создать...