Приветствую всех жителей форума и модераторов.
При написании кода в EasyBuilder Pro V5.05.01.091 обнаружил следующую особенность. Пример приведу простой.
Использую цикл for в макросе. В теле цикла вызываю функцию из глобальной библиотеки.
Код глобальной функции выглядит так:
- Код: Выделить всё
sub unsigned short My_newfun(unsigned char param)
unsigned short data
unsigned short array[5] = {0, 2, 4, 6, 8}
data = array[param]
return data
end sub
Вот пример кода макроса:
- Код: Выделить всё
macro_command main()
unsigned char i
unsigned short register[5]
for i = 0 to 4 step 1
register[i] = My_newfun(i)
next i
SetData(register[0], "Local HMI", LW, 0, 5)
end macro_command
В данном примере при попытке в register[i] записать вернувшееся значение, пишется 0.
Данная проблема решается вводом промежуточной переменной, как приведено в примере ниже:
- Код: Выделить всё
macro_command main()
unsigned char i
unsigned short temp
unsigned short register[5]
for i = 0 to 4 step 1
temp = My_newfun(i)
register[i] = temp
next i
SetData(register[0], "Local HMI", LW, 0, 5)
end macro_command
По мне так кажется что последний метод не очень то уж и приемлим. Почему не может быть реализации как в первом примере. Хотелось бы чтобы товарищи разработчики Weintek проработали эту проблемку с компилятором. Поэтому прошу, товарищи модераторы посодействуйте пожалуйста в решении данной проблемы.