Страница 1 из 1

Странное поведение индексной переменной массива

СообщениеДобавлено: 30 мар 2016, 11:24
mik
Заметил одну интересную особенность.
Панель MT8090XE.
С помощью макроса надо присвоить значения элементам массива.
В цикле for i ... next i присваиваю значения элементам массива.
Затем нужно присвоить другие значения элементам другого массива.
Пытаюсь присвоить значения в цикле for i ... next i - не работает.
Присваиваю значения в цикле for k ... next k - работает.
Т. е., одну и ту же индексную переменную не получается использовать в разных циклах for ... next.
Так не работает:
Код: Выделить всё
macro_command main()

short a[11]
int b[11]
char i

for i=0 to 10
j=i+1
a[j]=i*2
next i

for i=0 to 5
j=i+1
b[j]=i*100
next i

end macro_command


А так работает:
Код: Выделить всё
macro_command main()

short a[11]
int b[11]
char i
char k

for i=0 to 10
j=i+1
a[j]=i*2
next i

for k=0 to 5
j=k+1
b[j]=k*100
next k

end macro_command

Это бага или фича? (с)

Re: Странное поведение индексной переменной массива

СообщениеДобавлено: 30 мар 2016, 13:24
den_po
Опишите подробней, каким образом вы проверяли результат.

Re: Странное поведение индексной переменной массива

СообщениеДобавлено: 30 мар 2016, 13:29
Владимир_Я
Как определили что не работает? Какой тип у j? В примере j может стать равным 11, элемента a[11] не существует, так как объявили массив из 11 элементов.

Re: Странное поведение индексной переменной массива

СообщениеДобавлено: 30 мар 2016, 13:45
mik
den_po писал(а):Опишите подробней, каким образом вы проверяли результат.

Значения переменных массива a присваивались первой группе регистров панели, а значения переменных массива b присваивались второй группе регистров панели
Затем эти группы регистров отображались на панели с помощью объектов "Числа".
Хорошо было видно, что первый вариант макроса записывает значения только в переменные массива a, а второй вариант макроса записывает значения как в переменные массива a, так и в переменные массива b. Проверял с помощью офлайн-симуляции.

Сегодня проверил на другом компьютере еще раз - выяснилось, что иногда происходит запись значений в оба массива, а иногда только в один. Закономерности пока не нашел.

Re: Странное поведение индексной переменной массива

СообщениеДобавлено: 30 мар 2016, 16:48
mik
Такое ощущение, что при офлайн симуляции проблема то появляется, то исчезает. А при загрузке проекта в панель описанной проблемы не возникает.

Re: Странное поведение индексной переменной массива

СообщениеДобавлено: 30 мар 2016, 16:57
den_po
Какая версия EasyBuilder?
Можете проектом поделиться?

Re: Странное поведение индексной переменной массива

СообщениеДобавлено: 30 мар 2016, 17:18
mik
den_po писал(а):Какая версия EasyBuilder?
Можете проектом поделиться?

Ответил в личку.

Re: Странное поведение индексной переменной массива

СообщениеДобавлено: 31 мар 2016, 18:03
den_po
Третий из циклов никогда не завершается.
Написал разработчикам.

Re: Странное поведение индексной переменной массива

СообщениеДобавлено: 31 мар 2016, 18:30
mik
den_po писал(а):Третий из циклов никогда не завершается.
Написал разработчикам.

Это о чем говорит? Макрос постоянно крутится в панели? Можно ли мне оставить этот макрос в панели (и в каком виде), или же он будет тормозить работу панели?

Re: Странное поведение индексной переменной массива

СообщениеДобавлено: 06 апр 2016, 12:04
den_po
Почему-то я был уверен, что пробовал увеличивать массив и это не помогало.
Проблема именно в этом, как и написал выше Владимир_Я, -- выход за границы массива.