@mat-giken

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

M5stack core2 V1.1 コンパイルエラー

初心者です。

M5stack core2 V1.1

Aruduino IDE スケッチ作成
Core2 (M5core2 ver0.1.7)で作成したスケッチを今回入手した
Core2 V1.1に書き込みすると、LCDが表示されない症状が発生
シリアルモニタには、出力されるので、ESPは動いている様子。

スイッチサイエンス H.Pを参照すると
M5Core2ライブラリv0.1.8にてAXP2101に対応しています。以前のバージョンでビルドされているバイナリそのままではCore2 v1.1では動作しない場合があります。
とありましたので、ver0.1.8 UPDATE しましたが、コンパイルエラーとなります。
原因と対処方法をご教示ください。
※スケッチ例(core2 basics helloworld)でも、同様にコンパイルエラーとなる。 

発生している問題・エラー

c:\Users\user\Documents\Arduino\libraries\M5Core2\src\INA3221.cpp: In member function 'void INA3221::setChannelEnable(ina3221_ch_t)':
c:\Users\user\Documents\Arduino\libraries\M5Core2\src\INA3221.cpp:267:12: error: enumeration value 'INA3221_CH_NUM' not handled in switch [-Werror=switch]
     switch (channel) {
            ^
c:\Users\user\Documents\Arduino\libraries\M5Core2\src\INA3221.cpp: In member function 'void INA3221::setChannelDisable(ina3221_ch_t)':
c:\Users\user\Documents\Arduino\libraries\M5Core2\src\INA3221.cpp:287:12: error: enumeration value 'INA3221_CH_NUM' not handled in switch [-Werror=switch]
     switch (channel) {
            ^
c:\Users\user\Documents\Arduino\libraries\M5Core2\src\INA3221.cpp: In member function 'void INA3221::setWarnAlertShuntLimit(ina3221_ch_t, int32_t)':
c:\Users\user\Documents\Arduino\libraries\M5Core2\src\INA3221.cpp:306:12: error: enumeration value 'INA3221_CH_NUM' not handled in switch [-Werror=switch]
     switch (channel) {
            ^
c:\Users\user\Documents\Arduino\libraries\M5Core2\src\INA3221.cpp: In member function 'void INA3221::setCritAlertShuntLimit(ina3221_ch_t, int32_t)':
c:\Users\user\Documents\Arduino\libraries\M5Core2\src\INA3221.cpp:326:12: error: enumeration value 'INA3221_CH_NUM' not handled in switch [-Werror=switch]
     switch (channel) {
            ^
c:\Users\user\Documents\Arduino\libraries\M5Core2\src\INA3221.cpp: In member function 'void INA3221::setCurrentSumEnable(ina3221_ch_t)':
c:\Users\user\Documents\Arduino\libraries\M5Core2\src\INA3221.cpp:361:12: error: enumeration value 'INA3221_CH_NUM' not handled in switch [-Werror=switch]
     switch (channel) {
            ^
c:\Users\user\Documents\Arduino\libraries\M5Core2\src\INA3221.cpp: In member function 'void INA3221::setCurrentSumDisable(ina3221_ch_t)':
c:\Users\user\Documents\Arduino\libraries\M5Core2\src\INA3221.cpp:382:12: error: enumeration value 'INA3221_CH_NUM' not handled in switch [-Werror=switch]
     switch (channel) {
            ^
c:\Users\user\Documents\Arduino\libraries\M5Core2\src\INA3221.cpp: In member function 'int32_t INA3221::getShuntVoltage(ina3221_ch_t)':
c:\Users\user\Documents\Arduino\libraries\M5Core2\src\INA3221.cpp:403:12: error: enumeration value 'INA3221_CH_NUM' not handled in switch [-Werror=switch]
     switch (channel) {
            ^
c:\Users\user\Documents\Arduino\libraries\M5Core2\src\INA3221.cpp: In member function 'float INA3221::getVoltage(ina3221_ch_t)':
c:\Users\user\Documents\Arduino\libraries\M5Core2\src\INA3221.cpp:501:12: error: enumeration value 'INA3221_CH_NUM' not handled in switch [-Werror=switch]
     switch (channel) {
            ^
c:\Users\user\Documents\Arduino\libraries\M5Core2\src\INA3221.cpp: In member function 'void INA3221::setWarnAlertShuntLimit(ina3221_ch_t, int32_t)':
c:\Users\user\Documents\Arduino\libraries\M5Core2\src\INA3221.cpp:319:11: error: 'reg' may be used uninitialized in this function [-Werror=maybe-uninitialized]
     _write(reg, (uint16_t *)&val);
     ~~~~~~^~~~~~~~~~~~~~~~~~~~~~~
c:\Users\user\Documents\Arduino\libraries\M5Core2\src\INA3221.cpp: In member function 'void INA3221::setCritAlertShuntLimit(ina3221_ch_t, int32_t)':
c:\Users\user\Documents\Arduino\libraries\M5Core2\src\INA3221.cpp:339:11: error: 'reg' may be used uninitialized in this function [-Werror=maybe-uninitialized]
     _write(reg, (uint16_t *)&val);
     ~~~~~~^~~~~~~~~~~~~~~~~~~~~~~
c:\Users\user\Documents\Arduino\libraries\M5Core2\src\INA3221.cpp: In member function 'int32_t INA3221::getShuntVoltage(ina3221_ch_t)':
c:\Users\user\Documents\Arduino\libraries\M5Core2\src\INA3221.cpp:415:10: error: 'reg' may be used uninitialized in this function [-Werror=maybe-uninitialized]
     _read(reg, &val_raw);
     ~~~~~^~~~~~~~~~~~~~~
c:\Users\user\Documents\Arduino\libraries\M5Core2\src\INA3221.cpp: In member function 'float INA3221::getVoltage(ina3221_ch_t)':
c:\Users\user\Documents\Arduino\libraries\M5Core2\src\INA3221.cpp:513:10: error: 'reg' may be used uninitialized in this function [-Werror=maybe-uninitialized]
     _read(reg, &val_raw);
     ~~~~~^~~~~~~~~~~~~~~
"

次のフォルダのライブラリM5Core2バージョン0.1.8を使用中:C:\Users\user\Documents\Arduino\libraries\M5Core2 
次のフォルダのライブラリWireバージョン2.0.0を使用中:C:\Users\user\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.11\libraries\Wire 
次のフォルダのライブラリSPIバージョン2.0.0を使用中:C:\Users\user\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.11\libraries\SPI 
次のフォルダのライブラリFSバージョン2.0.0を使用中:C:\Users\user\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.11\libraries\FS 
次のフォルダのライブラリSDバージョン2.0.0を使用中:C:\Users\user\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.11\libraries\SD 
次のフォルダのライブラリSPIFFSバージョン2.0.0を使用中:C:\Users\user\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.11\libraries\SPIFFS 
次のフォルダのライブラリHTTPClientバージョン2.0.0を使用中:C:\Users\user\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.11\libraries\HTTPClient 
次のフォルダのライブラリWiFiバージョン2.0.0を使用中:C:\Users\user\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.11\libraries\WiFi 
次のフォルダのライブラリWiFiClientSecureバージョン2.0.0を使用中:C:\Users\user\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.11\libraries\WiFiClientSecure 
exit status 1

Compilation error: exit status 1

### 該当するソースコード
```Aruduino IDE ver 2.2.1
スケッチ
#include <M5Core2.h>
int a = 230;// 枠 下位 y 
int b = 22;// 1枠 y
int dac; //dac 宣言
int DAC;//dac 合計値
int tank = 200;//タンク容量
int bas = 3129;//mv MAX値

int aveNum = 10;//サンプリング数
int aveCycle = 10; //サンプリング周期(ms)

void setup() {

    Serial.begin(115200); //srial 
    M5.begin();           // Init M5Core2 初期化
 
    pinMode(35,ANALOG);    //dac input

}

/* After the program in setup() runs, it runs the program in loop()
 */

void loop() {

  int DAC = 0; //平均計算のための中間の数値を格納
  int i; //繰り返しのためのカウンター
  int cycle = 3000; //チェック周期(ms)
  int v = 330; //Voltage mV
  int d;//表示値
  char s[16];//buff
// low 142
 
  for (i = 0 ; i < aveNum; i++) {

  int dac = analogReadMilliVolts(35); //アナログ入力

  DAC = DAC + dac; //読み値を足し合わせ合計していく
  
  delay(aveCycle);
  }

  dac = DAC / aveNum; //合計から平均を算出しdacとして出力
  Serial.println(dac); //読み値を表示
  M5.Lcd.fillScreen(BLACK);
   M5.Lcd.setCursor(280, 100);  // Move the cursor position to (x,y). 
    M5.Lcd.setTextColor(WHITE);  // Set the font color to white.
    M5.Lcd.setTextFont(4);
    M5.Lcd.setTextSize(3);

    M5.Lcd.printf("L");  // リッター表示
   d = tank*dac/bas;//タンク容量換算
   M5.Lcd.setCursor(105, 100);  // Move the cursor position to (x,y)
   M5.Lcd.setTextColor(WHITE); 
   dtostrf(d, 6, 0, s);
  

  M5.Lcd.drawRect(5, 10, 100, 220,GREEN); 
  if (dac <= v) { 
  M5.Lcd.fillRect(5, (a-b), 100, 22,RED);
  delay(cycle);
 }

 else if (dac <= (2*v)) {
  M5.Lcd.fillRect(5, (a-2*b), 100, (2*b),ORANGE); 
  delay(cycle);
 }

 else if (dac <= (3*v)) {
  M5.Lcd.fillRect(5, (a-3*b), 100, (3*b),CYAN); 
 delay(cycle);

 }
  
 else if (dac <= (4*v)) {
  M5.Lcd.fillRect(5, (a-4*b), 100, (4*b),CYAN); 
 delay(cycle);
 }

 else if (dac <= (5*v)) {
  M5.Lcd.fillRect(5, (a-5*b), 100, (5*b),CYAN); 
 delay(cycle);
 }
 else if (dac <= (6*v)) {
  M5.Lcd.fillRect(5, (a-6*b), 100, (6*b),CYAN); 
 delay(cycle);
 }

 else if (dac <= (7*v)) {
  M5.Lcd.fillRect(5, (a-7*b), 100, (7*b),CYAN); 
 delay(cycle);
 }
 else if (dac <= (8*v)) {
  M5.Lcd.fillRect(5, (a-8*b), 100, (8*b),CYAN); 
 delay(cycle);
 }
 else if (dac <= (9*v)) {
  M5.Lcd.fillRect(5, (a-9*b), 100, (9*b),CYAN); 
 delay(cycle);
 }
 else if (dac <= (10*v)) {
  M5.Lcd.fillRect(5, (a-10*b), 100, (10*b),CYAN); 
 delay(cycle);

 }
}

### 自分で試したこと
M5core2 ライブラリを0.1.7に戻すとコンパイルエラーは出ないが
書き込みすると、LCD画面が出ない。
0 likes

1Answer

エラーになっているのは、エラーメッセージからわかるとおり、コンパイラに下記のオプションが設定されているからです。

-Werror=switch
-Werror=maybe-uninitialized

その意図を汲んでソースコードを修正するか、さもなくばこれらのオプションを取り払ってコンパイルすることですね。

Arduino IDEはGUIでコンパイルオプションを変更できるようにはなっておらず、IDEのインストールされている場所にある platform.txt というファイルを直接編集するしかないようです。ちなみに私の環境(Windows)では %HOME%\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.6\platform.txt でした。

参考:
https://stupiddog.jp/note/archives/576

0Like

Comments

  1. @mat-giken

    Questioner

    @itagagaki
    ご対応ありがとうございます。
    M5Stack.comにて、修正版 v0.1.9 リリースしていただけるようです。

Your answer might help someone💌