Не компилитуется скетч

Тема в разделе "Arduino & Shields", создана пользователем Blackgeneral, 21 июл 2023.

  1. parovoZZ

    parovoZZ Гуру

    очевидно, что консты там не просто так, а из желания не тащить из ПЗУ в ОЗУ данные.
     
  2. User248

    User248 Гик

    Там данных на пальцах пересчитать, если компилятор вообще обращает на это внимание. Чтобы не тащить данные из ПЗУ в ОЗУ, используется PROGMEM.
     
  3. parovoZZ

    parovoZZ Гуру

    как раз-таки оно и используется с const.
     
  4. Asper Daffy

    Asper Daffy Иксперд

    Чему именно соответствует такое инфантильное поведение?
     
  5. Asper Daffy

    Asper Daffy Иксперд

    Сомнительная идея.

    Библиотека написана небрежно.
    Код (C++):
    void LiquidCrystal_I2C::createChar(uint8_t location, uint8_t charmap[]) {
        location &= 0x7; // we only have 8 locations 0-7
        command(LCD_SETCGRAMADDR | (location << 3));
        for (int i=0; i<8; i++) {
            write(charmap[i]);
        }
    }
     
    Какие у автора основания не сделать константами второй параметр? Да, и первый тоже, если дебильную вторую строчку убрать? Зачем параметры сделаны переменными? Просто по небрежности. В С это еще как-то можно было объяснить - там ссылок не было, а в С++ первый параметр изменяется безо всякой нужды - полный зашквар.

    А мы теперь, вместо того, что поправить в ней эту небрежность, простым добавлением туда const, будем свою программу уродовать? Зачем? Не проще ли библиотеку подправить?
     
    b707 и DetSimen нравится это.
  6. User248

    User248 Гик

    Хотелось бы услышать ответ от создателя темы. Заработало или нет? А так долго можно рассуждать, что лучше.
     
  7. User248

    User248 Гик

    Если кому-то нужны const'ы, то преобразование типов никто не отменял.

    Меняем это:
    Код (C++):
    lcd.createChar(S_L, sym_l);
    На это:
    Код (C++):
    lcd.createChar(S_L, (uint8_t*) sym_l);
    И так далее.
     
  8. Asper Daffy

    Asper Daffy Иксперд

    Ну, да, а потом треды на сотни постов - https://forum.arduino.ru/t/kak-rabotaet-dannyj-kod/8878/32

    Каждый развлекается как умеет.
     
  9. Blackgeneral

    Blackgeneral Нерд

    Соответствует человеку, который
    является только "эксплуататором" софта и железа, и которому совершенно по-барабану на бекапы, библитеки и т.д. (разумеется до тех пот, пока все работает )))) )
    Я уже писал выше, что если убрать все "const"ошибка отстается той же "invalid conversion from 'const byte* {aka const unsigned char*}' to 'uint8_t* {aka unsigned char*}' [-fpermissive]"
    но смещается на 900 строки программы.

    Я сейчас не занимаюсь этой темой, о чем я тоже писал выше: помочь человеку в установке библиотеки - это одно (я и помог с одной библиотекой, а потом, перестав ругаться на отсутствие библиотеки FastLED, появилась ошибка которую я описал), а лезть в чужой кот, который, как я понимаю, используется в каком-то коммерческом оборудовании - это другое. Поэтому, после того как ошибка библиотекой вылезла, я попробовал решить ее быстро, т.к. думал, что раз программа работала, то здесь не может быть больших проблем, но все оказалось гораздо сложнее, и поэтому я посоветовал владельцу кода обратиться к разработчику для исправления ошибки.
    Как там дела сейчас - точно не знаю. Слышал, что разработчик морозится от своей программы руками и ногами. Т.е. пока программа не работает.
     
  10. User248

    User248 Гик

    А этот const убирали?
    Код (C++):
    const int Decade[5] = {1, 10, 100, 1000, 10000 };
     
  11. Blackgeneral

    Blackgeneral Нерд

    да, все убирал, по все программе, причем поэтапно до самого последнего.
     
  12. User248

    User248 Гик

    Тогда нужно конкретно смотреть где и что. Весь код нужен. Проблема решаема, однозначно.