Куда делась память? Глобальные переменные используют 1658 байт (80%) динамической памяти.

clgs
Offline
Зарегистрирован: 20.11.2018

Добрый вечер.

Объясните пожалуйсте, что-то не пойму. Глобальных переменных у меня 3, но размер (при компеляции) глобальных переменных связан с содержимым getSong и ещё интересно, если в play_rtttl убрать Serial.println(song);, то память 9% становится.

Объясните пожалуйста, как разметить несколько длинных строк, при этом чтобы они не использовали глобальную память.

Спасибо. Код ниже...

 

#define DELAY_ITERATION 1000 // Время каждой итерации
#define BEEP_PIN 12 // Пин динамика
#define ON_PIN 10 // Пин тригер включения воспроизведения
#define OFF_PIN 11 // Пин тригер выключения воспроизведения

#define OCTAVE_OFFSET 0 // ?

int song_len = 6;
char getSong(int num){
  if(0 == num) return "GoodBad:d=4,o=5,b=56:32p,32a#,32d#6,32a#,32d#6,8a#.,16f#.,16g#.,d#,32a#,32d#6,32a#,32d#6,8a#.,16f#.,16g#.,c#6,32a#,32d#6,32a#,32d#6,8a#.,16f#.,32f.,32d#.,c#,32a#,32d#6,32a#,32d#6,8a#.,16g#.,d#";
  else if(1 == num) return "Entertainer:d=4,o=5,b=140:8d,8d#,8e,c6,8e,c6,8e,2c.6,8c6,8d6,8d#6,8e6,8c6,8d6,e6,8b,d6,2c6,p,8d,8d#,8e,c6,8e,c6,8e,2c.6,8p,8a,8g,8f#,8a,8c6,e6,8d6,8c6,8a,2d6";
  else if(2 == num) return "StarWars:d=4,o=5,b=45:32p,32f#,32f#,32f#,8b.,8f#.6,32e6,32d#6,32c#6,8b.6,16f#.6,32e6,32d#6,32c#6,8b.6,16f#.6,32e6,32d#6,32e6,8c#.6,32f#,32f#,32f#,8b.,8f#.6,32e6,32d#6,32c#6,8b.6,16f#.6,32e6,32d#6,32c#6,8b.6,16f#.6,32e6,32d#6,32e6,8c#6";
  else if(3 == num) return "Indiana:d=4,o=5,b=250:e,8p,8f,8g,8p,1c6,8p.,d,8p,8e,1f,p.,g,8p,8a,8b,8p,1f6,p,a,8p,8b,2c6,2d6,2e6,e,8p,8f,8g,8p,1c6,p,d6,8p,8e6,1f.6,g,8p,8g,e.6,8p,d6,8p,8g,e.6,8p,d6,8p,8g,f.6,8p,e6,8p,8d6,2c6";
  else if(4 == num) return "Flinstones:d=4,o=5,b=40:32p,16f6,16a#,16a#6,32g6,16f6,16a#.,16f6,32d#6,32d6,32d6,32d#6,32f6,16a#,16c6,d6,16f6,16a#.,16a#6,32g6,16f6,16a#.,32f6,32f6,32d#6,32d6,32d6,32d#6,32f6,16a#,16c6,a#,16a6,16d.6,16a#6,32a6,32a6,32g6,32f#6,32a6,8g6,16g6,16c.6,32a6,32a6,32g6,32g6,32f6,32e6,32g6,8f6,16f6,16a#.,16a#6,32g6,16f6,16a#.,16f6,32d#6,32d6,32d6,32d#6,32f6,16a#,16c.6,32d6,32d#6,32f6,16a#,16c.6,32d6,32d#6,32f6,16a#6,16c7,8a#.6";
  else if(5 == num) return "MissionImp:d=16,o=6,b=95:32d,32d#,32d,32d#,32d,32d#,32d,32d#,32d,32d,32d#,32e,32f,32f#,32g,g,8p,g,8p,a#,p,c7,p,g,8p,g,8p,f,p,f#,p,g,8p,g,8p,a#,p,c7,p,g,8p,g,8p,f,p,f#,p,a#,g,2d,32p,a#,g,2c#,32p,a#,g,2c,a#5,8c,2p,32p,a#5,g5,2f#,32p,a#5,g5,2f,32p,a#5,g5,2e,d#,8d";
}

#define NOTE_C4  262
#define NOTE_CS4 277
#define NOTE_D4  294
#define NOTE_DS4 311
#define NOTE_E4  330
#define NOTE_F4  349
#define NOTE_FS4 370
#define NOTE_G4  392
#define NOTE_GS4 415
#define NOTE_A4  440
#define NOTE_AS4 466
#define NOTE_B4  494
#define NOTE_C5  523
#define NOTE_CS5 554
#define NOTE_D5  587
#define NOTE_DS5 622
#define NOTE_E5  659
#define NOTE_F5  698
#define NOTE_FS5 740
#define NOTE_G5  784
#define NOTE_GS5 831
#define NOTE_A5  880
#define NOTE_AS5 932
#define NOTE_B5  988
#define NOTE_C6  1047
#define NOTE_CS6 1109
#define NOTE_D6  1175
#define NOTE_DS6 1245
#define NOTE_E6  1319
#define NOTE_F6  1397
#define NOTE_FS6 1480
#define NOTE_G6  1568
#define NOTE_GS6 1661
#define NOTE_A6  1760
#define NOTE_AS6 1865
#define NOTE_B6  1976
#define NOTE_C7  2093
#define NOTE_CS7 2217
#define NOTE_D7  2349
#define NOTE_DS7 2489
#define NOTE_E7  2637
#define NOTE_F7  2794
#define NOTE_FS7 2960
#define NOTE_G7  3136
#define NOTE_GS7 3322
#define NOTE_A7  3520
#define NOTE_AS7 3729
#define NOTE_B7  3951

