Официальный сайт компании Arduino по адресу arduino.cc
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
Надеюсь кому-то помог