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

Баг FlProg или SWAP Float как пользовательский блок

Добавлено: 08.01.2018{, 16:25}
KaScada
Добрый день.
Задача изначально сделать перестановку байт в float сетевой переменной.
Стандартного решения в FlProg не нашел, или просмотрел где, подскажите.

В общем решил сделать пользовательский блок

Код: Выделить всё

float in_F = 1.12345;//Вход блока
float out_F = 0;//Выход блока
byte arr[4];

union u_tag {
   byte b[4];
   float fval;
} u;

void loop() {
  
  u.fval = in_F;

  arr[0] = u.b[0];
  arr[1] = u.b[1];
  arr[2] = u.b[2];
  arr[3] = u.b[3];

  u.b[0] = arr[2];
  u.b[1] = arr[3];
  u.b[2] = arr[0];
  u.b[3] = arr[1];

  out_F = in_F;

}

Но после компиляции в ардуино ide я получаю ошибку т.к. все переменные FlProg зачем-то переименовывает, но не везде.
Я думаю это баг, не приятный, т.к. решения не знаю теперь, если только со сдвигами играться.

получаю картину после flProg примерно такую

Код: Выделить всё

float in_F_99845782_1;
float out_F_99845782_1;
byte arr_99845782_1[4];
union u_tag {
   byte b_99845782_1[4];//Здесь переименовал мой массив b
float fval_99845782_1;
} u_99845782_1;
float _gtv1 = 123.123;
float _gtv2;
void setup()
{

}
void loop()
{

//Плата:1
in_F_99845782_1 = _gtv1;
  u_99845782_1.fval = in_F_99845782_1;

  arr_99845782_1[0] = u_99845782_1.b[0];
  arr_99845782_1[1] = u_99845782_1.b[1];
  arr_99845782_1[2] = u_99845782_1.b[2];
  arr_99845782_1[3] = u_99845782_1.b[3];

  u_99845782_1.b[0] = arr_99845782_1[2];//Здесь идёт обращение к массиву b, который FlProg забыл переименовать почему-то, и так везде. Получаем ошибку...
  u_99845782_1.b[1] = arr_99845782_1[3];
  u_99845782_1.b[2] = arr_99845782_1[0];
  u_99845782_1.b[3] = arr_99845782_1[1];

  out_F_99845782_1 = u_99845782_1.fval;
 
_gtv2 = out_F_99845782_1;

}
Может кто даст другой код или скажет как обойти эту проблему или разработчик допилит этот момент, буду благодарен.

Баг FlProg или SWAP Float как пользовательский блок

Добавлено: 08.01.2018{, 16:39}
Anydy
Поставьте галку "использовать один раз" , в видеоуроках про это сказано.

Баг FlProg или SWAP Float как пользовательский блок

Добавлено: 08.01.2018{, 16:47}
Rovki
Anydy писал(а):
08.01.2018{, 16:39}
Поставьте галку "использовать один раз" , в видеоуроках про это сказано.
Голова ! :senile:

Баг FlProg или SWAP Float как пользовательский блок

Добавлено: 08.01.2018{, 16:50}
KaScada
Anydy писал(а):
08.01.2018{, 16:39}
Поставьте галку "использовать один раз" , в видеоуроках про это сказано.
Спасибо, да, работает, но дело в том что float регистров у меня не менее 4х, значит использовать swap надо столько же раз.

Баг FlProg или SWAP Float как пользовательский блок

Добавлено: 08.01.2018{, 16:56}
Rovki
Скорее всего надо будет в 1 блоке сделать 4 входа -4 выхода ...(повторить 4 раза код)

Баг FlProg или SWAP Float как пользовательский блок

Добавлено: 08.01.2018{, 17:27}
KaScada
Очевидно надо этот баг по возможности починить.

Баг FlProg или SWAP Float как пользовательский блок

Добавлено: 08.01.2018{, 17:49}
pan
тут не читали? советуют вместо byte использовать
unsigned char

Баг FlProg или SWAP Float как пользовательский блок

Добавлено: 08.01.2018{, 17:53}
KaScada
pan писал(а):
08.01.2018{, 17:49}
тут не читали? советуют вместо byte использовать
unsigned char
Нет, проблема не в этом. Я свои данные не вставляю, с byte проблем быть не может при обычном свапе.