int notes[] = { 0,
  NOTE_C4, NOTE_CS4, NOTE_D4, NOTE_DS4, NOTE_E4, NOTE_F4, NOTE_FS4, NOTE_G4, NOTE_GS4, NOTE_A4, NOTE_AS4, NOTE_B4,
  NOTE_C5, NOTE_CS5, NOTE_D5, NOTE_DS5, NOTE_E5, NOTE_F5, NOTE_FS5, NOTE_G5, NOTE_GS5, NOTE_A5, NOTE_AS5, NOTE_B5,
  NOTE_C6, NOTE_CS6, NOTE_D6, NOTE_DS6, NOTE_E6, NOTE_F6, NOTE_FS6, NOTE_G6, NOTE_GS6, NOTE_A6, NOTE_AS6, NOTE_B6,
  NOTE_C7, NOTE_CS7, NOTE_D7, NOTE_DS7, NOTE_E7, NOTE_F7, NOTE_FS7, NOTE_G7, NOTE_GS7, NOTE_A7, NOTE_AS7, NOTE_B7
};

int iteration = 0;

void setup(){
  Serial.begin(9600);
  Serial.println("Start");
  pinMode(BEEP_PIN, OUTPUT);
  pinMode(ON_PIN, INPUT);
  pinMode(OFF_PIN, INPUT);
}

void loop(){
  int on_pin_stat = digitalRead(ON_PIN);
  if(HIGH == on_pin_stat){
    if(iteration >= song_len) iteration = 0;
    Serial.println(iteration);
    play_rtttl(iteration);
    delay(DELAY_ITERATION);
    ++iteration;
  }
  else delay(10);
}

void play_rtttl(int num){
  char song = getSong(num);
  Serial.println(song);
}

 

MaksVV
Offline
Зарегистрирован: 06.08.2015
#define DELAY_ITERATION 1000 // Время каждой итерации
#define BEEP_PIN 12 // Пин динамика
#define ON_PIN 10 // Пин тригер включения воспроизведения
#define OFF_PIN 11 // Пин тригер выключения воспроизведения

#define OCTAVE_OFFSET 0 // ?

int song_len = 6;
char getSong(int num){
  if(0 == num) return F("GoodBad:d=4,o=5,b=56:32p,32a#,32d#6,32a#,32d#6,8a#.,16f#.,16g#.,d#,32a#,32d#6,32a#,32d#6,8a#.,16f#.,16g#.,c#6,32a#,32d#6,32a#,32d#6,8a#.,16f#.,32f.,32d#.,c#,32a#,32d#6,32a#,32d#6,8a#.,16g#.,d#");
  else if(1 == num) return F("Entertainer:d=4,o=5,b=140:8d,8d#,8e,c6,8e,c6,8e,2c.6,8c6,8d6,8d#6,8e6,8c6,8d6,e6,8b,d6,2c6,p,8d,8d#,8e,c6,8e,c6,8e,2c.6,8p,8a,8g,8f#,8a,8c6,e6,8d6,8c6,8a,2d6");
  else if(2 == num) return F("StarWars:d=4,o=5,b=45:32p,32f#,32f#,32f#,8b.,8f#.6,32e6,32d#6,32c#6,8b.6,16f#.6,32e6,32d#6,32c#6,8b.6,16f#.6,32e6,32d#6,32e6,8c#.6,32f#,32f#,32f#,8b.,8f#.6,32e6,32d#6,32c#6,8b.6,16f#.6,32e6,32d#6,32c#6,8b.6,16f#.6,32e6,32d#6,32e6,8c#6");
  else if(3 == num) return F("Indiana:d=4,o=5,b=250:e,8p,8f,8g,8p,1c6,8p.,d,8p,8e,1f,p.,g,8p,8a,8b,8p,1f6,p,a,8p,8b,2c6,2d6,2e6,e,8p,8f,8g,8p,1c6,p,d6,8p,8e6,1f.6,g,8p,8g,e.6,8p,d6,8p,8g,e.6,8p,d6,8p,8g,f.6,8p,e6,8p,8d6,2c6");
  else if(4 == num) return F("Flinstones:d=4,o=5,b=40:32p,16f6,16a#,16a#6,32g6,16f6,16a#.,16f6,32d#6,32d6,32d6,32d#6,32f6,16a#,16c6,d6,16f6,16a#.,16a#6,32g6,16f6,16a#.,32f6,32f6,32d#6,32d6,32d6,32d#6,32f6,16a#,16c6,a#,16a6,16d.6,16a#6,32a6,32a6,32g6,32f#6,32a6,8g6,16g6,16c.6,32a6,32a6,32g6,32g6,32f6,32e6,32g6,8f6,16f6,16a#.,16a#6,32g6,16f6,16a#.,16f6,32d#6,32d6,32d6,32d#6,32f6,16a#,16c.6,32d6,32d#6,32f6,16a#,16c.6,32d6,32d#6,32f6,16a#6,16c7,8a#.6");
  else if(5 == num) return F("MissionImp:d=16,o=6,b=95:32d,32d#,32d,32d#,32d,32d#,32d,32d#,32d,32d,32d#,32e,32f,32f#,32g,g,8p,g,8p,a#,p,c7,p,g,8p,g,8p,f,p,f#,p,g,8p,g,8p,a#,p,c7,p,g,8p,g,8p,f,p,f#,p,a#,g,2d,32p,a#,g,2c#,32p,a#,g,2c,a#5,8c,2p,32p,a#5,g5,2f#,32p,a#5,g5,2f,32p,a#5,g5,2e,d#,8d");
}

