расшифровка ошибки компиляции

Тема в разделе "Arduino & Shields", создана пользователем MESS, 26 дек 2015.

  1. MESS

    MESS Гик

    Я считал, что примеры из правильно загруженных библиотек работают сразу. Но вот столкнулся с проблемой- не проходит pcdtest из библиотеки LCD5110_Graph .
    Библиотеку LCD5110_Graph скачивал отсюда : http://www.rinkydinkelectronics.com/library.php?id=47
    Подскажите пожалуйста, что может означать сообщение об ошибке компилятора :

    Arduino: 1.6.0 (Mac OS X), Плата"Arduino Nano, ATmega328"

    Arduino/libraries/LCD5110_Graph/DefaultFonts.c:12:14: error: variable 'SmallFont' must be const in order to be put into read-only section by means of '__attribute__((progmem))'

    fontdatatype SmallFont[] PROGMEM =
    ^
    Arduino/libraries/LCD5110_Graph/DefaultFonts.c:117:14: error: variable 'MediumNumbers' must be const in order to be put into read-only section by means of '__attribute__((progmem))'

    fontdatatype MediumNumbers[] PROGMEM =
     
    Последнее редактирование: 26 дек 2015
  2. geher

    geher Гуру

    Оно просит, чтобы при объявлении переменной было const.
    В справке, кстати, оно явно показано.

    Т.е. надо примерно так:
    const fontdatatype SmallFont[] PROGMEM =
     
    MESS нравится это.
  3. MESS

    MESS Гик

    Я так и делал раньше в другой библиотеке - Adafruit_GFX_Library. Но там была в скетче строка "static unsigned char PROGMEM logo16_glcd_bmp[] =" и все исправилось, когда я заменил static на const.
    А в этом скетче я не могу найти нужную строку. Поскольку в программировании я первоклассник, то пытаюсь найти ассоциативно. В файлах библиотеки тоже не нашел ничего похожего.
    вот снимок экрана Снимок экрана 2015-12-26 в 21.37.43.png
    и что такое 117: 14, когда там всего 50 строк. Подскажите пожалуйста,куда копать
     
  4. AlexU

    AlexU Гуру

    Посмотрите повнимательней на файл ....../LCD5110_Graph/DefaultFonts.c.
     
    MESS нравится это.
  5. MESS

    MESS Гик

    Спасибо! начинаю понимать что в библиотеках есть еще и файлы настройки. Где бы об этом прочитать кратко?
     
  6. AlexU

    AlexU Гуру

    Это не файлы настройки. В данном случае речь идёт о файле '*.c' -- файл с исходным кодом программы на языке 'C'. Есть ещё заголовочные файлы -- '*.h', которые также используются в качестве исходного кода. Вот эти заголовочные файлы иногда можно рассматривать как настроечные файлы.
     
  7. ИгорьК

    ИгорьК Гуру

    Лучше по-другому. Если у вас есть часто встречающиеся в разных программах одинаковые функции, вы можете оформить их в библиотеку. Библиотека состоит из двух файлов. Файл с расширением h кратко перечисляет все функции , которые вы вынесли в библиотеку. Считается правильным хорошо комментировать в нем то, как применять эти функции. Файл с раширением с или срр - есть сами функции. Таким образом, библиотеки не настраиваются, а правильно применяются.
     
    MESS и AlexU нравится это.
  8. AlexU

    AlexU Гуру

    Продолжим углубляться -- файл с расширением 'h' ( от ангилийского 'Header' - заголовок) определяет имена переменных и/или функций и то, как их использовать. Он может быть один на несколько разных библиотек (реализаций в файлах '*.c' разными командами разработчиков или, например, для разных платформ). Т.е. можно написать 'C/C++' программу, которая использует один тот же заголовочный файл '*.h' какой-либо библиотеки, но при этом эта программа может быть скомпилирована для разных платформ: Linux, Windows, Arduino, Solaris, QNX и т.п., если использовать соответствующие реализации этой библиотеки в виде файлов '*.c' и/или '*.cpp'.
    Это к вопросу:
    кратко -- форум + книги == более быстрое освоение темы.
     
    MESS нравится это.