scifi 1 14 сентября, 2018 Опубликовано 14 сентября, 2018 · Жалоба ОЗУ бывают разные, в том числе внешние Будьте любезны, дайте ссылочку на внешнее ОЗУ с сигналом сброса. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Forger 17 14 сентября, 2018 Опубликовано 14 сентября, 2018 · Жалоба Будьте любезны, дайте ссылочку на внешнее ОЗУ с сигналом сброса. https://www.maximintegrated.com/en/products...cts/DS1200.html Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dimka76 42 14 сентября, 2018 Опубликовано 14 сентября, 2018 · Жалоба Предлагаю другой план. Устанавливаем некий флаг "перевести ноги и зависнуть", вызываем программный сброс. Программа при старте проверяет условие "сброс == программный && флаг == установлен". Ну и при выполнении условия делает что надо. Так проще. По-моему проще в обработчике исключения __set_MSP(TOP_RAM_ADDR); Дальше дернуть ногой через функцию - она уже есть и активно используется в разных местах колда. И зависнуть. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 63 14 сентября, 2018 Опубликовано 14 сентября, 2018 · Жалоба https://www.maximintegrated.com/en/products...cts/DS1200.html Сказали бы тогда, что любая DDR3+ подходит под определение "внешнее ОЗУ с сигналом сброса", чем людей экзотикой пугать. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dimka76 42 14 сентября, 2018 Опубликовано 14 сентября, 2018 · Жалоба Да вся эта тема - по сути баян, Тема не как реализовывать обработчик исключений, а насколько безопасно просто так из него вызывать функции )))) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Forger 17 14 сентября, 2018 Опубликовано 14 сентября, 2018 · Жалоба чем людей экзотикой пугать. Ну, какой был вопрос, такой же и вышел ответ ;) Экзотика - это нужда в бытовых МК в обнулении содержимого ОЗУ после сброса. Вот есть мысля: при исключении писать в определенную область ОЗУ отладочную информацию, делать программный сброс (в STM32 типа NVIC Reset), а в коде при старте каждый раз проверять содержимое этой области. Отличить полезную инфу от мусора в ОЗУ можно с помощью примитивных "маркеров" или элементарной контрольной суммы. Разумеется, эти данные нужно объявлять с соотв. квалификаторами или в соотв. не стираемой при старте секции. Если есть "чё", то писать это уже в реальный энергонезависимый журнал (на флэшку, sd-карточкуи т.п.) и жить дальше до очередного HF )) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 63 14 сентября, 2018 Опубликовано 14 сентября, 2018 · Жалоба Вот есть мысля: при исключении писать в определенную область ОЗУ отладочную информацию, делать программный сброс (в STM32 типа NVIC Reset), а в коде при старте каждый раз проверять содержимое этой области. Много лет использую именно такой механизм. Хорошее, годное решение. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AlexandrY 3 15 сентября, 2018 Опубликовано 15 сентября, 2018 · Жалоба Тема не как реализовывать обработчик исключений, а насколько безопасно просто так из него вызывать функции )))) Периферия после сбоя может быть в отключенном из адресного пространства состоянии. Обычными "функциями" я бы пользоваться не рисковал. Некоторые прерывания, например от WDOG, в принципе вам дают всего сотню тактов до сброса. Поэтому только прямое обращение к регистрам. Кстати, сбой и последующий reset может привести и к переходу на код в Bootloader-е, тогда и на RAM надеяться нельзя. Практичней думать о таких ситуациях учитывая бутлодер. А он может быть и в ROM-е и даже не документирован. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 184 15 сентября, 2018 Опубликовано 15 сентября, 2018 · Жалоба У меня план такой. При попадании в исключительную ситуацию перевести некоторые ноги МК в определенное состояние. И после этого зависнуть в этом прерывании навсегда. А вот для управления нужными ногами у меня есть свои функции. Выполняете CPSID I, CPSID F и после этого спокойно вызываете свои функции и зависаете. Только эти "свои функции" должны быть реентерабельны. Честно говоря, не знаю семейств, где бы сброс обнулял содержимое ОЗУ. Хотя вполне допускаю, что и такое встречается. Не обнуляется, но затирается часть - у многих. Тема не как реализовывать обработчик исключений, а насколько безопасно просто так из него вызывать функции )))) Сам вызов безопасен. А почему он должен быть не безопасен? Только функция обязательно должна быть реентерабельной. Так как исключение может произойти в любой точке программы. По-моему проще в обработчике исключения __set_MSP(TOP_RAM_ADDR); А вот так делать - как раз не безопасно. Если уж и переустанавливать указатель стека, то на вершину существующего выделенного статически стека. Периферия после сбоя может быть в отключенном из адресного пространства состоянии. Это на каком-же из МК (соответствующих заголовку темы) такое делается? :wacko: Вот есть мысля: при исключении писать в определенную область ОЗУ отладочную информацию, делать программный сброс (в STM32 типа NVIC Reset), а в коде при старте каждый раз проверять содержимое этой области. Отличить полезную инфу от мусора в ОЗУ можно с помощью примитивных "маркеров" или элементарной контрольной суммы. Разумеется, эти данные нужно объявлять с соотв. квалификаторами или в соотв. не стираемой при старте секции. Лучше использовать соответствующий периферийный регистр, где флажками указан тип сброса (POR, внешняя нога, WDT, программный, ...) и не возиться с флагами в ОЗУ, которые нужно ещё и правильно расположить. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
DASM 0 15 сентября, 2018 Опубликовано 15 сентября, 2018 · Жалоба жирные вы тут.. скомпилировал с -fexception, получил 86К кода хелло ворд на О3, приуныл и забил Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Forger 17 15 сентября, 2018 Опубликовано 15 сентября, 2018 · Жалоба Лучше использовать соответствующий периферийный регистр, где флажками указан тип сброса (POR, внешняя нога, WDT, программный, ...) и не возиться с флагами в ОЗУ, которые нужно ещё и правильно расположить. Аппаратные флажки-то - это само собой. Но имелось ввиду проверять валидность (актуальность) самих данных, дабы не спутать их с мусором в ОЗУ и не записать это мусор в журнал. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dimka76 42 16 сентября, 2018 Опубликовано 16 сентября, 2018 · Жалоба Сам вызов безопасен. А почему он должен быть не безопасен? Например, как писали выше, вот поэтому Если такое исключение возникло именно из-за проблем со стеком, то логично предположить, что сразу пользоваться стеком не стоит (точнее, таким указателем стека). Выполняете CPSID I, CPSID F и после этого спокойно вызываете свои функции и зависаете Я так понимаю это команды запрещения прерываний и исключительных ситуаций. А зачем они в обработчике исключений ? Их же и так никто прервать не может. Только функция обязательно должна быть реентерабельной. Мои функции дергания норкой таковыми и являются. Просто запись в регистр порта ввода вывода. Если уж и переустанавливать указатель стека, то на вершину существующего выделенного статически стека. Я в своем сообщении это и имел ввиду, просто наверное некорректно изъяснился. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 184 17 сентября, 2018 Опубликовано 17 сентября, 2018 · Жалоба Например, как писали выше, вот поэтому В Cortex-M при вызове функции стек не используется. Внутри функции он конечно может быть использован, но только если она вызывает другие функции или имеет много локальных переменных. Но Вы пишете, что внутри только - дёргание ногой. Тогда - о каком стеке вообще речь? Я так понимаю это команды запрещения прерываний и исключительных ситуаций. А зачем они в обработчике исключений ? Их же и так никто прервать не может. Это - запрет и разрешение прерываний. Не могут прервать только исключения с приоритетом ниже. Мои функции дергания норкой таковыми и являются. Просто запись в регистр порта ввода вывода. А если это исключение произошло до того как сконфигурили ногу (которой хотите дёрнуть) на вывод? Просто повиснете навсегда? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dimka76 42 18 сентября, 2018 Опубликовано 18 сентября, 2018 · Жалоба А если это исключение произошло до того как сконфигурили ногу (которой хотите дёрнуть) на вывод? Просто повиснете навсегда? Это ножка включает/выключает внешнее устройство. Если ножка не сконфигурирована, то устройство выключено. А в обработчике исключения я хочу это внешнее устройство выключать. Значит все нормально будет ))) В принципе, я получил ответ на свои вопросы. Все откликнувшимся спасибо !!! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
DASM 0 20 сентября, 2018 Опубликовано 20 сентября, 2018 · Жалоба В Cortex-M при вызове функции стек не используется. а как он вызовет он передаст ,к примеру 35 аргументов в нее? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться