PDA

Просмотр полной версии : Панель СП307Б + макро функция = виснет.



Malyshevsergey
23.03.2016, 11:53
Здравствуйте!
При записи макро функции *(float*)(PSW+407)=PSW[413]/255.0; панель виснет.
Что делать?

Евгений Кислов
23.03.2016, 12:26
Здравствуйте!
При записи макро функции *(float*)(PSW+407)=PSW[413]/255.0; панель виснет.
Что делать?

При обращении через указатели надо выравнивать адреса, чтобы они были кратны 2. Т.е. сделайте так:


*(float*)(PSW+406)=PSW[413]/255.0;

Внесем это в следующую версию РП.

Malyshevsergey
23.03.2016, 12:45
1 Да.
2 Замечательно, а мне что делать?
Как мне получить данные типа float?
Да и все математические операции в макро функции дают зависание.

Евгений Кислов
23.03.2016, 12:50
1 Да.
2 Замечательно, а мне что делать?
Как мне получить данные типа float?
Да и все математические операции в макро функции дают зависание.

Вам необходимо размещать float в памяти панели по кратным двойке начальным адресам. Т.е, например, PSW300-301, PSW302-303 и т.д. Но ни в коем случае не PSW301-302, PSW303-304 и т.д.

Вот рабочий пример - забираем float из PSW300-301 и кладем в PSW400-401:


*(float*)(PSW+400)=*(float*)(PSW+300);

Malyshevsergey
23.03.2016, 12:59
Вы меня не поняли.
Мне нужно разделить одно число на другое и результат должен быть float.
Результат у меня находиться по адресу PSW406-407. Зачем мне его копировать в другой регистр?

Евгений Кислов
23.03.2016, 13:02
Вы меня не поняли.
Мне нужно разделить одно число на другое и результат должен быть float.
Результат у меня находиться по адресу PSW406-407. Зачем мне его копировать в другой регистр?

Т.е. при исполнении кода


*(float*)(PSW+406)=PSW[413]/255.0;

панель зависает?

Malyshevsergey
23.03.2016, 13:07
Сори ошибся в было 407
Исправил на 422 пока все работает

Евгений Кислов
23.03.2016, 13:09
Сори ошибся в было 407
Исправил на 422 пока все работает

Необходимо следовать рекомендации из поста #4, тогда все будет нормально. Постараемся решить эту проблему в будущих версиях.