ESP32:绑定至第二核心的任务中挂载的中断是否运行于该核心?
问题解答
结论:这个中断并不会运行在第二核心(核心1)上
在ESP32平台中,中断服务程序(ISR)的运行核心由硬件中断控制器分配,和你在哪个任务里执行attachInterrupt注册操作没有关联。默认情况下,绝大多数中断会被分配到核心0执行,不会继承注册任务所在的核心。
如果你需要让该中断固定在核心1运行,必须手动通过API指定中断的核心归属,示例代码如下:
xTaskCreatePinnedToCore(coreTask1, "CPU_1", 1000, NULL, 0, &Core1TaskHnd, 1); //Creating Task on Core 1 void coreTask1(void *parameter) //The Task I call { attachInterrupt(2, encoderEvent_Motor1, CHANGE); // 指定引脚2对应的中断在核心1运行 xPortSetInterruptCore(2, 1); //attachInterrupt(2, encoderEvent_Motor2, CHANGE); //TODO //attachInterrupt(2, encoderEvent_Motor3, CHANGE); //TODO //attachInterrupt(2, encoderEvent_Motor4, CHANGE); //TODO Serial.println(xPortGetCoreID()); while (1) { /* code */ } }
需要注意的是,并非所有中断都支持指定核心,具体要看硬件中断的类型,但GPIO中断通常是支持的。
内容的提问来源于stack exchange,提问作者Teebow
相关产品推荐
相关产品推荐

