![](https://electronix.ru/forum/uploads/set_resources_23/84c1e40ea0e759e3f1505eb1788ddf3c_pattern.png)
![](https://electronix.ru/forum/uploads/set_resources_23/84c1e40ea0e759e3f1505eb1788ddf3c_default_photo.png)
adnega
-
Постов
3 603 -
Зарегистрирован
-
Посещение
-
Победитель дней
3
Сообщения, опубликованные adnega
-
-
А что запрещает сделать .s-файл и запускать из Си реализованную там функцию?
Зачем вы мешаете компилятору делать свою работу?
-
Не проще массу умножить на расстояние до центра масс?
-
-
В 05.04.2023 в 12:01, yuriger сказал:
Пришли фото своей красивой пайки к сантехническому бочонку.
Вроде, для каждой задачи должен быть свой инструмент. Для пайки посуды есть мощные паяльники в виде топора.
-
В 31.03.2023 в 21:42, romas2010 сказал:
Такая же петрушка. F407 проц. По неизвестным причинам стирается сектор с самим загрузчиком. Непонятно, что происходит, но факт на лице.
А как вы поняли что стирается именно нулевой сектор?
-
В 31.03.2023 в 22:10, romas2010 сказал:
Читаю АЦП при помощи DMA.
Один канал или несколько? Сколько?
В 31.03.2023 в 22:10, romas2010 сказал:то по адресам 0х20000000..0х20000010
А что линкер разместил по этим адресам?
В 31.03.2023 в 22:10, romas2010 сказал:копии считанных байтов
АЦП 12-битный. Вы в 8 битном режиме от него данные получаете?
В 31.03.2023 в 22:10, romas2010 сказал:чтоб этого эффекта не было?
Без исходника ничего не понятно.
В 31.03.2023 в 22:10, romas2010 сказал:P. S. В проекте получается более 10 источников прерываний, поэтому хочу некоторые источники опрашивать
Сомнительное решение.
-
В 26.03.2023 в 23:15, jcxz сказал:
Например то, что очевидно код этот не пишет во флешь месяцами непрерывно (у ТС-а сбои происходят через месяц или больше работы). А только кратковременно. А значит вероятность что какой-то баг случается и что момент его возникновения совпадёт с миллисекундами штатного обращения к флешь - ничтожно мал.
Чтоб что-то сделать с флешь нужно как минимум разлочить работу с ней. По мне так это тоже самое, что MPU разлочить. Да, в нештатной ситуации MPU может дать дополнительную информацию о проблеме, а неразлоченный контроллер флешь (зависнет?) не даст эту самую флешь повредить. А так как ТС уверяет, что флешь стирается даже с локом сектора, то:
- выполняется полный код снятия защиты с сектора, стирание сектора, и уж точно разблокирование контроллера флешь по всем правилам (т.е. и MPU тоже будет временно отключен);
- либо никакого стирания флешь нет (опять же MPU тут не поможет).
-
В 26.03.2023 в 23:02, jcxz сказал:
Я вам в самом начале дал дельный совет: Задействовать MPU для обнаружения несанкционированных обращений к регистрам программирования флешь.
А как это принципиально поможет? Перед корректной записью флешь нужно временно регион MPU отключать, поработать, а затем включать?
Что помешает коду с ошибкой на этапе "поработать" наломать дров при выключенном MPU?
-
В 26.03.2023 в 22:52, fpga_student сказал:
Там есть проблемы, но по статистике не сходится имхо никак.
У Заказчика всяко может быть. Например, он изменяет какие-то уставки, которые в реальном времени щелкают каким-нить мощным контактором, от помехи которого МК сбоит - статистика в этом случае меняется кардинально.
В 26.03.2023 в 22:56, fpga_student сказал:Вы злы к моему программисту. Он чрезвычайно хорош. Единственный из 15 студентов за 5 лет, кто с первого дня меня консультировал) Драйверы ядра под линукс, техническое зрение, сейчас нейросети. Он великолепный, просто там действительно большая хрень, которой уделялось не так много времени как было нужно.
Самое простое - сделайте индикацию HardFault.
-
В 26.03.2023 в 22:50, fpga_student сказал:
Прошивка огромная она едва влазит в память. Места на 2 копии нет.
Кста, внешняя SPI флешка под IMAGE - рулит.
-
В 26.03.2023 в 22:43, jcxz сказал:
Настройки в процессе работы устройства изменяются? Как реализовано изменение? Безопасно? Или при внезапной перезагрузке они могут слететь? Может тогда просто это у вас и происходит?
Кста, подергать питание в моменты изменения настроек - это первое, что нужно попробовать для удачного окирпичивания на столе.
В 26.03.2023 в 22:48, jcxz сказал:SPI? Это очень медленно.
Дык, кирпич никуда и не торопится - это по сути канал с внешним миром для выгрузки хоть какого-то дампа
-
В 26.03.2023 в 22:41, fpga_student сказал:
Файл с SD. Нет никакого канала.
Я для таких случаев всегда использую копию обновления во флешь. Т.е. обнаруживаю корректное обновление на карте, если требуется обновить, то записываю его в регион IMAGE во флешь МК, делаю перезагрузку. Загрузчик видит корректное обновление в IMAGE, принимает решение обновить APPLICATION, стирает APPLICATION, расшифровывает IMAGE и копирует его в APPLICATION, проверяет корректность записи и ставит штамп с CRC32, если все ок. После этого APPLICATION можно запускать. И если когда-то APPLICATION поплохеет, всегда есть копия в IMAGE для автоматического восстановления.
-
1
-
-
В 26.03.2023 в 22:38, fpga_student сказал:
Я сказал FRAM, она работает на 40МГц. Достаточно быстро, чтобы сильно не гадить ПО, кроме того есть аппаратные очереди. Записанный стек позволит хотя бы понять, в одном и том же месте происходит сбой или в разных, если в одном то хотя бы укажет направление куда смотреть.
Видимо теперь будем, спасибо
Если у вас нету отладочной консоли (UART), то во внешнюю память можно сбрасывать стек, извлеченный из недр HardFault, а дальше - хоть ногодрыгом кинуть значение регистров и стека во внешнюю память.
-
Кста, у меня загрузчик даже исправное приложение запускает не сразу, а через 200мс (быстрый старт) - 5000мс (медленный старт, после NVIC_SystemReset), чтоб можно было к нему как-то подключиться.
У вас каким образом выполняется обновление? По какому каналу?
-
Если есть свободный пин, то можно на него привесить очистку памяти настроек и запись туда заводских значений. Или командой загрузчика убивать настройки до заводских.
В 26.03.2023 в 22:35, fpga_student сказал:бывалый. Светодиод я поставил)) опыт есть. А вот программист статусы так подробно не прописал. Там и так несколько мегабайт прошивка, я не стал прессовать(
Ну, для HardFault можно навесить спец индикацию - это не сложно, а кучу вопросов отбросит.
-
У меня в изделии всегда есть зеленый светодиод РАБОТА, по миганиям которого можно судить о состоянии контроллера. В обычной работе мигает раз в секунду со скважностью 2. В загрузчике скважность значительно меньше. При сбое кварца - работает от внутреннего RC-генератора и мигает чаще. При активном обновлении еще чаще. При глобальном фэйле - SOS морзянкой передает и т.п.
-
В 26.03.2023 в 22:19, fpga_student сказал:
В памяти проца несколько рабочих областей. 1. Загрузчик. 2. Основная программа. 3. Область хранения настроек ПО.
Сравнить ВСЕ там не очень просто.
У меня тоже есть все эти регионы памяти. Но приложение перед запуском проходит контроль CRC32, и при несовпадении сидим в загрузчике и ждем корректное обновление.
Настройки тоже имеют локальную контрольную сумму и ищется последняя запись с правильной суммой - она будет содержать настройки.
Если ни одной записи не найдется, то загружаются настройки по-умолчанию.
В 26.03.2023 в 22:19, fpga_student сказал:А что такое RDP ?
Защита от чтения.
В 26.03.2023 в 22:19, fpga_student сказал:В версию повреждения флэша не укладывается оживание платы после полной перезаписи.
Можно записать некорректные настройки в область хранения настроек ПО. Затем эти "плохие" значения спровоцируют HardFault, например.
Все - пока настройки не почистите плата будет всякий раз кирпичица.
-
Ни разу не видел на STM32 проблем с порчей флешь. А изделий производится тысячами в год. Уверен, во флешь все хорошо, а МК прохлаждается в районе HF.
-
В 26.03.2023 в 22:04, fpga_student сказал:
Но тогда остается вопрос, с чего мог бы убиться флешь ?
Кто знает, а можно ли, запустив заводской загрузчик, сравнить содержимое флешь с исходным файлом (при установленной RDP)?
В 26.03.2023 в 22:17, adnega сказал:Кто знает, а можно ли, запустив заводской загрузчик, сравнить содержимое флешь с исходным файлом (при установленной RDP)?
Отбой - нельзя.
-
В 22.03.2023 в 08:41, nanorobot сказал:
Осваиваю KiCad чисто потому, что он есть под линуксом в отличии от AD .. 🙂 Возможно ли в Footprint editor создать through-hole pad (padstack) с различными площадками на верхней и нижней меди. Скажем на верхней круглая и маленькая, а на нижней прямоугольная и большая. Ну и маску тоже соответствующую, разумеется. У меня что то не выходит...
Как вариант, можно маленький пад сделать с нужными параметрами отверстия, а с другой стороны добавить большой SMD-пад.
-
В 15.03.2023 в 01:27, Obam сказал:
И турки вроде ж буквально на днях завязали с || импортом? "Вдруг" дошло до них, что себе дороже будет...
Говорят, это временный технический сбой ПО - типа, уже починили.
-
В 20.02.2023 в 07:14, dimir сказал:
А приём как вы выполняете? По захвату?Или по переполнению?Вобще таймер в Stm32 имеет большие возможности нежели в avr.
По фронту сигнала на втором канале в CCR2 попадает длительность низкого уровня. Затем при переполнении смотрю что там лежит.
Например, стартовый импульс и импульс присутствия дают два фронта на RX. И если устройств на шине нет, то будет маленькое значение CCR2 (длительность импульса присутствия),
а если есть хоть одно, то CCR2 будет гораздо больше (длительность импульса присутствия + длительность паузы/реакции датчиков + длительность самого долгого импульса присутствия).
-
В 19.02.2023 в 23:14, dimir сказал:
Но ведь настройка захвата состоит из двух битов 1 и 0.Если две единички то вроде не попадаем туда куда вы говорите.Что настройка захвата не настроена.
А где у меня две единички? В поле CC2S у меня пишется 1 - это 01.
В 19.02.2023 в 23:14, dimir сказал:Да и на рисунке нарисован захват с первого канала а не со второго.
Рисунок - это ответ на ваш вопрос "а можно ли с одного пина и прием и передачу". Я нарисовал, что можно. Но в коде у меня два пина задействованы, т.к. первый канал управляет транзистором.
В 19.02.2023 в 23:14, dimir сказал:И всё таки мне не понятно hig active или lov?Там 3 бита 2 1 0.
Сначала принудительно устанавливаем OC1 записью "101: Force active level". Затем настраиваем "010: Set channel 1 to inactive level on match" и запускаем одиночный цикл. В момент сравнения OC1 сбросится.
В 19.02.2023 в 23:14, dimir сказал:Так перывание по захвату или по сравнению?Если по захвату то флаги не те.
Прерывание по переполнению таймера в режиме одиночного запуска.
-
В 19.02.2023 в 17:37, dimir сказал:
А это в одиночном режиме?
Да - одиночный импульс.
В 19.02.2023 в 18:07, dimir сказал:И ещё бит интирисует.Я вижу один канал а где другой?
TIM_CCMR1_OC1M - задает тип сравнения для первого канала, TIM_CCMR1_CC2S - задает вход для захвата второго канала (1 = IC2 is mapped on TI2).
LDM/STM в inline asm
в IAR
Опубликовано · Пожаловаться
А так получится (указать явно имена регистров)?
Это довольно опасные инструкции. Например, у вас могут быть данные не выровненные - тогда их нельзя использовать.