#define NOTE_C4  262
#define NOTE_CS4 277
#define NOTE_D4  294
#define NOTE_DS4 311
#define NOTE_E4  330
#define NOTE_F4  349
#define NOTE_FS4 370
#define NOTE_G4  392
#define NOTE_GS4 415
#define NOTE_A4  440
#define NOTE_AS4 466
#define NOTE_B4  494
#define NOTE_C5  523
#define NOTE_CS5 554
#define NOTE_D5  587
#define NOTE_DS5 622
#define NOTE_E5  659
#define NOTE_F5  698
#define NOTE_FS5 740
#define NOTE_G5  784
#define NOTE_GS5 831
#define NOTE_A5  880
#define NOTE_AS5 932
#define NOTE_B5  988
#define NOTE_C6  1047
#define NOTE_CS6 1109
#define NOTE_D6  1175
#define NOTE_DS6 1245
#define NOTE_E6  1319
#define NOTE_F6  1397
#define NOTE_FS6 1480
#define NOTE_G6  1568
#define NOTE_GS6 1661
#define NOTE_A6  1760
#define NOTE_AS6 1865
#define NOTE_B6  1976
#define NOTE_C7  2093
#define NOTE_CS7 2217
#define NOTE_D7  2349
#define NOTE_DS7 2489
#define NOTE_E7  2637
#define NOTE_F7  2794
#define NOTE_FS7 2960
#define NOTE_G7  3136
#define NOTE_GS7 3322
#define NOTE_A7  3520
#define NOTE_AS7 3729
#define NOTE_B7  3951

int notes[] = { 0,
  NOTE_C4, NOTE_CS4, NOTE_D4, NOTE_DS4, NOTE_E4, NOTE_F4, NOTE_FS4, NOTE_G4, NOTE_GS4, NOTE_A4, NOTE_AS4, NOTE_B4,
  NOTE_C5, NOTE_CS5, NOTE_D5, NOTE_DS5, NOTE_E5, NOTE_F5, NOTE_FS5, NOTE_G5, NOTE_GS5, NOTE_A5, NOTE_AS5, NOTE_B5,
  NOTE_C6, NOTE_CS6, NOTE_D6, NOTE_DS6, NOTE_E6, NOTE_F6, NOTE_FS6, NOTE_G6, NOTE_GS6, NOTE_A6, NOTE_AS6, NOTE_B6,
  NOTE_C7, NOTE_CS7, NOTE_D7, NOTE_DS7, NOTE_E7, NOTE_F7, NOTE_FS7, NOTE_G7, NOTE_GS7, NOTE_A7, NOTE_AS7, NOTE_B7
};

int iteration = 0;

void setup(){
  Serial.begin(9600);
  Serial.println("Start");
  pinMode(BEEP_PIN, OUTPUT);
  pinMode(ON_PIN, INPUT);
  pinMode(OFF_PIN, INPUT);
}

void loop(){
  int on_pin_stat = digitalRead(ON_PIN);
  if(HIGH == on_pin_stat){
    if(iteration >= song_len) iteration = 0;
    Serial.println(iteration);
    play_rtttl(iteration);
    delay(DELAY_ITERATION);
    ++iteration;
  }
  else delay(10);
}

void play_rtttl(int num){
  char song = getSong(num);
  Serial.println(song);
}

 

sadman41
Offline
Зарегистрирован: 19.10.2016

Разместить через PROGMEM. Прежде чем спросить "А как это?", воспользуйтесь, пожалуйста, Яндексом.

clgs
Offline
Зарегистрирован: 20.11.2018

MaksVV, Спасибо!

clgs
Offline
Зарегистрирован: 20.11.2018

sadman41 пишет:

Разместить через PROGMEM. Прежде чем спросить "А как это?", воспользуйтесь, пожалуйста, Яндексом.

