Проблема с обнулением массива

renoshnik
Offline
Зарегистрирован: 11.04.2013

Подскжите где косяк ....

	int tstArr[1441];
	
for (int f=0; f<=1440; f++) {
Serial.println(" OBNYLIAEM MASSIV ");
	delay(100);
		tstArr[f] = 0;	}

вот этот кусок кода "вешает" программу ....

NeiroN
NeiroN аватар
Offline
Зарегистрирован: 15.06.2013
	int tstArr[1441];
	Serial.println(" OBNYLIAEM MASSIV ");
	delay(100);

for (int f=0; f<=1440; f++) {
		tstArr[f] = 0;	}

Если delay(100); выполнить 1440 раз то так и будет)))

А еще у вас Serial лопнет от потока данных

mixail844
Offline
Зарегистрирован: 30.04.2012

1440 * 100 = 144000 мили секунд = 144 секунды = ~2.5 минуты

renoshnik
Offline
Зарегистрирован: 11.04.2013

Дело в том, что delay и Serial я сделал просто в этом примере в самом скетче такого нет, но всеравно виснит контроллер хоть так, хоть иначе....

 

NeiroN
NeiroN аватар
Offline
Зарегистрирован: 15.06.2013

а памяти у вас хватает на него?? у вас там не 4 гига ведь, а int сколько байт занимает в памяти? умножить на 1440 и добавить все остальное. Вобщем не знаете матчасть потому и не работает ...

Andrey_Y_Ostanovsky
Offline
Зарегистрирован: 03.12.2012

Я бы, на Вашем месте, выводил на печать отладочную тинформацию... Например, значение счетчика цикла.

toc
Offline
Зарегистрирован: 09.02.2013

renoshnik,

1. сколько оперативной памяти у вашего контроллера? 

2. тут почитайте http://arduino.ru/Reference/Array и http://arduino.ru/Tutorial/Memory

3. проще и быстрее обнулить массив можно приблизительно так: memset(&tstArr[0], 0, sizeof(tstArr));

renoshnik
Offline
Зарегистрирован: 11.04.2013

toc пишет:

renoshnik,

1. сколько оперативной памяти у вашего контроллера? 

2. тут почитайте http://arduino.ru/Reference/Array и http://arduino.ru/Tutorial/Memory

3. проще и быстрее обнулить массив можно приблизительно так: memset(&tstArr[0], 0, sizeof(tstArr));

 

1 - ATmega328

2 - по ссылкам не особо понял как решить проблемму. поменял где можно int на byte но ничего не изменилось

3 - в таком виде компилятор ругается. пробывал обнулить так memset(tstArr, '\0', 1441); компилятор пропустил но проблемма не решилась...

Probelzaelo
Offline
Зарегистрирован: 15.04.2011

NeiroN пишет:

	int tstArr[1441];
	Serial.println(" OBNYLIAEM MASSIV ");
	delay(100);

for (int f=0; f<=1440; f++) {
		tstArr[f] = 0;	}

Если delay(100); выполнить 1440 раз то так и будет)))

А еще у вас Serial лопнет от потока данных

Нее с учетом  delay(100) все нормально, не лопнет.

toc
Offline
Зарегистрирован: 09.02.2013

оперативной памяти у вашего контроллера 2048 байт или два килобайта.

массив byte testArr[1440] займёт три четверти объёма памяти. Массив int с таким же количеством элементов не уместится в памяти.

Скорее всего глюки из-за нехватки памяти.

renoshnik
Offline
Зарегистрирован: 11.04.2013

toc пишет:

оперативной памяти у вашего контроллера 2048 байт или два килобайта.

массив byte testArr[1440] займёт три четверти объёма памяти. Массив int с таким же количеством элементов не уместится в памяти.

Скорее всего глюки из-за нехватки памяти.

понял... прийдётся искать другое решение...