Юрий
pico
С минимальной проволочкой не проверял, у меня печатная посажена жёстко на pico.
Slava
А что?
Предполагаю в коде есть перезагрузка есп.
Miron
Только вачдок от зависаний
Miron
своя разработка
Miron
на модуле ESP32
Mr.Mait
на модуле ESP32
А какая частота выставлена?
Miron
в прошивке?
Mr.Mait
Да
Miron
соврать сейчас могу
Miron
вроде 40МГц, не помню точно что там установлено
Y
Кто пробовал, esp8266 в deep sleep от cr2032 реально питать? Сколько проработает по времени, если просыпаться будет от нажатия на кнопку, подключаться к точке доступа, отправлять данные и засыпать? Нажатий в месяц около 60-70
Y
А назначение сие девайса озвучишь?
Назначение абсолютно банальное. Хочу сделать датчик открытия-закрытия двери, но питание подводить туда нереально
Slava
Slava
Назначение абсолютно банальное. Хочу сделать датчик открытия-закрытия двери, но питание подводить туда нереально
Такой чем не нравится? 433 мгц. Cr2032 батарейка внутри. На сколько хватает не знаю, отключено, должно быть полгода.
Slava
А что там по железу? Или готовое решение? Мне в home assistant завести надо
Это обычный датчик открытия от сигнализации. При отдалении магнита шлёт в эфир 433 мгц свой код. Если в хоме асист можно подключить 433 приёмник, то всё получится.
Dmitry
Всем привет. Глупый вопрос, но имеет место быть. Кто чем паяет esp32 wroom? У меня пару раз выскакивала проблема, прибор работает какое-то время 1-2 недели, потом esp'ха перестает вообще откликаться. Привожу в офис, выпаиваю ее, в переходник, а она та живая, назад на плату и все опять работает. Полагаю косяк в пайке, флюс не вымываеться можт. Паяю ТАГС(Рязань). Потом аккуратно все щеткой вокруг промываю и сжатым воздухом выдуваю.
Serg
Калькулятор и даташит вам поможет. Есмкость cr2032 примерно 500mAh
А какой максимальный ток может дать батарейка и хватит ли для запуска ESP?
Василий
сложилось ощущение, что vTaskStartScheduler и attachInterrupt слегка между собой могут конфликтовать
Василий
иногда уходила в ребут еспешка при запуске шедулера, убрал интерапты - стало ок
Dmytro
иногда уходила в ребут еспешка при запуске шедулера, убрал интерапты - стало ок
Включите вывод стека и расшифруйте его. Явно же в прерывании обращаетесь куда не надо.
Василий
Включите вывод стека и расшифруйте его. Явно же в прерывании обращаетесь куда не надо.
как? вообще у, пока вся отладка это моргающий светодиод :( ЗЫ: void IRAM_ATTR detectsMovement() { bMotionOn = true; } проблема явно не в том куда лезу
Dmytro
И ее тоже желательно в IRAM поместить (а может и обязательно, уже не помню)
Василий
Переменная volatile?
нет, обычная, но проблема ж не в том, что она оптимизировалась, а в том, что в ребут уходло, только я пробовал создать таску
Dmytro
нет, обычная, но проблема ж не в том, что она оптимизировалась, а в том, что в ребут уходло, только я пробовал создать таску
Так volatile это не только про оптимизацию. Ещё atomic добавить стоит, если мьютексы/семафоры для доступа к этой переменной не используете.
Andy
как? вообще у, пока вся отладка это моргающий светодиод :( ЗЫ: void IRAM_ATTR detectsMovement() { bMotionOn = true; } проблема явно не в том куда лезу
глобальные переменные во freeRTOS это плохо однозначно, тем более в двухядерной среде. Лучше переделать на семафоры, можно привратника прикрутить и т.п.
Just a
Так volatile это не только про оптимизацию. Ещё atomic добавить стоит, если мьютексы/семафоры для доступа к этой переменной не используете.
Кстати, я же верно понимаю, что даже если доступ к переменной идёт только с взятием бинарного семафора, то volatile всё равно нужен?
Just a
Просто в Java не нужен, например, там если все чтения/записи упорядочены, то чтение обязано вернуть последнее написанное значение. А упорядоченность достигается взятием/освобождением блокировки.
321
если владеешь эльфийским, то вот: https://www.youtube.com/watch?v=AUGRBhfAabY
яндекс сделал прекрасную вещь Заходим на ютуб через яндекс браузер. Выбераем анголязычный видос, жмем перевести, ждем, наслаждаемся.
Anton
ппл, кто-то пользовался уже tonyp7/esp32-wifi-manager?
Dmytro
Кстати, я же верно понимаю, что даже если доступ к переменной идёт только с взятием бинарного семафора, то volatile всё равно нужен?
Volatile - указание компилятору на то что переменная может поменяться неявным для него образом (не цепочкой вызовов функций, а в прерывании, которые никто не вызывает). Этот атрибут должен быть у всех переменных которые используются и в прерывании и в обычном коде и в данном случае тоже.
Anton
ппл, вай-фай-манагер кто-нить пользует?
Dmytro
Anton
Подьзовал, удобная штука
а ишью какие-то есть? а то смотрю в гитхаб, вижу проблему с 11м андроидом
Василий
не в переменной дело void IRAM_ATTR detectsMovement() { // bMotionOn = true; } vTaskStartScheduler(); xTaskCreate(ThreadA, "Task A", 1000, NULL, tskIDLE_PRIORITY, NULL); attachInterrupt(digitalPinToInterrupt(motionSensor), detectsMovement, CHANGE); attachInterrupt(digitalPinToInterrupt(motionSensor2), detectsMovement, CHANGE);
Василий
и все. ушло в ребуты
Anton
1000 - мало
Василий
на вот такое? void ThreadA(void *pvParameters) { while (1) { if (iii != endl) { iii += (iii > endl ? -1 : 1); ledcWrite(IChanel, iii); delay(10); } else delay(100); } }
Anton
и все. ушло в ребуты
размер стека увеличь
Василий
размер стека увеличь
убрал прерывание - у все заработало
Anton
у меня ребуталось пока стек до 3.5к не увеличил у таск
Василий
ошибка какая?
да нет у меня jtag или через что там отладку включить можн :(
Василий
я в вообще сейчас по воздуху обновляю
Andy
да нет у меня jtag или через что там отладку включить можн :(
в com-порт по умолчанию сыпет ошибки. Без этого можно долго гадать
Василий
ок, сейчас попробую 3500 стек, если не оно, буду пробовать консоль подключать
Василий
у меня ребуталось пока стек до 3.5к не увеличил у таск
сработало. но какого??? там же нефига особо нет
Василий
с такими стеками, памяти не напасешься :(
Dmytro
да нет у меня jtag или через что там отладку включить можн :(
Это в sdkconfig включается печать стека при креше. Он печатается в юарт, при этом его надо ловить консолью от еспресиф, тогда он расшифруется и будет видно стек каждой таски и ещё кучу отладочной инфы
Anton
сработало. но какого??? там же нефига особо нет
хз, я поделился секретным знанием, которое сам приобрёл опытным путём, а не в чатике :) сорцы фриртоса от эспрессиф мне лень смотреть что там они сделали
Anton
:)
Anton
да, в любом случае, спасибо!
In a slight variation from the standard FreeRTOS convention, StackType_t on esp-idf is uint8_t, so the stack size is specified in bytes not words. So passing 1024 for usStackDepth yields a 1KB stack not a 4KB stack. I'll make sure we document this somewhere. As far as I know (I'm sure Jeroen can explain this properly if I'm wrong), the main reason that even simple tasks need some stack space is that exception handlers (ie interrupt handlers) use the running task's stack, both for saving context and for executing the ISR. It may be possible to rework this in the future so that all exception handlers share a stack region, however as exceptions can be configured in various ways (multiple levels, preemption, etc.) this may be quite complex to get right.
Anton
лёгкий гуглинг даёт некотрое подобие ответа
Василий
это когда уже знаешь))
Just a
Volatile - указание компилятору на то что переменная может поменяться неявным для него образом (не цепочкой вызовов функций, а в прерывании, которые никто не вызывает). Этот атрибут должен быть у всех переменных которые используются и в прерывании и в обычном коде и в данном случае тоже.
Изучил вопрос подробнее. И, нет, volatile не нужен, если все доступы к переменной защищены мутексом (std::mutex), так как отпускание/взятие мутекса создаёт отношение synchronize-with, а оно в свою очередь порождает happens before. Таким образом все доступы к переменной упорядочены happens-before, а значит чтение переменной приведёт к чтению единственного видимого значения [https://en.cppreference.com/w/cpp/atomic/memory_order раздел visible side effects]. Осталось понять, порождает ли взятие/отпускание бинарного семафора в rtos отношение synchronize-with.
Max
volatile не для синхронизации, и не для strict order. volatile для MMIO и иже с ними, когда компилятор не правильно понимает, с каких мест переменная может быть модифицированна
Max
даже с мьютеском, но без volatile код: *((u8_t*)0xdeadbeef) = 1; *((u8_t*)0xdeadbeef) = 0; *((u8_t*)0xdeadbeef) = 1; заоптимизируется в *((u8_t*)0xdeadbeef) = 1;
Deleted Account
разве мьютекс гарантирует отсуствие оптимизаций связанных с чтением/записью переменных?
Мютекс гарантирует что только один поток в определенный момент будет выполнять код им защищенный а если вы будете обращаться к переменной только в коде защищённом мютексом - то это будет гарантировать что к переменной больше никто в этот момент не обращается
Just a
разве мьютекс гарантирует отсуствие оптимизаций связанных с чтением/записью переменных?
Он не гарантирует, что совсем никаких оптимизацией нет. Но он гарантирует, что все записи сделанные под мутексом в одном потоке, будут видны в другом. (я даже доказал это ссылками на memory model). Что касается оптимизаций: игры с компилятором в "угадай, что оптимизируется" никуда не приводят, потому что вы никогда не можете знать все оптимизации, которые умеет компилятор. В стандарте написано, что может вернуть чтение переменной, и при каких условиях оно гарантированно может вернуть только одно "последнее" записанное значение. Этим и надо пользоваться, а думать, что компилятор оптимизирует - это уже гадание.