На 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);
...
}
Не пинайте меня больно. Я новичок, особенно при использовании двух ядер.