2 часа гугления без толку.. MaksVV помог, ему спасибо. sadman41, а вам минус, за то что слишком умничаете. Не всё можно найти в поиске, особенно если не понимаешь как искать. А как я понимал, все варианты перепробывал и не нашел. Может вы мне покажете как надо искать?

b707
Offline
Зарегистрирован: 26.05.2017

clgs пишет:

2 часа гугления без толку..

только не надо врать про 2 часа. Между ответом sadman41 и вашей претензией и 10 минут не прошло. Вы хотя бы попробуйте поискать, прежде чем наезжать на тех, кто помогает.

clgs
Offline
Зарегистрирован: 20.11.2018
b707, вы прикалываетесь? Вопрос задаётся не просто так! До вопроса я пытался решить проблему, а не после!
 
И если вы будете внимательны, то увидите, я скачал спасибо тому кто помог.
b707
Offline
Зарегистрирован: 26.05.2017

кстати, код не рабочий, даже без учета памяти. Тип char, который возвращает ваша функция - это один символ, а вы в него пытаетесь всю песню запихнуть.

Посмотрите внимательно на тот скетч, с которого вы слизали свой -там все правильно.

MaksVV
Offline
Зарегистрирован: 06.08.2015

а вы уверены что ваш изначальный скетч работает? 

b707
Offline
Зарегистрирован: 26.05.2017

clgs пишет:

b707, вы прикалываетесь? Вопрос задаётся не просто так! До вопроса я пытался решить проблему, а не после!

я не прикалываюсь. Вам дали ключевое слово для поиска - правильное  слово - и попросили сначала поискать в гугле , а не задавать сразу глупых вопросов типа "а что это? как использовать?"

MaksVV
Offline
Зарегистрирован: 06.08.2015

сдается мне, что он в сериал никакие ваши строки не отпраляет

clgs
Offline
Зарегистрирован: 20.11.2018

MaksVV пишет:

а вы уверены что ваш изначальный скетч работает? 

Нет, даже не заливал, т.к. искал возможность сократить память. Сейчас заменил char на String и всё как надо.

 

MaksVV
Offline
Зарегистрирован: 06.08.2015

если по дурацки то заменить char на String и будет работать. 

#define DELAY_ITERATION 1000 // Время каждой итерации
#define BEEP_PIN 12 // Пин динамика
#define ON_PIN 10 // Пин тригер включения воспроизведения
#define OFF_PIN 11 // Пин тригер выключения воспроизведения

#define OCTAVE_OFFSET 0 // ?

int song_len = 6;
String getSong(int num){
  if(0 == num) return F("GoodBad:d=4,o=5,b=56:32p,32a#,32d#6,32a#,32d#6,8a#.,16f#.,16g#.,d#,32a#,32d#6,32a#,32d#6,8a#.,16f#.,16g#.,c#6,32a#,32d#6,32a#,32d#6,8a#.,16f#.,32f.,32d#.,c#,32a#,32d#6,32a#,32d#6,8a#.,16g#.,d#");
  else if(1 == num) return F("Entertainer:d=4,o=5,b=140:8d,8d#,8e,c6,8e,c6,8e,2c.6,8c6,8d6,8d#6,8e6,8c6,8d6,e6,8b,d6,2c6,p,8d,8d#,8e,c6,8e,c6,8e,2c.6,8p,8a,8g,8f#,8a,8c6,e6,8d6,8c6,8a,2d6");
  else if(2 == num) return F("StarWars:d=4,o=5,b=45:32p,32f#,32f#,32f#,8b.,8f#.6,32e6,32d#6,32c#6,8b.6,16f#.6,32e6,32d#6,32c#6,8b.6,16f#.6,32e6,32d#6,32e6,8c#.6,32f#,32f#,32f#,8b.,8f#.6,32e6,32d#6,32c#6,8b.6,16f#.6,32e6,32d#6,32c#6,8b.6,16f#.6,32e6,32d#6,32e6,8c#6");
  else if(3 == num) return F("Indiana:d=4,o=5,b=250:e,8p,8f,8g,8p,1c6,8p.,d,8p,8e,1f,p.,g,8p,8a,8b,8p,1f6,p,a,8p,8b,2c6,2d6,2e6,e,8p,8f,8g,8p,1c6,p,d6,8p,8e6,1f.6,g,8p,8g,e.6,8p,d6,8p,8g,e.6,8p,d6,8p,8g,f.6,8p,e6,8p,8d6,2c6");
  else if(4 == num) return F("Flinstones:d=4,o=5,b=40:32p,16f6,16a#,16a#6,32g6,16f6,16a#.,16f6,32d#6,32d6,32d6,32d#6,32f6,16a#,16c6,d6,16f6,16a#.,16a#6,32g6,16f6,16a#.,32f6,32f6,32d#6,32d6,32d6,32d#6,32f6,16a#,16c6,a#,16a6,16d.6,16a#6,32a6,32a6,32g6,32f#6,32a6,8g6,16g6,16c.6,32a6,32a6,32g6,32g6,32f6,32e6,32g6,8f6,16f6,16a#.,16a#6,32g6,16f6,16a#.,16f6,32d#6,32d6,32d6,32d#6,32f6,16a#,16c.6,32d6,32d#6,32f6,16a#,16c.6,32d6,32d#6,32f6,16a#6,16c7,8a#.6");
  else if(5 == num) return F("MissionImp:d=16,o=6,b=95:32d,32d#,32d,32d#,32d,32d#,32d,32d#,32d,32d,32d#,32e,32f,32f#,32g,g,8p,g,8p,a#,p,c7,p,g,8p,g,8p,f,p,f#,p,g,8p,g,8p,a#,p,c7,p,g,8p,g,8p,f,p,f#,p,a#,g,2d,32p,a#,g,2c#,32p,a#,g,2c,a#5,8c,2p,32p,a#5,g5,2f#,32p,a#5,g5,2f,32p,a#5,g5,2e,d#,8d");
}

