• Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Зависание и сброс по WDT при срабатывании прерывания от GPIO

x8973

Member
таймер и создает этот бесконечный цикл.
поставьте таймер в этом коде.
Попробую вечером, отпишусь.
Я не работаю в Arduino, и вообще с ESP8266 уже несколько лет.
Я честно очень рад за вас, но давайте вы все же не будете вести себя, словно вы тут царь и бог, а все остальные - чернь недостойная. Это как минимум непрофессионально. Можно было просто сказать, что чистой СДК нет под рукой :) В конце концов, это была просто просьба, ни к чему не обязывающая.

Я подозреваю, что с 2015-го года СДК претерпел массу изменений, возможно, появились некие нюансы использования прерываний. Хотя в документации я ничего такого не нашел.
 

pvvx

Активный участник сообщества
Ах, да,Вы же луа не знаете... За пять лет могли бы выучить,
Это отмазка у nikolz, он не смог ответить на заданных ранее три простых вопроса:
  • А кто по вашему запретит повторное прерывание пока CPU сохраняет регистры в процедуре старта прерывания (и она толще чем весь код прерывания)? Стек тогда всё равно переполнится.
  • А включены или нет повторные прерывания в контроллере ESP8266?
  • Как работает котроллер GPIO с режимами бит прерываний?
 

pvvx

Активный участник сообщества
Я честно очень рад за вас, но давайте вы все же не будете вести себя, словно вы тут царь и бог, а все остальные - чернь недостойная. Это как минимум непрофессионально. Можно было просто сказать, что чистой СДК нет под рукой :) В конце концов, это была просто просьба, ни к чему не обязывающая.
А рад за вас, что вы не можете определиться - вам четко сказано, что специально, лично, для вас была вытащена из коробки ESP8266 и проведены итоги испытаний, но вам и этого мало.
Вас тоже просто попросил о малом... Но вы требуете ещё и ещё.
Таких называют хамло. :p
Я подозреваю, что с 2015-го года СДК претерпел массу изменений, возможно, появились некие нюансы использования прерываний. Хотя в документации я ничего такого не нашел.
О чем тогда базарите?
 

x8973

Member
Вас тоже просто попросил о малом...
Прошу прощения, о чем вы меня просили? Я сейчас пересмотрел весь тред, и не нашел вашей просьбы - видать, старею, деменция, ага.
Но вы требуете ещё и ещё
Я не требовал, а просил. Это разные вещи. Просьба предполагает вероятный отказ, и я был готов к отказу. Адекватному.
О чем тогда базарите?
Я, как вы изволили выразиться, "базарю" о том, что судя по отсутствию в вашем "скетче" разметки партиций, ваш "компилятор Ардуино" запихивает в бинарник кучу своего мусора, среди которого эта разметка есть. И потому неудивительно, что ваш результат отличается от моего.

Судя по используемым вами словам, хамло здесь вы.
 

pvvx

Активный участник сообщества
Прошу прощения, о чем вы меня просили? Я сейчас пересмотрел весь тред, и не нашел вашей просьбы - видать, старею, деменция, ага.
Похоже, но может и хуже - в треде:
Вы просите ещё поставить какой-то давно ненужный мне SDK? Я думаю, что это будет платно для вас, но оплата не мне... Перечислите на счет форума что-нить - тогда подумаю. :)
Я не требовал, а просил. Это разные вещи. Просьба предполагает вероятный отказ, и я был готов к отказу. Адекватному.
Дык вам вперед, не дожидаясь никаких ваших усилий написал ответ с полным примером:
Вообще-то код скопирован из древних забав с ESP8266 (из web-свалки из примера оверлея):
Я, как вы изволили выразиться, "базарю" о том, что судя по отсутствию в вашем "скетче" разметки партиций, ваш "компилятор Ардуино" запихивает в бинарник кучу своего мусора, среди которого эта разметка есть. И потому неудивительно, что ваш результат отличается от моего.

Судя по используемым вами словам, хамло здесь вы.
Именно базарите.
И ответ вам был дан
Значит дело не в бобине... а в вашем отсутствующем коде.
Может вам указать и на код входа в прерывание? Он есть там-же, по ранее указанной ссылке на web-свалку.

Я подозреваю, что с 2015-го года СДК претерпел массу изменений, возможно, появились некие нюансы использования прерываний. Хотя в документации я ничего такого не нашел.
И не найдете. Изменения в векторах прерываний были - просто перенесли таблицу векторов из ROM, т.к. писать код китайцы в Espressif не умеют и сотворили кучу ошибок в ROM, но перенесли таблицу не из-за глюков, а по тому что пор другому не умеют...
Более полной информации по этому вы не найдете и не дождётесь, т.к. я вам её не дам - зажму.
И SDK в Arduino используется самый последний и аналогичный вашему.

Итог: Хамло вываливает свой базар по причине безграмотности в программировании и нежелании что-то читать, а так-же воспринять что ему пишут.
 

x8973

Member
Собственно, вытершись от ушата помоев, вылитых на меня товарищем pvvx, методично проверил все полученные советы.
- Глобальный запрет прерываний на входе в хэндлер: не помог.
- Добавление таймера os_timer_t с миганием светодиодом: не помогло.
- Добавление аппаратного таймера отсюда
В соседней теме есть всё...
не помогло.
- Реализация кода из "web-свалки" тоже не заработала.
Ни за что не поверю, что вход в прерывание может выполняться дольше трех секунд, что аж ватчдог успевает сработать. Это получается не прерывание, а хрень какая-то. Скорее поверю в то, что где-то в глубинах программы по какой-то причине происходит необработанный эксепшен.
Давно бы уже реализовал свой гребаный wifi-звонок на опросе пинов внутри таймера, так нет же, дернуло.
 

