internal compiler error: Segmentation fault

p-a-h-a
Offline
Зарегистрирован: 17.01.2019

Помогите разобраться с конфликтом библиотек дисплея телефона Siemens S65LPH88 и датчика давления BME280. 

Пытаюсь добавить в устройство с часами реального времени DS3231 датчик давления. Оба сидят на шине I2C. RTC работает прекрасно.

При добавлении в код строки "bme.begin();" компилятор выдает ошибку. По отдельности дисплей и датчик давления работают. 

D:\Arduino\libraries\GraphicsLib\GraphicsLib.cpp: In function 'drawPixel.constprop':
D:\Arduino\libraries\GraphicsLib\GraphicsLib.cpp:148:1: internal compiler error: Segmentation fault
 }
 ^
Please submit a full bug report,
with preprocessed source if appropriate.
See <http://gcc.gnu.org/bugs.html> for instructions.
lto-wrapper.exe: fatal error: C:\Program Files\WindowsApps\ArduinoLLC.ArduinoIDE_1.8.19.0_x86__mdqgnx93n4wtt\hardware\tools\avr/bin/avr-gcc returned 1 exit status
compilation terminated.
c:/program files/windowsapps/arduinollc.arduinoide_1.8.19.0_x86__mdqgnx93n4wtt/hardware/tools/avr/bin/../lib/gcc/avr/5.4.0/../../../../avr/bin/ld.exe: error: lto-wrapper failed
collect2.exe: error: ld returned 1 exit status
exit status 1
Ошибка компиляции для платы Arduino Nano.

Вот код из Arduino IDE:

#include  <Wire.h>     // display connection
#include <SPI.h>      // display connection
#include <digitalWriteFast.h>  // display output

#include "RTClib.h"
RTC_DS3231 rtc;

#include <Adafruit_Sensor.h>
#include <Adafruit_BME280.h>
#define SEALEVELPRESSURE_HPA (1013.25)
Adafruit_BME280 bme;
unsigned long delayTime;



#include <GraphicsLib.h>      // graphic elements library
#include <S65LPH88.h>     // library for Siemens LPH88
#include <DisplaySPI.h>   // display connection
S65LPH88 lcd; uint8_t clear_bg=0x00;  // 132 на 176 точек шрифт 12x16
//Настройки кнопки
#define ButtonPIN 2        // кнопка подключена сюда (PIN --- КНОПКА --- GND)
#define TimePress 300 // Время долгого нажатия, в мс
#define DeBounce  50 // Время антидребезга, в мс
//
#define Clock  0
#define Alarm  1
#define Dot  0
#define Mines  1
#define Settings  2
#define On  1
#define Off  0

byte Mode=NormalMode; // Режим после включения
//byte day_=12; byte month_=1; unsigned int year_=2019; byte hour_=0; byte min_=38; byte sec_=50;
byte sec_;
byte AlarmHour=0; byte AlarmMin=0;
byte AlarmDays[3]={B10001100, B01000001, B00000000};//Дни в которые звенит три будильника. 8й байт вкл выкл будильник, правый байт - понедельник
int AlarmTime[3] ={800,2359,1200}; //Время срабатывания будильника
const String DayOfMonth[7]={"Sunday   ","Monday   ","Tuesday  ","Wednesday","Thursday ","FridAy   ","Saturday "};
const String DayOfMonthLittle[7]={"Mo","Tu","We","Th","Fr","Sa","Su"};
const byte RGBbin[3] ={ 0,0,0};// цвет бинарных часов
const byte RGBbinFon[3] ={ 200,200,200}; // цвет фона нолей бинарных часов
const byte RGBcolorDigytal [3] = {0,0,0};// цвет часов и минут
const byte RGBcolorDigytalFon [3] = {250,250,250}; // Цвет потушеных сегментов часов и минут
const byte RGBcolorDigytalSeconds [3] = {90,90,90}; //Цвет секунд
const byte RGBcolorFillScreen [3] = {255,255,255}; //Цвет фона
const boolean separator = Dot; // Разделитель между часамии минутами  Dot 23:59, Mines 23-59
const byte LongPressButton = 400;
volatile boolean Button;
volatile boolean Click;
volatile unsigned long ButtonPressNextTime;
const unsigned int ExitTime=50000;// Время отображения настроек и будильников при бездействии
boolean Render = On; // Переменная обновления дисплея 0 - Отрисовать. 1 - Не отрисовывать (только изменения)

void setup() {
  delay(1000); //нужно для rtc
  rtc.begin(); // rtc
  //rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
  
  bool status;
//  bme.begin();
  status = bme.begin();  //ВОТ ЗДЕСЬ НАЧИНАЕТСЯ ПРОБЛЕМА
    if (!status) {
        while (1);
    }

  
pinMode(2, INPUT_PULLUP); //Порт D2 на вход с подтяжкой (int0)
    //прерывания от PORTD 2 2arduino
    PCICR = 0b00000111;  // разрешим уже сами прерывания в общем
    PCMSK2 = 0b00000100; // разрешим прерывание на 2arduino (PORTD 2)

// Инициализируем и заливаем дисплей цветом фона
  lcd.begin(); lcd.fillScreen(RGB(RGBcolorFillScreen [0],RGBcolorFillScreen [1],RGBcolorFillScreen [2])); 
}

Все скопированно из примера библиотеки датчика давления.

Вот функция из библиотеки graphicsLib.cpp на которую ругается компилятор:

void GraphicsLib::drawPixel(int_least16_t x0, int_least16_t y0, uint_least16_t color)
{
  if((x0 >= lcd_width) ||
     (y0 >= lcd_height))
  {
    return;
  }

  setArea(x0, y0, x0, y0);

  drawStart();
  draw(color);
  drawStop();

  return;
} // Та самая скобка из ошибки

 

p-a-h-a
Offline
Зарегистрирован: 17.01.2019

Вопрос закрываю.

Проблема компилятора 1.8.8 ПРИЛОЖЕНИЕ для win 10.

После установки компилятора как программы EXE (той же версии) все компилируется. https://www.arduino.cc/en/Main/Donate

 

Надеюсь кому-то помог