Зачем так писать код??? (непрограммистам неинтересно)

Сейчас пишу управляющую программу к одной промышленной железке.

Железка сама очень даже замечательная, работает как часы и измеряет что нужно совершенно прекрасно.

Но вот микропрограмма внутри этого устройства, написана мягко говоря "странновато".

Несколько параметров задаются (начало...конец диапазона измерений, например).

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

Наблюдаю следующую картину:

-12.1 - нормально принимает значение

-12.15 - ошибка

-12.2 - норма

...

-999 - норма

9999 - норма

-6.231 - ошибка

-6.23 - норма

6.231 - норма

999.2 - норма

999.21 - ошибка

9998.5 - ошибка


Причем "родной", фирменный, конфигуратор этой штуковины вел себя точно так же!

Сбоил на этих же значениях.


Очень несразу до меня дошло, что где-то внутри микропрограммы, полученное число переводят в строку символов, длиной 5 знаков, и минус - тоже знак!

Вот зачем так делать? Все равно потом переводить обратно, для занесения в регистр!


В документации об этом нюансе, естественно, ни слова.

Лига фрилансеров

1.9K постов16.9K подписчика

Добавить пост

Правила сообщества

Не забывайте поддерживать авторов плюсами!


Нельзя:

- Добавлять нетематические посты, последнее решение за модератором

- Рекламировать какую-либо продукцию в виде постов


Можно:

- Делится любыми интересными историями, связанными с фрилансом :)

Вы смотрите срез комментариев. Показать все
1
Автор поста оценил этот комментарий

Если железка слабая, то числодробилка у неё отвратительная, поэтому извращаются с длинной арифметикой кто как может, тут по видимом как то тупо переводят =)

раскрыть ветку (5)
1
Автор поста оценил этот комментарий

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


даже слабенькие аврки это умеют. правда программно(деление например)

раскрыть ветку (4)
Автор поста оценил этот комментарий

Вы видимо не сталкивались с ошибками округления при работе с плавающей точкой.

Минимальное, на чём можно худо бедно позволить себе плавающие точки, это Cortex-M4, т.к. у него есть FPU. Когда нужна особая точность ставят DSP, но всё вместе получается по цене значительно дороже и энергозатратнее.

раскрыть ветку (3)
Автор поста оценил этот комментарий

Да сталкивался :)

Автор поста оценил этот комментарий
Естественно речь идет не о полной точности))) так, пара разрядов. Я делал не больше 2х >_<
раскрыть ветку (1)
Автор поста оценил этот комментарий

=)

Вы смотрите срез комментариев. Чтобы написать комментарий, перейдите к общему списку