#define NOTE_C4  262
#define NOTE_CS4 277
#define NOTE_D4  294
#define NOTE_DS4 311
#define NOTE_E4  330
#define NOTE_F4  349
#define NOTE_FS4 370
#define NOTE_G4  392
#define NOTE_GS4 415
#define NOTE_A4  440
#define NOTE_AS4 466
#define NOTE_B4  494
#define NOTE_C5  523
#define NOTE_CS5 554
#define NOTE_D5  587
#define NOTE_DS5 622
#define NOTE_E5  659
#define NOTE_F5  698
#define NOTE_FS5 740
#define NOTE_G5  784
#define NOTE_GS5 831
#define NOTE_A5  880
#define NOTE_AS5 932
#define NOTE_B5  988
#define NOTE_C6  1047
#define NOTE_CS6 1109
#define NOTE_D6  1175
#define NOTE_DS6 1245
#define NOTE_E6  1319
#define NOTE_F6  1397
#define NOTE_FS6 1480
#define NOTE_G6  1568
#define NOTE_GS6 1661
#define NOTE_A6  1760
#define NOTE_AS6 1865
#define NOTE_B6  1976
#define NOTE_C7  2093
#define NOTE_CS7 2217
#define NOTE_D7  2349
#define NOTE_DS7 2489
#define NOTE_E7  2637
#define NOTE_F7  2794
#define NOTE_FS7 2960
#define NOTE_G7  3136
#define NOTE_GS7 3322
#define NOTE_A7  3520
#define NOTE_AS7 3729
#define NOTE_B7  3951

int notes[] = { 0,
  NOTE_C4, NOTE_CS4, NOTE_D4, NOTE_DS4, NOTE_E4, NOTE_F4, NOTE_FS4, NOTE_G4, NOTE_GS4, NOTE_A4, NOTE_AS4, NOTE_B4,
  NOTE_C5, NOTE_CS5, NOTE_D5, NOTE_DS5, NOTE_E5, NOTE_F5, NOTE_FS5, NOTE_G5, NOTE_GS5, NOTE_A5, NOTE_AS5, NOTE_B5,
  NOTE_C6, NOTE_CS6, NOTE_D6, NOTE_DS6, NOTE_E6, NOTE_F6, NOTE_FS6, NOTE_G6, NOTE_GS6, NOTE_A6, NOTE_AS6, NOTE_B6,
  NOTE_C7, NOTE_CS7, NOTE_D7, NOTE_DS7, NOTE_E7, NOTE_F7, NOTE_FS7, NOTE_G7, NOTE_GS7, NOTE_A7, NOTE_AS7, NOTE_B7
};

int iteration = 0;

void setup(){
  Serial.begin(9600);
  Serial.println("Start");
  pinMode(BEEP_PIN, OUTPUT);
  pinMode(ON_PIN, INPUT);
  pinMode(OFF_PIN, INPUT);
}

void loop(){
  int on_pin_stat = digitalRead(ON_PIN);
  if(HIGH == on_pin_stat){
    if(iteration >= song_len) iteration = 0;
    Serial.println(iteration);
    play_rtttl(iteration);
    delay(DELAY_ITERATION);
    ++iteration;
  }
  else delay(10);
}

void play_rtttl(int num){
  
  Serial.println(getSong(num));
}

 

b707
Offline
Зарегистрирован: 26.05.2017

clgs пишет:

Нет, даже не заливал, т.к. искал возможность сократить память. Сейчас заменил char на String и всё как надо.

 

Ответ на вопрос "Куда делась память?" надеюсь, уже сами нашли?

clgs
Offline
Зарегистрирован: 20.11.2018

b707 пишет:

clgs пишет:

b707, вы прикалываетесь? Вопрос задаётся не просто так! До вопроса я пытался решить проблему, а не после!

я не прикалываюсь. Вам дали ключевое слово для поиска - правильное  слово - и попросили сначала поискать в гугле , а не задавать сразу глупых вопросов типа "а что это? как использовать?"

b707, не хочу разводить холивар, но ключевое слов и посыл на яндекс это одно сообщение. Нужно подсказать было, а если стал дальше задавать глупые вопросы, то можно и в яндекс послать. Но в данном случае, это было одно сообщение. Поэтому я вполне аргументированно выразил недовольства. На этом считаю данную тему закрытой.

