Автоматическое создание переменных. Помогите советом.

Maxim Z.
Offline
Зарегистрирован: 12.01.2016

Всем привет.

Таквой вот вопрос. Как можно реализовать следующую штуку:

При старте контроллер создает столько однотипных, глобальных переменных сколько прописано в ячейке EEPROM.

Скажем в ячейе записано 10

При старте контроллер получает 10 и создает 10 глобальных переменных например:

a1, a2, a3 ... a10

Как такое реализовать?

T.Rook
Offline
Зарегистрирован: 05.03.2016

Если переменные однотипные, то копайте в сторону массивов http://arduino.ru/Reference/Array

Logik
Offline
Зарегистрирован: 05.08.2014

byte* a=new byte(EEPROM.read(10));

a[0]=111;

a[1]=22;

Maxim Z.
Offline
Зарегистрирован: 12.01.2016

Спасибо. Работает!

Все проще, чем я думал)

Еще вопрос, а как собрать имя которое будет выводиться в Serial или станет параметром массива или строки?

Напримет: Чайник 1, Чайник 2 .... (ну в сериал оно понятно и просто, а вот если сделать ее параметром?

Maxim Z.
Offline
Зарегистрирован: 12.01.2016

Все, сам спросил, сам разобрался.

Спасибо за помощь)))

Maxim Z.
Offline
Зарегистрирован: 12.01.2016

Почему, когда тип массива задаю char и пытаюсь ввести a[0]="что то"; то выдает ошибку invalid conversion from 'const char*' to 'char'.

Как быть?

axill
Offline
Зарегистрирован: 05.09.2011

Maxim Z. пишет:

Почему, когда тип массива задаю char и пытаюсь ввести a[0]="что то"; то выдает ошибку invalid conversion from 'const char*' to 'char'.

Как быть?

потому, что char это один символ, в строка - массив символов

проще всего использовать тип String. Только учтите, что оперативной памяти у ардуины всего ничего (у UNO ее 2кб) и строками и тем более массивами строк ее моментально можно всю забить. При этом не всегда будет ругаться компилятор, часто бывает так, что вроде все работает, но глючит мама не горюй

Maxim Z.
Offline
Зарегистрирован: 12.01.2016

axill пишет:

потому, что char это один символ, в строка - массив символов

проще всего использовать тип String. Только учтите, что оперативной памяти у ардуины всего ничего (у UNO ее 2кб) и строками и тем более массивами строк ее моментально можно всю забить. При этом не всегда будет ругаться компилятор, часто бывает так, что вроде все работает, но глючит мама не горюй

Да, сталкивался с этой проблемой. Забавно получается. Вроде все как работает, а ка кто не очень.

Кстати нашел решение: char** abc=new char*[10];

P.S. Я правильно понимаю, что вообще выражение char** abc=new char*[10]; это объявления массива "abc" длиной 10, а вот abc[1],  abc[2], abc[3].. может быть без ограничения? (на сколько памяти хватит?

brokly
brokly аватар
Offline
Зарегистрирован: 08.02.2014

Ну почитайте уже чего нибудь... Ну нельзя же так... Выход за пределы массива скорее всего приведет к краху программы, то есть непредсказуемым результатам. Если объявил массив из 10 символов, то и последний символ в массиве долже иметь индекс не больше 9 !!! Это и является ограничением массива !

T.Rook
Offline
Зарегистрирован: 05.03.2016

Maxim Z. пишет:

Да, сталкивался с этой проблемой. Забавно получается. Вроде все как работает, а ка кто не очень.

Кстати нашел решение: char** abc=new char*[10];

P.S. Я правильно понимаю, что вообще выражение char** abc=new char*[10]; это объявления массива "abc" длиной 10, а вот abc[1],  abc[2], abc[3].. может быть без ограничения? (на сколько памяти хватит?

Вот, полистайте 5 раздел. А потом и остальное :) http://people.toiit.sgu.ru/Sinelnikov/PT/C/Kern_Ritch.pdf

Maxim Z.
Offline
Зарегистрирован: 12.01.2016

brokly пишет:

Выход за пределы массива скорее всего приведет к краху программы, то есть непредсказуемым результатам. Если объявил массив из 10 символов, то и последний символ в массиве долже иметь индекс не больше 9 !!! Это и является ограничением массива !

Да это я понимаю, тут вопрос про то, что в таком случае я могу задать только abc[0] ... abc[9] и каждый неограниченной длины,

или я могу задать сколь угодно abc[0] ... abc[100] но каждый из них будет ограничен 10?

T.Rook пишет:

Вот, полистайте 5 раздел. А потом и остальное :) http://people.toiit.sgu.ru/Sinelnikov/PT/C/Kern_Ritch.pdf

 

Спасибо. Выглядит полноценно и интересно)