Недостаточно памяти, программа может работать нестабильно.

Тема в разделе "Arduino & Shields", создана пользователем Vovka, 12 фев 2019.

  1. DetSimen

    DetSimen Guest

    Ну тоись разницы между 343-мя оставшимися байтами и 1158-ю вапще никакой нет. Грусна.
     
  2. Если достаточно двух, то нет.
     
  3. DetSimen

    DetSimen Guest

    Двух каво?
     
  4. timon

    timon Гик

    Vovka, STM уже советовали? ))
     
  5. Vovka

    Vovka Гик

    Принципиально подсчитал размер "ерунды", которая состоит из 17 только моих файлов, общее количество строк 2060. И это где-то 80% реализованной задачи.
     
  6. Vovka

    Vovka Гик

    еще нет, я его еще в руках не держал ;)
    похоже такими темпами скоро созрею для stm-ки или назад вернусь к PIC...
     
    timon нравится это.
  7. b707

    b707 Гуру

    Когда смотришь тот говнокод. который тут выкладывают - почти всегда видно. что количество строк программы легко можно уменьшить в 3-5 раз
     
  8. parovoZZ

    parovoZZ Гуру

    нах STM. Бери интел. Там памяти можно прицепить хоть через край.
     
    timon нравится это.
  9. parovoZZ

    parovoZZ Гуру

    Да пох. Если памяти хватает на всё, какая разница, сколько её занято? Жрать от этого МК больше не станет. Доплачивать тоже не надо. МК надо юзать на всю катушку))
     
  10. timon

    timon Гик

    Я к атмеге прицепил, например )) ну, такое, конечно, неполноценное/spi-айное, 128к ram и 256к флеши )) но вопрос с памятью закрыл с избытком ))
     
  11. parovoZZ

    parovoZZ Гуру

    это что за атмега, к которой можно прицепить
    ?

    расширь-ка мой кругозор.
     
  12. timon

    timon Гик

    Ох, да обычная w25x20 в вариациях (х10/20/40),
    0FFA2BBD-B246-4557-A120-4673EC6A9798.jpeg
    соответственно на 128/256/512к. BV или CL вариант - без разницы. Как то вы мне насоветовали читать даташиты и писать драйвера )) освоил. Не понимаю, почему фотка не загружается, так расскажу, словами. Собрал пока на макетке, она трехвольтовая, поделил резисторами 1 и 2 кОм. С RAM сидят оба на SPI, разруливаются CS-ами произвольно. Единственное, что флешка требует HIGH на HOLD ноге и небольшую задержку после записи блока 256 байт (пишет/читает блоками, минимум 256 байт, поэтому буферочек оформил для этого). Ногой WP можно пренебречь, с завода флешка рулится 100% софтварно. И соответственно чистить блоки (0хFF) перед записью. С RAM все сильно проще в этом плане.

    А, атмега - 32-я, в iskra neo что впаяли тому и рад ))

    Драйвер на RAM/FLASH получился 530 байт (оч простой, SPI + чтение/запись блоков в флеш и так же но побайтово в RAM), ну плюс 256 байт буфера, без него никак.
     
    Последнее редактирование: 12 фев 2019
  13. b707

    b707 Гуру

    только по-моему тут RAM никоим боком
     
  14. parovoZZ

    parovoZZ Гуру

    И к ней RAM можно цапануть?
     
  15. timon

    timon Гик

    Почему нет? Через SPI запросто.
     
  16. timon

    timon Гик

    Это да, такое, не совсем RAM, скорее «накопитель» с произвольным доступом, когда нужно поработать с большим количеством данных. Но если написать простенький интерпретатор байткода то можно будет считать полноценным RAM )))
     
  17. Andrey12

    Andrey12 Гик

    Ну как вариант есть еще atmega 644 и atmega1284. С Arduino IDE работают, печатные платы в сети есть, если надо ссылки пришлю.
     
    DetSimen нравится это.
  18. DetSimen

    DetSimen Guest

    Мы их сами печатаем. :)
     
    Andrey12 нравится это.
  19. Vovka

    Vovka Гик

    Застрял с выводом из массива. Вот тестовый фрагмент:
    Код (C++):

    // первым байтом идет длина строки. Не обсуждаем почему так!
    const char s1[] PROGMEM = "\x08String 1";
    const char s2[] PROGMEM = "\x08String 2";
    const char s3[] PROGMEM = "\x08String 3";
    const char s4[] PROGMEM = "\x08String 4";
    const char s5[] PROGMEM = "\x08String 5";
    const char * const string_table[] PROGMEM = {s1,s2,s3,s4,s5 };

    void printLN( const char *str)
    {
      unsigned char len, a;
      if( !str ) return;
      len = pgm_read_byte_near(str); str++;
      for( a=0; a<len && a<16; a++, str++ ) disp.write( pgm_read_byte_near(str) );
    }

    void loop() {
    int a;
    //  const char *P; P = (const char&)((const char *)(string_table));
      for( a=0; a<5; a++ ) {
        disp.clear();
        printLN( (const char *)(string_table[2]) ); //правильно выводит с любым индексом-числом
        disp.setCursor( 0,1 );
        printLN( (const char *)(string_table[a]) ); // выводит иероглифы, если индекс - переменная
    //    printLN( (const char*)P[a] );
        delay(1000);
      }
    }
    Пробовал разные варианты - не хочет!