clgs
Offline
Зарегистрирован: 20.11.2018

b707 пишет:

clgs пишет:

Нет, даже не заливал, т.к. искал возможность сократить память. Сейчас заменил char на String и всё как надо.

 

Ответ на вопрос "Куда делась память?" надеюсь, уже сами нашли?

Может я делаю что-то не так)) Но в консоле я увидел все "песни" которые и планировалось увидеть. https://yadi.sk/i/_y_qUb_raV1WFg

 

b707
Offline
Зарегистрирован: 26.05.2017

clgs пишет:

b707, не хочу разводить холивар, но ключевое слов и посыл на яндекс это одно сообщение. Нужно подсказать было, а если стал дальше задавать глупые вопросы, то можно и в яндекс послать. Но в данном случае, это было одно сообщение. Поэтому я вполне аргументированно выразил недовольства. На этом считаю данную тему закрытой.

вот и не разводите. "Посыл в Яндекс" - это уже стало оскорблением, что ли? тем более посыл абсолютно корректный, даже через "пожалуйста".

 Надо быть благодарным. что вам дали четкий ориентир, что искать. На самом деле в 95% вопросов на форуме ничего больше и не требуется.

b707
Offline
Зарегистрирован: 26.05.2017

clgs пишет:

Может я делаю что-то не так)) Но в консоле я увидел все "песни" которые и планировалось увидеть. https://yadi.sk/i/_y_qUb_raV1WFg

если это ответ на ту строчку, которой теперь нет в сообщении - то это я не туда посмотрел. Как видите, я успел ее стереть сам, после ответа уже не смог бы.

Ну так почему мало памяти - поняли?

clgs
Offline
Зарегистрирован: 20.11.2018

Ещё раз всем спасибо! MaksVV как не крути помог без лишних слов, огромное ему спасибо.

b707
Offline
Зарегистрирован: 26.05.2017

clgs пишет:

Ещё раз всем спасибо! MaksVV как не крути помог без лишних слов, огромное ему спасибо.

ну на самом деле он этим нарущил этикет форума :) - потому как правильнее было бы заставить вас самостоятельно найти свои ошибки, а так вы наверняка почти ничего не запомнили и не поняли.

clgs
Offline
Зарегистрирован: 20.11.2018

b707 пишет:

Ну так почему мало памяти - поняли?

Честно? Даже не хочу разбираться, сделал, спросил, поправил, работает. А большего и не надо. Если ещё будет проблемы с памятью, то буду вникать дальше. Но просто как-то не логично получается...

b707
Offline
Зарегистрирован: 26.05.2017

clgs пишет:

Честно? Даже не хочу разбираться, сделал, спросил, поправил, работает. А большего и не надо. Если ещё будет проблемы с памятью, то буду вникать дальше. Но просто как-то не логично получается...

вооот! про это я и написал сообщением раньше. Максу строгий выговор с занесением за выдачу новичку готового ответа без принудительного изучения новичком теории.

Новички - они ж такие - получил ответ и убежал, нифига не поняв. С таким подходом еще раз десять придете с элментарными вопросами...

clgs
Offline
Зарегистрирован: 20.11.2018

b707 пишет:

вооот! про это я и написал сообщением раньше. Максу строгий выговор с занесением за выдачу новичку готового ответа без принудительного изучения новичком теории.

Новички - они ж такие - получил ответ и убежал, нифига не поняв. С таким подходом еще раз десять придете с элментарными вопросами...

Это был вопрос из область "элементарные вопросы" ? Вы профи в этом и вам элементарно. А что я вижу: вижу лёгкие глобальные переменные, функции и локальные переменные. А он какого-то фига пишет что юзаю глобальные... Как-то не логично.

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

clgs пишет:

Это был вопрос из область "элементарные вопросы" ? Вы профи в этом и вам элементарно. А что я вижу: вижу лёгкие глобальные переменные, функции и локальные переменные. А он какого-то фига пишет что юзаю глобальные... Как-то не логично.

Логика?

Извольте!

Где размещаются локальные переменные?

В стеке.

Нужна ли под них глобальная память?

Не нужна.

Почему?

--- ответьте на этот вопрос, исходя из логики

А могут ли "локальные" константы размещаться там же?

--- ответьте на этот вопрос

Почему?

--- ответьте на этот вопрос

clgs
Offline
Зарегистрирован: 20.11.2018

andriano пишет:

Логика?

Извольте!

Где размещаются локальные переменные?

В стеке.

Вот я и говорю, вы иначе мыслите.

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Хорошо, давайте зайдем с другой стороны: если у нас обычная неинициализированная переменная, она у нас появляется только в момент вызова функции и потом исчезает. А в случае с константой - где-то надо хранить то значение, которым эту константу инициализировать. Вот оно память и занимает.

clgs
Offline
Зарегистрирован: 20.11.2018

andriano пишет:

Хорошо, давайте зайдем с другой стороны: если у нас обычная неинициализированная переменная, она у нас появляется только в момент вызова функции и потом исчезает. А в случае с константой - где-то надо хранить то значение, которым эту константу инициализировать. Вот оно память и занимает.

