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

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

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

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

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

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

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

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

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

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

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

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

ну да, похоже на какое-то колдунство =)

такое говно в продакшн выпускать...

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

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

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

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

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

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

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

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

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

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

5? У нас же строки могут быть произвольной длинны. Другое дело, что эти 6 символов, могут кодироваться совершенно иным способом.

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

а смысл тогда хранить число в строке то?

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

Это предположения автора, что число хранится как строка.

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

может просто буфер входной, который принимает число ограничен 5 байтами? а само число сначала передается как строка. тогда логично

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

Не думаю, что имеет смысл использовать 1 байт для кодирования 1 символа, когда этих символов 12(10 цифр, точка, минус и плюс).

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

это уже зависит от протокола обмена. может там и правда все текстом летит, а не в виде массива байт. да и не так это много 10-20 байт

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