Прерывание на ядре 0 esp32 (Arduino IDE)-не работает:(

На ESP32 скетч Ардуино выполняется на ядре 1. Мне необходимо подключить аппаратное прерывание на ядро 0. Точнее: функция-обработчик прерывания должна выполняться на ядре 0. Проблема в том, что обработчик у меня выполняется всегда на ядре 1. Хотя я указываю ядро 0. В чём может быть причина? Вот часть моего скетча, отвечающего за установку обработчика на ядро 0. Использую Platformio. Скетч компилируется и загружается. В терминале при сработке прерывания вижу сообщение :
“Task1 running on core 1”

...
TaskHandle_t Task1;

void IRAM_ATTR summator() // обработка прерывания. Счётчик
{
   startstopbutton==1 ? Counter_stanka++ : Counter_stanka==0 ? Counter_stanka=0 : Counter_stanka-- ; // Второе сравнение чтобы счётчик не ушёл в минус
Serial.print("Task1 running on core ");
Serial.println(xPortGetCoreID());
}

void interrupt0core(void*pvparameters)
{
  pinMode(metr_count, INPUT_PULLUP);
  attachInterrupt(metr_count, summator, RISING);
  vTaskDelete(NULL);
}
void setup()
{
xTaskCreatePinnedToCore(interrupt0core, "Task1", 1000, NULL, 0, NULL, 0);
...

}

Не пинайте меня больно. Я новичок, особенно при использовании двух ядер.

Тут пишут, что обработчик вяжется на то же ядро, на котором выполняется задача, его регистрирующая:

Попробуйте сэмпл из поста.

Именно этот пример я взял за основу. Сделал всё как в примере.

А версия ESP32 Core какая? Может задело переходом с 2.x → 3.x этот аттачинтеррапт…

для таких целей есть PCNT

1 лайк

О, огромное спасибо за подсказку! Пойду осваивать. Лайк поставил.

Посмотрел счётчики. Весьма полезная штука. Но, макс. время подавления дребезга 13мс.
Мне мало. Мне надо больше. Около 100мс.

Где версию ядра посмотреть?

когда устанавливаешь там и выбираешь и смотришь ну или в папке где ядро установлено

а смысл тогда в прерываниях, там loop на 0 ядре за глаза