internal compiler error: Segmentation fault
- Войдите на сайт для отправки комментариев
Пнд, 11/02/2019 - 03:02
Помогите разобраться с конфликтом библиотек дисплея телефона 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;
} // Та самая скобка из ошибки
Вопрос закрываю.
Проблема компилятора 1.8.8 ПРИЛОЖЕНИЕ для win 10.
После установки компилятора как программы EXE (той же версии) все компилируется. https://www.arduino.cc/en/Main/Donate
Надеюсь кому-то помог