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

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

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

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

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

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

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

-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
Автор поста оценил этот комментарий

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

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

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

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

Ну а почему бы и нет? Float у нас это целых 4-е байта.

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

А строка - 5 :)))

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

Скорее всего кто-то увлекался sscanf/sprintf.

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

Зуб даю - именно так и есть.

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

и че ты нам об этом сообщаешь? можешь - поправь, залей на гит.
не можешь - терпи.

знаем мы таких програмистов, которые tab вместо пробелов увидят и сразу плюются, мол, былокод, кококо.

может была объективная причина, по которой так написали?

сейчас сам просто пишу небольшую библиотеку для работы с оборудованием, и для совместимости приходится принимать и передавать datatime в строковом виде. каждый второй *удак подходит и начинает умничать, мол, чтотыделаешьпрекратибыдлокодкококо

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

Слушай, ну побурчать то можно, даа :)

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

Я не сноб от программизма, и "кококо" стараюсь не говорить, просто меня несколько расстроила такая бага у очень хорошего оборудования.

А сюда я просто поплакался :)

Автор поста оценил этот комментарий

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

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

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

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

Автор поста оценил этот комментарий

в железке кажись программер не смотрел за типами данных

помочь дело хорошее но без исходников сделать ничего не могу

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

да не надо. предупрежден-вооружен. аппроксимируем.