M5StickC icon indicating copy to clipboard operation
M5StickC copied to clipboard

The IMU (MPU6886) does not work properly when running on a different core using FreeRTOS

Open meltingrabbit opened this issue 4 years ago • 3 comments

When changing the execution core of the task to read IMU (MPU6886) values using xTaskCreatePinnedToCore from 1 to 0, the correct value cannot be read from the IMU.

In the sample code below, if you swap lines 20 and 21, it works or doesn't work properly.

#include <M5StickC.h>
#include <esp_task.h>

void multitask_imu(void* arg) {
  static int16_t x,y,z;
  while (1) {
    M5.IMU.getAccelAdc(&x,&y,&z);
    Serial.printf ("%d,%d,%d\n", x, y, z);
  }
}

void setup() {
  M5.begin();
  M5.IMU.Init();
  Serial.begin(115200);

  disableCore0WDT();
  disableCore1WDT();

  xTaskCreatePinnedToCore(multitask_imu, "Task0", 512*4, NULL, ESP_TASK_PRIO_MAX, NULL, 0);
  // xTaskCreatePinnedToCore(multitask_imu, "Task0", 512*4, NULL, ESP_TASK_PRIO_MAX, NULL, 1);

  delay(1000);
}

void loop() {
  delay(10000);
}

meltingrabbit avatar Jul 16 '20 10:07 meltingrabbit

Hi, meltingrabbit Arduino run loop() in core1, so if use core 1 to run task, it will run normal If use core0, I can't be sure i2c is working well (now i2c running looks weird)

EeeeBin avatar Jul 16 '20 10:07 EeeeBin

Thank you for your kind replay. I got it.

Do you know how to change the working core of the I2C tasks?

meltingrabbit avatar Jul 16 '20 15:07 meltingrabbit

They use global variables and are hardcoded in a few places. Your best bet is to replace their i2c calls in MPU6886::I2C_Read_NBytes and MPU6886::I2C_Write_NBytes with the platform i2c calls. Note you will also need to replace the Wire1.begin(21,22); in MPU6886.cpp with the correct i2c setup code. In general, unless you are doing a very simple project you will need to replace all of their hardware calls with platform code. Also keep an eye out for random hardcoded values. Lastly check the other projects for MPU6886.h/cpp files. They copy, paste, and modify slightly in all of the projects, so some may or may not have fixes or changes depending on when/if they were updated.

geiseri avatar Nov 22 '20 23:11 geiseri