WHILE 0 17 октября, 2018 Опубликовано 17 октября, 2018 · Жалоба Здравствуйте. Разбираюсь с отладкой на визнетовском контроллере W7500p. Внутри у него Cortex MO плюс железный ip-движок. Сейчас имею ситуацию, когда контроллер сначала попадает в обработчик HardFault. Там программа висит в вечном цикле, пока не сработает собака. После этого начинается процесс инициализации камня, в середине которой я попадаю уже в обработчик NMI, где опять вишу до срабатывания собаки и далее снова инит и снова попадание в обработчик NMI. Железный ресет при этом не помогает - так-же сваливаюсь в NMI.Помогает только передерг питания. Почему я первый раз падаю в HardFault я примерно догадываюсь где собака порылась. Но что надо сделать, чтобы избежать зацикливания? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Kabdim 0 17 октября, 2018 Опубликовано 17 октября, 2018 · Жалоба Периферия дергает NMI? Подозреваю что нужно разобраться почему хард фолт появляется. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
WHILE 0 17 октября, 2018 Опубликовано 17 октября, 2018 · Жалоба почему нашел. Писал за границы массива. Может при хардфаулте руками память обнулять? А почему NMI возникает? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 172 17 октября, 2018 Опубликовано 17 октября, 2018 · Жалоба 3 часа назад, KRTPC сказал: А почему NMI возникает? Видимо потому, что Вы его разрешили. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
WHILE 0 17 октября, 2018 Опубликовано 17 октября, 2018 · Жалоба Эээ, мамой клянусь, не разрешал ! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 117 17 октября, 2018 Опубликовано 17 октября, 2018 · Жалоба 1 час назад, jcxz сказал: Видимо потому, что Вы его разрешили. Разрешили? NMI? Non-maskable interrupt? Но как??? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 172 17 октября, 2018 Опубликовано 17 октября, 2018 · Жалоба 53 минуты назад, Сергей Борщ сказал: Разрешили? NMI? Non-maskable interrupt? Но как??? А что вызывает удивление? "Как" - объяснит юзермануал на МК. Не знаю как в W7500, но обычно в МК имеется некий периферийный регистр, позволяющий разрешать/запрещать NMI. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 172 17 октября, 2018 Опубликовано 17 октября, 2018 · Жалоба 1 час назад, KRTPC сказал: Эээ, мамой клянусь, не разрешал ! Скачиваем мануал на W7500P, смотрим: На векторе NMI сидит прерывание от WDT. Находим регистр Watchdog timer Control Register(WDTControl). Находим в нём поле: IEN – Interrupt Enable. 0 : Disable the counter and the interrupt. 1 : Enable the counter and the interrupt. Reloads the counter from the value in WDTLoad, after previously being disabled. Видим, что значение регистра после reset == 0x0000_0000. Видимо единичку в младший бит папа записал.... ;) PS: На всю процедуру скачивания мануала и поиска в нём потребовалось около 5 минут. Много меньше чем для написания в форум.... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 117 17 октября, 2018 Опубликовано 17 октября, 2018 · Жалоба 3 часа назад, jcxz сказал: но обычно в МК имеется некий периферийный регистр, позволяющий разрешать/запрещать NMI То есть "non-maskable", т.е. "незапрещаемое" у него в названии просто для красного словца? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 172 17 октября, 2018 Опубликовано 17 октября, 2018 · Жалоба 23 минуты назад, Сергей Борщ сказал: То есть "non-maskable", т.е. "незапрещаемое" у него в названии просто для красного словца? NMI - немаскируемо средствами NVIC. Сам источник NMI никто не мешает конфигурить (разрешать, запрещать, назначать источник(-и) и т.п.). Посмотрите периферию любого МК на Cortex-M где есть NMI. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 117 17 октября, 2018 Опубликовано 17 октября, 2018 · Жалоба 38 минут назад, jcxz сказал: Сам источник NMI никто не мешает конфигурить Про источник речи не было. Вы писали про разрешение самого NMI. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
WHILE 0 18 октября, 2018 Опубликовано 18 октября, 2018 · Жалоба 10 часов назад, jcxz сказал: Скачиваем мануал на W7500P, смотрим: На векторе NMI сидит прерывание от WDT. Находим регистр Watchdog timer Control Register(WDTControl). Находим в нём поле: IEN – Interrupt Enable. 0 : Disable the counter and the interrupt. 1 : Enable the counter and the interrupt. Reloads the counter from the value in WDTLoad, after previously being disabled. Видим, что значение регистра после reset == 0x0000_0000. Видимо единичку в младший бит папа записал.... ;) PS: На всю процедуру скачивания мануала и поиска в нём потребовалось около 5 минут. Много меньше чем для написания в форум.... Да, посыпаю голову пеплом...(тут должен быть смайлик). На NMI висит собака и при ресете она остается разрешенной. Решение- в начале инициализации запретить watchdog. Спасибо. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 172 18 октября, 2018 Опубликовано 18 октября, 2018 · Жалоба 7 часов назад, Сергей Борщ сказал: Про источник речи не было. Вы писали про разрешение самого NMI. Это оно самое и есть. 1 час назад, KRTPC сказал: Решение- в начале инициализации запретить watchdog. Скорее - "не разрешать". Потому что он по дефолту - запрещён. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
WHILE 0 18 октября, 2018 Опубликовано 18 октября, 2018 · Жалоба 5 минут назад, jcxz сказал: Это оно самое и есть. Скорее - "не разрешать". Потому что он по дефолту - запрещён. Ну как не разрешать...Вы работаете без собаки? А вдруг тяжелая космическая частица сотрет бит в важном регистре (тут опять должен быть смайлик). Немного пояснения. У меня крутится scmrtos. Собаку я включаю перед запуском бесконечного цикла в задаче с наименьшим приоритетоми в этой-же задаче в самом конце сбрасываю ее. Как выяснилось, при ресете собака остается включенной, а инициализация у меня длинная... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 172 18 октября, 2018 Опубликовано 18 октября, 2018 · Жалоба 24 минуты назад, KRTPC сказал: Ну как не разрешать...Вы работаете без собаки? А вдруг тяжелая космическая частица сотрет бит в важном регистре (тут опять должен быть смайлик). Я работаю с WDT. Именно с WDT (т.е. - внешним). А вот Вы - без WDT. Так как внутренний WDT как раз бессилен против космических частиц и пр. случайных внешних явлений. Он пригоден разве что для оживления девайса после программных багов. Надеюсь не нужно объяснять - почему. 24 минуты назад, KRTPC сказал: У меня крутится scmrtos. Собаку я включаю перед запуском бесконечного цикла в задаче с наименьшим приоритетоми в этой-же задаче в самом конце сбрасываю ее. Как выяснилось, при ресете собака остается включенной, а инициализация у меня длинная... Так замените здесь WDT на обычный таймер. Или контролируйте время в уже тикающем ISR Systick. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться