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

adnega

Свой
  • Постов

    3 603
  • Зарегистрирован

  • Посещение

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

    3

Сообщения, опубликованные adnega


  1. А так получится (указать явно имена регистров)?

    void vPortStartFirstTask( void )
    {
    	__asm volatile(
    					" ldr r0, =0xE000ED08 	\n" /* Use the NVIC offset register to locate the stack. */
    					" ldr r0, [r0] 			\n"
    					" ldr r0, [r0] 			\n"
    					" msr msp, r0			\n" /* Set the msp back to the start of the stack. */
    					" cpsie i				\n" /* Globally enable interrupts. */
    					" svc 0					\n" /* System call to start first task. */
    					" nop					\n"
    				);
    }

     

    В 12.04.2023 в 13:47, jcxz сказал:

    LDM/STM. Вообще про них не знает как будто! :cray: 

    Это довольно опасные инструкции. Например, у вас могут быть данные не выровненные - тогда их нельзя использовать.

  2. В 05.04.2023 в 12:01, yuriger сказал:

    Пришли фото своей красивой пайки к сантехническому бочонку.

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

  3. В 31.03.2023 в 21:42, romas2010 сказал:

    Такая же петрушка. F407 проц. По неизвестным причинам стирается сектор с самим загрузчиком. Непонятно, что происходит, но факт на лице. 

    А как вы поняли что стирается именно нулевой сектор?

  4. В 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 источников прерываний, поэтому хочу некоторые источники опрашивать

    Сомнительное решение.

  5. В 26.03.2023 в 23:15, jcxz сказал:

    Например то, что очевидно код этот не пишет во флешь месяцами непрерывно (у ТС-а сбои происходят через месяц или больше работы). А только кратковременно. А значит вероятность что какой-то баг случается и что момент его возникновения совпадёт с миллисекундами штатного обращения к флешь - ничтожно мал.

    Чтоб что-то сделать с флешь нужно как минимум разлочить работу с ней. По мне так это тоже самое, что MPU разлочить. Да, в нештатной ситуации MPU может дать дополнительную информацию о проблеме, а неразлоченный контроллер флешь (зависнет?) не даст эту самую флешь повредить. А так как ТС уверяет, что флешь стирается даже с локом сектора, то:

    - выполняется полный код снятия защиты с сектора, стирание сектора, и уж точно разблокирование контроллера флешь по всем правилам (т.е. и MPU тоже будет временно отключен);

    - либо никакого стирания флешь нет (опять же MPU тут не поможет).

  6. В 26.03.2023 в 23:02, jcxz сказал:

    Я вам в самом начале дал дельный совет: Задействовать MPU для обнаружения несанкционированных обращений к регистрам программирования флешь.

    А как это принципиально поможет? Перед корректной записью флешь нужно временно регион MPU отключать, поработать, а затем включать?

    Что помешает коду с ошибкой на этапе "поработать" наломать дров при выключенном MPU?

  7. В 26.03.2023 в 22:52, fpga_student сказал:

    Там есть проблемы, но по статистике не сходится имхо никак.

    У Заказчика всяко может быть. Например, он изменяет какие-то уставки, которые в реальном времени щелкают каким-нить мощным контактором, от помехи которого МК сбоит - статистика в этом случае меняется кардинально.

    В 26.03.2023 в 22:56, fpga_student сказал:

    Вы злы к моему программисту. Он чрезвычайно хорош. Единственный из 15 студентов за 5 лет, кто с первого дня меня консультировал) Драйверы ядра под линукс, техническое зрение, сейчас нейросети. Он великолепный, просто там действительно большая хрень, которой уделялось не так много времени как было нужно.

    Самое простое - сделайте индикацию HardFault.

  8. В 26.03.2023 в 22:43, jcxz сказал:

    Настройки в процессе работы устройства изменяются? Как реализовано изменение? Безопасно? Или при внезапной перезагрузке они могут слететь? Может тогда просто это у вас и происходит?

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

    В 26.03.2023 в 22:48, jcxz сказал:

    SPI? Это очень медленно.

    Дык, кирпич никуда и не торопится - это по сути канал с внешним миром для выгрузки хоть какого-то дампа

  9. В 26.03.2023 в 22:41, fpga_student сказал:

    Файл с SD. Нет никакого канала.

    Я для таких случаев всегда использую копию обновления во флешь. Т.е. обнаруживаю корректное обновление на карте, если требуется обновить, то записываю его в регион IMAGE во флешь МК, делаю перезагрузку. Загрузчик видит корректное обновление в IMAGE, принимает решение обновить APPLICATION, стирает APPLICATION, расшифровывает IMAGE и копирует его в APPLICATION, проверяет корректность записи и ставит штамп с CRC32, если все ок. После этого APPLICATION можно запускать. И если когда-то APPLICATION поплохеет, всегда есть копия в IMAGE для автоматического восстановления.

    • Upvote 1
  10. В 26.03.2023 в 22:38, fpga_student сказал:

    Я сказал FRAM, она работает на 40МГц. Достаточно быстро, чтобы сильно не гадить ПО, кроме того есть аппаратные очереди. Записанный стек позволит хотя бы понять, в одном и том же месте происходит сбой или в разных, если в одном то хотя бы укажет направление куда смотреть.

    Видимо теперь будем, спасибо

    Если у вас нету отладочной консоли (UART), то во внешнюю память можно сбрасывать стек, извлеченный из недр HardFault, а дальше - хоть ногодрыгом кинуть значение регистров и стека во внешнюю память.

  11. Кста, у меня загрузчик даже исправное приложение запускает не сразу, а через 200мс (быстрый старт) - 5000мс (медленный старт, после NVIC_SystemReset), чтоб можно было к нему как-то подключиться.

    У вас каким образом выполняется обновление? По какому каналу?

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

    В 26.03.2023 в 22:35, fpga_student сказал:

    бывалый. Светодиод я поставил)) опыт есть. А вот программист статусы так подробно не прописал. Там и так несколько мегабайт прошивка, я не стал прессовать(

    Ну, для HardFault можно навесить спец индикацию - это не сложно, а кучу вопросов отбросит.

  13. У меня в изделии всегда есть зеленый светодиод РАБОТА, по миганиям которого можно судить о состоянии контроллера. В обычной работе мигает раз в секунду со скважностью 2. В загрузчике скважность значительно меньше. При сбое кварца - работает от внутреннего RC-генератора и мигает чаще. При активном обновлении еще чаще. При глобальном фэйле - SOS морзянкой передает и т.п.

  14. В 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, например.

    Все - пока настройки не почистите плата будет всякий раз кирпичица.

     

    image.thumb.png.133dffe81c28a0f45f99ae7b94d7fd36.png

  15. В 26.03.2023 в 22:04, fpga_student сказал:

    Но тогда остается вопрос, с чего мог бы убиться флешь ?

    Кто знает, а можно ли, запустив заводской загрузчик, сравнить содержимое флешь с исходным файлом (при установленной RDP)?

    В 26.03.2023 в 22:17, adnega сказал:

    Кто знает, а можно ли, запустив заводской загрузчик, сравнить содержимое флешь с исходным файлом (при установленной RDP)?

    Отбой - нельзя.

  16. В 22.03.2023 в 08:41, nanorobot сказал:

    Осваиваю KiCad чисто потому, что он есть под линуксом в отличии от AD .. 🙂    Возможно ли в  Footprint editor создать through-hole pad (padstack) с различными площадками на верхней и нижней меди. Скажем на верхней круглая и маленькая, а на нижней прямоугольная и большая. Ну и маску тоже соответствующую, разумеется.  У меня что то не выходит...

     

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

  17. В 15.03.2023 в 01:27, Obam сказал:

    И турки вроде ж буквально на днях завязали с || импортом? "Вдруг" дошло до них, что себе дороже будет...

    Говорят, это временный технический сбой ПО - типа, уже починили.

  18. В 20.02.2023 в 07:14, dimir сказал:

    А приём как вы выполняете? По захвату?Или по переполнению?Вобще таймер в Stm32 имеет большие возможности нежели в avr.

    По фронту сигнала на втором канале в CCR2 попадает длительность низкого уровня. Затем при переполнении смотрю что там лежит.

    Например, стартовый импульс и импульс присутствия дают два фронта на RX. И если устройств на шине нет, то будет маленькое значение CCR2 (длительность импульса присутствия),

    а если есть хоть одно, то CCR2 будет гораздо больше (длительность импульса присутствия + длительность паузы/реакции датчиков + длительность самого долгого импульса присутствия).

  19. В 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 сказал:

    Так перывание по захвату или по сравнению?Если по захвату то флаги не те.

    Прерывание по переполнению таймера в режиме одиночного запуска.

  20. В 19.02.2023 в 17:37, dimir сказал:

    А это в одиночном  режиме?

    Да - одиночный импульс.

    В 19.02.2023 в 18:07, dimir сказал:

    И ещё бит интирисует.Я вижу один канал а где другой?

    TIM_CCMR1_OC1M - задает тип сравнения для первого канала, TIM_CCMR1_CC2S - задает вход для захвата второго канала (1 = IC2 is mapped on TI2).

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