hw_timer_t, timerAttachInterrupt, portENTER_CRITICAL и т. д. ... не определено для ESP8266 - PullRequest
0 голосов
/ 09 февраля 2019

У меня есть плата разработки ESP8266 NodeMCU 12E.Я пытаюсь реализовать ISR, который использует аппаратный таймер, как описано в этом блоге здесь .Сообщение в блоге изначально предназначалось для ESP32, и в нем приведен окончательный демонстрационный код, который я не могу скомпилировать в Arduino IDE для ESP8266.

volatile int interruptCounter;
int totalInterruptCounter;

hw_timer_t * timer = NULL;
portMUX_TYPE timerMux = portMUX_INITIALIZER_UNLOCKED;

void IRAM_ATTR onTimer() {
  portENTER_CRITICAL_ISR(&timerMux);
  interruptCounter++;
  portEXIT_CRITICAL_ISR(&timerMux);

}

void setup() {

  Serial.begin(115200);

  timer = timerBegin(0, 80, true);
  timerAttachInterrupt(timer, &onTimer, true);
  timerAlarmWrite(timer, 1000000, true);
  timerAlarmEnable(timer);

}

void loop() {

  if (interruptCounter > 0) {

    portENTER_CRITICAL(&timerMux);
    interruptCounter--;
    portEXIT_CRITICAL(&timerMux);

    totalInterruptCounter++;

    Serial.print("An interrupt as occurred. Total number: ");
    Serial.println(totalInterruptCounter);

  }
}

Когда я пытаюсь скомпилировать, я получаю сообщения об ошибках hw_timer_t, portENTER_CRITICAL, portEXIT_CRITICAL, timerAttachInterrupt, timerAlarmWrite и т. д. ... все не существует.

Должен ли я импортировать некоторую библиотеку для поддержки этого демонстрационного кода?

Не могу найти разговоров об аппаратном таймере для ESP8266.Кажется, что каждый говорит об аппаратном таймере для ESP32.

1 Ответ

0 голосов
/ 09 февраля 2019

Они не определены, поскольку находятся в ESP32 SDK, который полностью отделен (другой ЦП, другой набор команд, другая ОС) от ESP8266.Документация по ESP32 не относится к ESP8266.

Взгляните на ESP8266 "NONOS SDK" - это "ОС", на которой построен ESP8266 Arduino SDK.Включает вызовы аппаратных таймеров (hw_timer_init(), hw_timer_arm(), hw_timer_set_func()).Вы можете найти документацию для этого здесь .

Осторожно, для ESP8266 также есть "Бесплатная ОСРВ".Когда вы ищете пример кода, люди часто не понимают, предназначен ли их код для NONOS SDK или Free RTOS SDK.

Free RTOS - отдельная часть программного обеспечения;вы не сможете использовать его функции в программе Arduino SDK.Некоторые люди запускают части Arduino SDK, но это глубокая кроличья нора, которая может тратить много вашего времени.Если вы решите пойти по этому пути, вам лучше отказаться от вызовов Arduino SDK и просто написать правильную программу FreeRTOS.

...