-
Постов
10 921 -
Зарегистрирован
-
Посещение
-
Победитель дней
31
Сообщения, опубликованные Сергей Борщ
-
-
Простите, а какой формат файлов у LECAD? Текстовый, дающий возможность править любым редактором или двоичный-секретный?
-
99.99%, что МК не виноват. А факт нажатия проблемной кнопки точно доходит до нужного места программы? Я бы для начала сделал самое простое - переключал светодиод в момент получения нужного кода кнопки соответствующей функцией MicroMenu. А потом это переключение светодиода двигал бы туда-сюда по программе от этой точки в зависимости от результата. Еще версия (более правдоподобная) - значение какого-то из счетчиков выходит за допустимые границы и меню перестает обновляться. А кнопка ESC этот счетчик сбрасывает.
Чудес не бывает.
-
5 часов назад, haker_fox сказал:
Нужно включать реле, которые срабатывают
А сколько таких реле? Если одно-два реле, можно сгородить что-то вроде вольтодобавки - пока реле выключено - заряжаем конденсатор, когда надо реле включить - включаем этот конденсатор последовательно с источником питания. Вроде даже встречал где-то несложную схему, но сходу найти не смог.
-
-
4 часа назад, tonyk_av сказал:
А можно ссылку на магазин?
Это было давно, еще до кризиса. Просто посмотрите на цены и рейтинг продавца. Самые дешевые лоты не берите.
-
Я брал и F407 и F072 и другие (не STM). Проблемы были только когда брал уже ну самые дешевые лоты, но я был к этому готов. С STM на проблем не имел ни разу (если я вижу птицу, которая выглядит как утка, плавает как утка и крякает как утка - я называю такую птицу уткой).
-
5 часов назад, Diman_ сказал:
Появилась плата на которой автоматически (после подачи питания) устанавливается самопроизвольно бит "Read Out Protection" Level 1.
4 часа назад, Diman_ сказал:Оно никак не должно работать - и на здоровой и на плохой прошивки не было.
Правильно ли я понял, что такое поведение наблюдается на свежевпаянном, еще не запрограммированном контроллере?
Взять другую плату, на которой все работает, сдуть с обоих контроллеры и пройтись по всем ногам осциллографом, одновременно подавая через резистор подтяжки сначала высокий, потом низкий уровень поочередно на все остальные ноги. Чудес не бывает, наверняка где-то замыкание.
-
4 часа назад, Reystlin сказал:
SPI3->CR2 = SPI_CR2_TXDMAEN; // Отправка через DMA
-
В своих исходниках вижу установленный в 1 бит SPI->CR2.SSOE.
-
5 часов назад, Arlleex сказал:
Надеюсь, мысль понятна.
"Надо сразу стараться сделать хорошо, плохо получится само." Точнее так: "надо всегда стараться делать хорошо".
-
5 часов назад, Lithium сказал:
Так как PDF можно получить с помощью сторонних pdf-принтеров
Это будет просто картинка. Понятно, что "на безрыбье и рыбку раком", но хороший pdf обладает очень неслабой навигацией, оглавлением и текстовым поиском. Мне кажется, не стоит его совсем игнорировать. Полагаю, что чертеж по ГОСТ тоже может быть в pdf, если он в таком виде, что его не требуется допиливать. Это, конечно же, не исключает наличие возможности экспорта в dxf. А приоритеты расставлять авторам.
-
Мне сейчас лень думать, но может эту идею можно как-то адаптировать под вашу задачу?
Тут импульс на оптрон формируется при падении входного напряжения ниже напряжения на конденсаторе, в вашем можно формировать импульс при приближении напряжения на конденсаторе к входному, во время импульса конденсатор разряжается в оптрон и цикл повторяется.
-
1 час назад, Arlleex сказал:
Ну Вы говорили, что баг довольно редкий... Так что дайте больше времени
Ну как редкий - устройстово пишет во флеш 16 слов (8*64 бита) примерно раз в 4 часа. За сутки из 50 устройств на прогоне вешалось около 20 (в процессе отладки за сессию в 1-20 минут не получалось поймать ни разу, хотя первая запись делается в первую же секунду). После замены strd на две str (одного обращения по uint64_t volatile * на два обращения по uint32_t volatile *) за двое суток из 50 устройств ни одного зависания. Результат налицо.
-
В 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 деактивировал.
Да я тоже могу костылей напридумывать, но нужно было найти именно причину.
-
4 минуты назад, Arlleex сказал:
LDRD/STRD реализованы как interrupt-continuable, а воздействие таких инструкций на запись в память с побочными эффектами не предсказуема
Вполне возможно. Подозревал, но не знал магического слова interrupt-continuable.
4 минуты назад, Arlleex сказал:либо разбивайте STRD на 2 отдельные STR
Да, сейчас попробую. Это самый простой способ, спасибо.
-
С питанием порядок - 3.3 В от ЛБП. Для тактирования тут прибит гвоздями HSI и он включается автоматически контроллером флеша.
-
Проц STM32WLE5, самописная (естественно) процедура записи во флеш. Собственно запись компилится в инструкцию strd. Адрес всегда выровнен на 8 байт. Почти всегда работает, но иногда (очень редко) вместо записи получаю флаг PGAERR. В документации написано, что этот флаг возникает в том случае, когда либо адрес первого слова не выровнен на 8 байт, либо второе слово не принадлежит этому же двойному слову. Первое условие у меня не выполняется, потому что обращение идет по указателю на uint64_t и явных приведений типа с этим указателем в программе нет. Для отладки добавил в случае ошибки сохранение адреса, по которому была попытка записи. Этот адрес в конкретном подвисшем ночью устройстве 0x803FED0, т.е. адрес выровнен. Второе условие не выполняется потому, что strd всегда пишет два слова в соседние ячейки. Прерывания во время strd не запрещаю - не нашел в документации таких требований, с горя посмотрел код куба - там прерывания не запрещаются и вообще запись идет двумя отдельными записями по 32 бита, т.е. между этими записями идет обращение к флешу на чтение команды.
Что еще может приводить к PGAERR?
Еще один вопрос: после попадания в эту ситуацию пытаюсь сбросить FLASH->CR, для чего сбрасываю все флаги в SR записью единиц, но флаг CFGBSY остается взведенным и обнуление FLASH->CR приводит к исключению BusError. Какого черта? CFGBSY должен сброситься при окончании записи либо прекращении записи из-за ошибки!
-
8 часов назад, jcxz сказал:
Вопрос был: У вас памяти > 64К требуется? "Требуется" опустил. Исходя из контекста разговора (а разговор о модели памяти) думал, что и так понятно о чём речь.
Телепатов тут нет. Пожелание в следующий раз формулировать вопрос более однозначно остается в силе.
-
3 часа назад, jcxz сказал:
В чём именно узрели некое "выкручивание"? Речь шла о "модели памяти".
Человек писал, что поставил в оболочке модель памяти Large. Вы, цитируя именно это его высказывание, пишете, дословно: "У вас памяти > 64K?" Любой, дружащий с логикой, человек воспримет этот вопрос как относящийся к имеющеюмуся в контроллере доступному объему памяти. И именно так его воспринял _pv. После чего вы начинаете утверждать, что спрашивали про занятый программой объем памяти. Вот в этом я и узрел выкручивание.
-
10 часов назад, jcxz сказал:
Вопрос был не про размер памяти МК,
Вы снова начинаете выкручиваться. В следующий раз постарайтесь формулировать вопрос более однозначно.
-
10 часов назад, RusikOk сказал:
у меня нет такой функции. есть массив
Я не телепат - вы написали "slaveRxBuf()", а скобки тут означают функцию.
8 минут назад, RusikOk сказал:дебагер выплюнул такую строчку
Куда выплюнул? Когда выплюнул? Как выплюнул? Это адрес какого-то регистра, а адреса регистров у разных семейств отличаются. Но вы даже не написали, какой контроллер вы отлаживаете, если это викторина - огласите приз победителю.
-
36 минут назад, RusikOk сказал:
может дело в этом?
Да все эти инструкции представляют собой какой-то бессмысленный набор. Это вообще адреса ОЗУ, как туда исполнение попало и почему отладчик думает, что там должен быть код функции slaveRxBuf()? А если он там должен быть - почему его там нет?
-
Только что, Arlleex сказал:
А есть еще неточный
Сам сегодня искал. Но с чего-то начинать-то надо.
-
Сделайте так:
void HardFault_Handler(void) { volatile int i = 0; while(!i) ; }
Попадете - включите отладку по ассемблерным командам (), отладчиком в окне variables поставьте i=1 и одиночными шагами выходите из обработчика. Попадете как раз на инструкцию, перед которой произошло исключение. Смотрите предыдущую инструкцию, содержимое ее регистров, думайте.
- 1
Lithium ECAD - российская САПР печатных плат
в Разрабатываем ПП в САПР - PCB development
Опубликовано · Пожаловаться
Это минус. Но очень радует, что вы понимаете необходимость текстового формата.