Так у меня функция хранящая строки (не в переменной) и переменная внутри функции другой функции, которая принимает разные значения, а не хранит все варианты значений. Причем тут константа?

sadman41
Offline
Зарегистрирован: 19.10.2016

clgs пишет:

sadman41 пишет:

Разместить через PROGMEM. Прежде чем спросить "А как это?", воспользуйтесь, пожалуйста, Яндексом.

2 часа гугления без толку..

...

Может вы мне покажете как надо искать?

Не трындите. С самого верха начинается и описание и примеры: https://yandex.ru/search/?text=PROGMEM&&lr=19

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

clgs, то, что у Вас изображено в строках с 10 по 15 - это константы. Где, по-вашему, должны храниться все те байтики, из которых эти константы состоят?

clgs
Offline
Зарегистрирован: 20.11.2018

andriano пишет:

clgs, то, что у Вас изображено в строках с 10 по 15 - это константы. Где, по-вашему, должны храниться все те байтики, из которых эти константы состоят?

И опять же, причем тут это? Проблема в другом. К этим константам вопросов нет. Эти константы NOTE_* и int notes[] вообще можно удалить, суть останется не изменной.

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

тебе вот про это говорят:

"GoodBad:d=4,o=5,b=56:32p,32a#,32d#6,32a#,32d#6,8a#.,16f#.,16g#.,d#,32a#,32d#6,32a#,32d#6,8a#.......

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

как ты думаешь, где вот это вот всё храница?

clgs
Offline
Зарегистрирован: 20.11.2018

DetSimen пишет:

тебе вот про это говорят:

"GoodBad:d=4,o=5,b=56:32p,32a#,32d#6,32a#,32d#6,8a#.,16f#.,16g#.,d#,32a#,32d#6,32a#,32d#6,8a#.......

Ну, строки в функции? Или они являются константами? =)

b707
Offline
Зарегистрирован: 26.05.2017

clgs пишет:

И опять же, причем тут это? Проблема в другом. К этим константам вопросов нет. Эти константы NOTE_* и int notes[] вообще можно удалить, суть останется не изменной.

вы хотя бы читаете то, что вам пишут? - речь не про NOTE_*, а про ваши песенки в строка с 10 по 16-ую скетча из первого сообщения.

Вместо того, чтоб тупо спорить - давно б книжку какую почитали

b707
Offline
Зарегистрирован: 26.05.2017

clgs пишет:

Ну, строки в функции? Или они являются константами? =)

ну тупой.... дошло наконец?

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

clgs пишет:

Вот я и говорю, вы иначе мыслите.

Вот и весь форум тебе то же самое говорит. 

clgs
Offline
Зарегистрирован: 20.11.2018

DetSimen пишет:

как ты думаешь, где вот это вот всё храница?

Я так думаю что в коде программы, т.к. это всего лишь строки, а не значение переменных или констант.

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

это инициализированная константа и таки ты не поверишь она храница 2 раза, и в коде и в памяти.  

Хоть бы какой Коран по языку почитал, штоли

clgs
Offline
Зарегистрирован: 20.11.2018

DetSimen пишет:

это инициализированная константа и таки ты не поверишь она храница 2 раза, и в коде и в памяти.  

Спасибо! Теперь ясно.

b707
Offline
Зарегистрирован: 26.05.2017

clgs пишет:

Я так думаю что в коде программы, т.к. это всего лишь строки, а не значение переменных или констант.

когда ты их запишешь через F(). они будут хранится в коде, а пока они занимают оперативку

Коллеги, по-моему это тупой троллинг кого-то из местных. таких упертых и тупых новичков не быыает

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Почитай теперь чонить за PROGMEM 

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

а он мошт не тупой, а альтернативно мыслящий

clgs
Offline
Зарегистрирован: 20.11.2018

DetSimen пишет:

а он мошт не тупой, а альтернативно мыслящий

Зачет :-D

clgs
Offline
Зарегистрирован: 20.11.2018

b707 пишет:

когда ты их запишешь через F(). они будут хранится в коде, а пока они занимают оперативку

Коллеги, по-моему это тупой троллинг кого-то из местных. таких упертых и тупых новичков не быыает

Я WEB программист (PHP и JS). Там всё иначе, отсюда такие пролемы с пониманием иной реальности =)

А то что нужно почитать, согласен. Думал освою на практике, но не всё тут так как думалось.

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

clgs пишет:

Я WEB программист (PHP и JS). Там всё иначе, отсюда такие пролемы с пониманием иной реальности =)

А то что нужно почитать, согласен. Думал освою на практике, но не всё тут так как думалось.

Дальше не продолжай, здесь это фактически диагноз и приговор.  

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

clgs пишет:

DetSimen пишет:

как ты думаешь, где вот это вот всё храница?

Я так думаю что в коде программы, т.к. это всего лишь строки, а не значение переменных или констант.

А компилятору это откуда известно?

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

попробуй так, сколько места занимать будет? 

using  PFlashString = const __FlashStringHelper * ;  // указатель на строку в PROGMEM

int song_len = 6;