x8973

Member
Обнаружил одну крайне занимательную особенность, которая заставила меня усомниться в собственном психическом здоровье :)
Контроллер зависает и перезагружается, даже если не включать прерывания от GPIO. То есть ножки просто настраиваются как входы. Похоже, у меня действительно что-то не так либо с головой, либо с руками, либо и то и другое. Но 10 лет возни с микроконтроллерами говорят, что ничего не бывает само собой, так что буду разбираться дальше.
 

A_D

Active member
Обнаружил одну крайне занимательную особенность, которая заставила меня усомниться в собственном психическом здоровье :)
Контроллер зависает и перезагружается, даже если не включать прерывания от GPIO. То есть ножки просто настраиваются как входы. Похоже, у меня действительно что-то не так либо с головой, либо с руками, либо и то и другое. Но 10 лет возни с микроконтроллерами говорят, что ничего не бывает само собой, так что буду разбираться дальше.
Покажите схему и фото того, как это собрано у вас, возможно, там есть банальная ошибка...
 

x8973

Member
Добавлю, что без прерываний (и даже без настройки ножек на выход) такую реакцию удается получить гораздо реже. То есть по ножке фактически надо подолбить некоторое время.
Может быть, я его просто статикой бью?
 

A_D

Active member
По схеме:
- C1 мал очень в качестве декаплинга, к нему бы керамику 22 мкф добавить, уже было бы норм.
- На RST пине нет конденсатора на землю (а с мелким конденсатором по питанию это очень плохо) - может поймать наводки (как раз от проводов, которыми замыкаете или рук) и soc сбросится.
- Как вариант, простой защиты от наводок по входу, поставить Ом 100 по входам, которые проверяете замыканием на землю, smd резистор в разрыв дорожки между J4 и U4 к примеру.

По разводке:
- питающая модуль дорожка как сигнальная по толщине - это не оч хорошо
- полигоны, вроде примерно понял их разводку, но всё-равно плохо видно, тут сказать нечего
 

x8973

Member
По схеме вопросов нет, попробую на днях доработать прямо навесом.
По разводке: питание на модуль приходит сейчас с хэдера уарта, что слева, а вообще будет приходить с сетевого ac/dc прямо с полигона. Дорожка направо уходит для светодиода, который будет гореть постоянно. Фотографии платы прикрепить с наскока не смог, не лезут в аттач) Если на словах, то полигон земли - зеленый, он на стороне модуля и частично на обратке; полигон питания - красный на оборотной стороне.
 

A_D

Active member
Можно в пеинте уменьшить или на любую хранилку выложить типа https://postimages.org/ru/ или https://ru.imgbb.com/

А питание с usb-uart -плохая затея, если берете именно 3.3В... там обычно оч слабый LDO встроенный. Если берете 5В и внешний LDO - то ок.
 

x8973

Member
Не, питается он сейчас от +5 USB через dc/dc. Правда, только сейчас заметил, что это плохая идея: на том же хабе висит питание еще одного устройства на 8266, и оно тоже стало перезагружаться и зависать) Видимо, все проблемы изначально были от кривого питания.


 

A_D

Active member
Если dc-dc плохого качества (с алишки шерпотребный), то скорей всего на выход (да и на вход) он шумит сильно (ставят ужасную и дешевую керамику Y5R и не достаточной емкости) - тогда да, могут быть проблемы с soc.... особенно, если в качестве декапа стоит едиснтвенный 0.1 мкФ.
Попробуйте добавить 10-22 мкФ около С1 на плате и в идеале, dc-dc заменить на LDO для теста.
 

x8973

Member
На втором устройстве питание через LDO с электролитами по входу и выходу. Но к нему подключен усб-уарт, который вполне может сбоить от помех по питанию. А вот на этот недо-звонок я что-то да, конденсаторов недосыпал.
 

nikolz

Well-known member
Это отмазка у nikolz, он не смог ответить на заданных ранее три простых вопроса:
  • А кто по вашему запретит повторное прерывание пока CPU сохраняет регистры в процедуре старта прерывания (и она толще чем весь код прерывания)? Стек тогда всё равно переполнится.
  • А включены или нет повторные прерывания в контроллере ESP8266?
  • Как работает котроллер GPIO с режимами бит прерываний?
CPU сохраняет регистры до выполнения первого оператора в функции колбека.
т е запрет прерываний будет выполнен после сохранения.
и CPU восстановит регистры после разрешения прерывания
Все элементарно Ватсон!
 

pvvx

Активный участник сообщества
Добавлю, что без прерываний (и даже без настройки ножек на выход) такую реакцию удается получить гораздо реже. То есть по ножке фактически надо подолбить некоторое время.
Может быть, я его просто статикой бью?
Об этом сотни раз писал - ESP8266 очеееень боится импульсов. Reset сигнал срабатывает от 1 нс импульса в половину питания чипа, броски в допустимой области напряжений питания так-же не допустимы, подача на аналоговый вход напряжения более 1 с чем-то так-же приводят к reset, все GPIO не имеют защиты по стандарту ESD, ....
 

pvvx

Активный участник сообщества
Не, питается он сейчас от +5 USB через dc/dc. Правда, только сейчас заметил, что это плохая идея: на том же хабе висит питание еще одного устройства на 8266, и оно тоже стало перезагружаться и зависать) Видимо, все проблемы изначально были от кривого питания.


Питание по фото второстепенно. У вас не стоит емкости на reset, а вместо неё подключена антенна в виде разъемов и провода.... :eek:
 
Сверху Снизу