Ужать размер Flash AVR

Тема в разделе "Микроконтроллеры AVR", создана пользователем Alexandro77, 3 сен 2019.

Метки:
  1. Alexandro77

    Alexandro77 Нуб

    Помогите ужать размер скетча, для Atmega8, Bootloader отключен , что мог то сократил код. А все равно большой ( устройство обычный таймер с движком от батарейки. таймер на 5 минут, далее просто остановка движка.)
    Сейчас место занимает около 8-9 кб , а нужно 8 кб/ Что делать ? что можно сократить , удалить?
     
  2. Alexandro77

    Alexandro77 Нуб

    Сам скетч, тут.
     

    Вложения:

    • timer_v2019.ino
      Размер файла:
      11 КБ
      Просмотров:
      331
  3. b707

    b707 Гуру

    простой таймер? - там внутри какая-то игрушка, а не таймер.
    Таймер - это 10 строк - отсчитал время. выключил нагрузку. ВСЕ!

    Серьезно копаться в этом...неохота
    Навскидку сразу видно, что вывод минут на дисплей сделан очень неэффективно - через класс String и выборкой цифр из строки??? - ужас
    А для вывода минут, где в первых разрядах нули - написана отдельная функция - ужас-ужас :)
    Что помешало взять обычное число и поделить на разряды в виде целых чисел, без стрингов вообще?
    Избавьтесь от String - сразу выиграете килобайта два
     
    Последнее редактирование: 3 сен 2019
  4. Alexandro77

    Alexandro77 Нуб

    String заменить на int ?
     
  5. b707

    b707 Гуру

    при выводе времени на семисегментник - точно хаменить, в других местах не смотрел пока
     
    Alexandro77 нравится это.
  6. Asper Daffy

    Asper Daffy Иксперд

    На void. Контекстной заменой.
     
    Alexandro77 нравится это.
  7. Alexandro77

    Alexandro77 Нуб

    И правда, убрали String . и код почти в 2 раза уменьшился)). код внизу.
    А в целом String , он для чего? . На сколько знаю, это для слияние , удобно для текста буквы, фразы. Или полезнее для цифр ?

    Код (C++):
    void led_min(int n, byte type)
    {
      ListDisp[0] = n%10; n= n/10;
      ListDisp[1] = n%10; n= n/10;
      ListDisp[2] = n%10; n= n/10;
      ListDisp[3] = n%10;
      if (type == 5) {
         ListDisp[4] = 11;
         ListDisp[5] = 5;
      }
      else if (type == 10) {
         ListDisp[4] = 11;
         ListDisp[5] = 1;
      }
      else if (type == 0) {
        ListDisp[3] = 11;
        ListDisp[4] = 0;
        ListDisp[5] = 0;
      }
      else if (type == 255) {
         ListDisp[2] = 11;
         ListDisp[3] = 13;
         ListDisp[4] = 13;
         ListDisp[5] = 12;
      }

      tm1637.display(ListDisp, ListDispPoint);

      if (type == 255) delay(500);
      else delay(5000);
    }
     
  8. Daniil

    Daniil Гуру

    это библиотека для работы со строками. В неё заложены полезные процедуры работы строками в понятном для неискушенного байтами программиста виде. Полезная штука для своих задач
     
    Alexandro77, Andrey12 и SergeiL нравится это.
  9. SergeiL

    SergeiL Оракул Модератор

    Чтобы не вникать, что и как в памяти.
    А если вникать, то "char" и проще и компактнее.
     
    Andrey12 нравится это.
  10. Asper Daffy

    Asper Daffy Иксперд

    Не "для чего", а "для кого". Для тех, кто не умеет пользоваться char *.
     
    Alexandro77 нравится это.