Проблема с массивами.

Шестерин
Offline
Зарегистрирован: 22.06.2014

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

#include <Servo.h>
Servo Leftlung, Rightlung, Leftknee, Rightknee, Leftfoot, Rightfoot, Backknee, Backfoot, Backbody, Gun;
byte LeftlungAngle, RightlungAngle, LeftkneeAngle, RightkneeAngle, LeftfootAngle, RightfootAngle, BackkneeAngle, BackbodyAngle, BackfootAngle, GunAngle;
int countup,
Leftlungarray,
Rightlungarray,
Backbodyarray,
Leftkneearray,
Rightkneearray,
Backkneearray,
Leftfootarray, 
Rightfootarray,
Backfootarray,
Gunarray,
awake[4000] = {
дофига элементов       
};  
void setup()
{
Leftlung.attach(45);
Rightlung.attach(30);
Backbody.attach(44);
Leftknee.attach(41);
Rightknee.attach(34);
Backknee.attach(31);
Leftfoot.attach(42);
Rightfoot.attach(33);
Backfoot.attach(43);
Gun.attach(32);
Leftlungarray = 0;
Rightlungarray = 1;
Backbodyarray = 2;
Leftkneearray = 3;
Rightkneearray = 4;
Backkneearray = 5;
Leftfootarray = 6;
Rightfootarray = 7;
Backfootarray = 8;
Gunarray =9;
countup = 0;
}
void loop() 
    LeftlungAngle = awake[Leftlungarray] ;
    RightlungAngle = awake[Rightlungarray];
    BackbodyAngle = awake[Backbodyarray];
    LeftkneeAngle = awake[Leftkneearray];
    RightkneeAngle = awake[Rightkneearray];
    BackkneeAngle = awake[Backkneearray];
    LeftfootAngle = awake[Leftfootarray];
    RightfootAngle = awake[Rightfootarray];
    BackfootAngle = awake[Backfootarray];
    GunAngle = awake[Gunarray];
    Leftlungarray = (Leftlungarray + 10);
    Rightlungarray = (Rightlungarray + 10);
    Backbodyarray = (Backbodyarray + 10);
    Leftkneearray = (Leftkneearray + 10);
    Rightkneearray = (Rightkneearray + 10);
    Backkneearray = (Backkneearray + 10);
    Leftfootarray = (Leftfootarray+ 10);
    Rightfootarray = (Rightfootarray + 10);
    Backfootarray = (Backfootarray + 10);
    Gunarray = (Gunarray + 10);
 
 
  Leftlung.write(LeftlungAngle); 
  Rightlung.write(RightlungAngle); 
  Backbody.write(BackbodyAngle); 
  Leftknee.write(LeftkneeAngle); 
  Rightknee.write(RightkneeAngle); 
  Backknee.write(BackkneeAngle); 
  Leftfoot.write(LeftfootAngle);
  Rightfoot.write(RightfootAngle); 
  Backfoot.write(BackfootAngle);
  Gun.write(GunAngle); 
  countup = (countup + 1);  
  delay(10);
}
__Alexander
Offline
Зарегистрирован: 24.10.2012

дык понятное дело. а озу сколько?

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

>> Servo Gun;

оптимистично.

leshak
Offline
Зарегистрирован: 29.09.2011

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

Для общения с начальством новоиспеченный
программист быстро выучил английскую фразу "летмишоую" (сейчас покажу),
за которой следовала демонстрация работающего кода, и вопросов больше не
возникало.

Работа в телефонных гигантах неторопливая, но S. бездельничать не любил,
и решил заняться оптимизацией. В одном из Больших Шкафов обнаружилась
база данных, а в ней - таблица с парами чисел: 1-3, 2-6, 3-9, ... ,
1000000-3000000. Hичтоже сумняшеся, S. таблицу стер, а обращения к ней
заменил строчкой B=Ax3. Шкаф, радостно заурчав, продолжал
функционировать. Отсутствие таблицы начальство заметило (и то по чистой
случайности) через неделю. Состоялся знаменательный диалог:
- Где таблица?
- Таблица не нужна.
- Как это не нужна?
- Hу, не нужна. Летмишоую. Вот: B=Ax3
- Что это?
- Вместо таблицы.
- А где таблица?
- Я ее стер. Hе нужна.
- Как стер???
- Летмишоую. Вот, работает. B=Ax3
- Hу, работает. А где таблица-то?
...
В конце концов, проявив завидную корпоративную мудрость, начальник
оставил S. в покое. А по AB&C долго ходили легенды о сумасшедшем
бородатом русском, который ПРИДУМАЛ ФОРМУЛУ.