PFlashString getSong(int num) {
	if (0 == num) return F("GoodBad:d=4,o=5,b=56:32p,32a#,32d#6,32a#,32d#6,8a#.,16f#.,16g#.,d#,32a#,32d#6,32a#,32d#6,8a#.,16f#.,16g#.,c#6,32a#,32d#6,32a#,32d#6,8a#.,16f#.,32f.,32d#.,c#,32a#,32d#6,32a#,32d#6,8a#.,16g#.,d#");
	else if (1 == num) return F("Entertainer:d=4,o=5,b=140:8d,8d#,8e,c6,8e,c6,8e,2c.6,8c6,8d6,8d#6,8e6,8c6,8d6,e6,8b,d6,2c6,p,8d,8d#,8e,c6,8e,c6,8e,2c.6,8p,8a,8g,8f#,8a,8c6,e6,8d6,8c6,8a,2d6");
	else if (2 == num) return F("StarWars:d=4,o=5,b=45:32p,32f#,32f#,32f#,8b.,8f#.6,32e6,32d#6,32c#6,8b.6,16f#.6,32e6,32d#6,32c#6,8b.6,16f#.6,32e6,32d#6,32e6,8c#.6,32f#,32f#,32f#,8b.,8f#.6,32e6,32d#6,32c#6,8b.6,16f#.6,32e6,32d#6,32c#6,8b.6,16f#.6,32e6,32d#6,32e6,8c#6");
	else if (3 == num) return F("Indiana:d=4,o=5,b=250:e,8p,8f,8g,8p,1c6,8p.,d,8p,8e,1f,p.,g,8p,8a,8b,8p,1f6,p,a,8p,8b,2c6,2d6,2e6,e,8p,8f,8g,8p,1c6,p,d6,8p,8e6,1f.6,g,8p,8g,e.6,8p,d6,8p,8g,e.6,8p,d6,8p,8g,f.6,8p,e6,8p,8d6,2c6");
	else if (4 == num) return F("Flinstones:d=4,o=5,b=40:32p,16f6,16a#,16a#6,32g6,16f6,16a#.,16f6,32d#6,32d6,32d6,32d#6,32f6,16a#,16c6,d6,16f6,16a#.,16a#6,32g6,16f6,16a#.,32f6,32f6,32d#6,32d6,32d6,32d#6,32f6,16a#,16c6,a#,16a6,16d.6,16a#6,32a6,32a6,32g6,32f#6,32a6,8g6,16g6,16c.6,32a6,32a6,32g6,32g6,32f6,32e6,32g6,8f6,16f6,16a#.,16a#6,32g6,16f6,16a#.,16f6,32d#6,32d6,32d6,32d#6,32f6,16a#,16c.6,32d6,32d#6,32f6,16a#,16c.6,32d6,32d#6,32f6,16a#6,16c7,8a#.6");
	else if (5 == num) return F("MissionImp:d=16,o=6,b=95:32d,32d#,32d,32d#,32d,32d#,32d,32d#,32d,32d,32d#,32e,32f,32f#,32g,g,8p,g,8p,a#,p,c7,p,g,8p,g,8p,f,p,f#,p,g,8p,g,8p,a#,p,c7,p,g,8p,g,8p,f,p,f#,p,a#,g,2d,32p,a#,g,2c#,32p,a#,g,2c,a#5,8c,2p,32p,a#5,g5,2f#,32p,a#5,g5,2f,32p,a#5,g5,2e,d#,8d");
	return NULL;
}

 

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

DetSimen пишет:

clgs пишет:

Я WEB программист (PHP и JS). Там всё иначе, отсюда такие пролемы с пониманием иной реальности =)

А то что нужно почитать, согласен. Думал освою на практике, но не всё тут так как думалось.

Дальше не продолжай, здесь это фактически диагноз и приговор.  

Не, деда, я тож владею PHP и JS, это ещё не приговор :) Приговор - в отсутствии системного подхода к знаниям, это тенденция не первых лет уже, к сожалению. И, похоже, это уже скорее правило, чем исключение, поэтому - придётся мамонтам либо привыкать, либо вымирать. Что касается меня лично - похоже, я быстрее вымру, чем привыкну :)

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

clgs пишет:

Я WEB программист (PHP и JS).

Собственно это всё, что нужно знать о современном вебе! ;)

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

ua6em пишет:

clgs пишет:

DetSimen пишет:

как ты думаешь, где вот это вот всё храница?

Я так думаю что в коде программы, т.к. это всего лишь строки, а не значение переменных или констант.

А компилятору это откуда известно?

Из объявлений, тащемта. Когда парсер разбирает код, он строит AST, в котором хранится всякая магия. При том, что возвращаемое значение функции описано как char - не запрещает парсеру понимать, что внутри функции описаны строковые литералы, а из функции надо просто возвратить первый символ такого литерала.

Короче - авада кедавра :)

clgs
Offline
Зарегистрирован: 20.11.2018

DetSimen пишет:

попробуй так, сколько места занимать будет? 

Глобальные переменные используют 210 байт (10%) динамической памяти

т.е. не изменилось ВООБЩЕ, по отношению с использованием F.