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

Вопрос Почему тормозит контроллер?

RRRLock

New member
Доброго времени суток.
Тестирую возможности FreeRTOS на ESP8266. Столкнулся с интересным явлением. Создал один единственный таск с бесконечным циклом. Организовал ногодрыг на GPIO4. И обнаружил, что контроллер как бы подтормаживает. Лучше меня скажут картинки с экрана осциллографа. Паузы непериодические, но их длительность относительно стабильная.

Программирую в Eclipse, использую UDK 2.0.9. и FreeRTOS.
Чем может быть обусловлено такое поведение? Нестабильностью софта (FreeRTOS или библиотечных функций, написанных китайскими разработчиками)? Или же дело в ядре микроконтроллера Tensilica? Или моя криворукость?:)
Спасибо.
.TEK00003.JPG TEK00000.JPG TEK00001.JPG TEK00002.JPG
 

RRRLock

New member
Обусловлено обработкой WiFi. В разных версиях SDK разные задержки на обработку WiFi с запретом прерываний. Лучший вариант дает не RTOS версия.
Спасибо. Такая задержка актуальна только для модуля ESP8266? Вы уже тестировали ESP32? Модули других производителей проверяли?
 

pvvx

Активный участник сообщества
Спасибо. Такая задержка актуальна только для модуля ESP8266? Вы уже тестировали ESP32? Модули других производителей проверяли?
ESP32S не тестировал - его пока невозможно купить - десяток заказов на али за последние пол года были все расторгнуты из-за отказа в отсылке самими продавцами. Некоторые ещё и не вернули деньги...
На RTOS существует тик - на модулях с ним он и дает дискретность переключения задач по приоритетам... В модулях RTL871x тик 1 ms. Если приоритет вашей задачи больше, чем у драйвера WiFi, то прерывания не будет. Так-же в RTOS есть остановка "шедулера".
На ESP8266 невозможно выбирать что запущено - вес либы закрыты.
 
Последнее редактирование:

RRRLock

New member
Как я понимаю, эта задержа не периодическая, отследить её не получится?
 

pvvx

Активный участник сообщества
Как я понимаю, эта задержа не периодическая, отследить её не получится?
Если хакнете - то всё поучится. :) Но прямых средств Espressif не предоставляет и не собирается - будут юлить и вешать лапшу на уши годами...
 
Последнее редактирование:

RRRLock

New member
Если приоритет вашей задачи больше, чем у драйвера WiFi, то прерывания не будет. Так-же в RTOS есть остановка "шедулера".
На ESP8266 невозможно выбирать что запущено - вес либы закрыты.
А существует ли способ отключить wi-fi на время? Например, запретить это прерывание от драйвера WiFi на тот промежуток времени, который необходим для выполнения моей задачи (она занимает примерно 160 мкс по времени)?
Я помню, что находил ваш проект на github, в котором вы отключали wi-fi, чтобы работать чисто с контроллером. Значения тогда ему не придал, только порадовался, что такое возможно. Или же этот проект для других целей?
 

pvvx

Активный участник сообщества
А существует ли способ отключить wi-fi на время? Например, запретить это прерывание от драйвера WiFi на тот промежуток времени, который необходим для выполнения моей задачи (она занимает примерно 160 мкс по времени)?
Я помню, что находил ваш проект на github, в котором вы отключали wi-fi, чтобы работать чисто с контроллером. Значения тогда ему не придал, только порадовался, что такое возможно. Или же этот проект для других целей?
Существует. Wifi mode = 0. И можно попробовать вырубить [0x60000710] = 0, это отключает все клоки со всех устройств :) и потребление становится минимальным - только CPU.
//bit31 =1 источник тактирования для I2S, ... = PLL (80MHz)
//bit25,26 =1 источник тактирования для SAR ... = PLL (80MHz)
Но всё равно останутся прерывания таймера. Его тоже можно отключить :)
 
Сверху Снизу