stm32 настройка и сохранение вещественных чисел float.

Кто любит RISC в жизни, заходим, не стесняемся.
ivan dimir
Мучитель микросхем
Сообщения: 440
Зарегистрирован: Вс дек 29, 2019 08:05:21

stm32 настройка и сохранение вещественных чисел float.

Сообщение ivan dimir »

У меня возник вопрос .Есть вещественное число.Как мне организовать правильно увеличения инкремента.Как выбрать шаг?.И каким образом его сохранить в EEPROM.И в flash памяти?
Реклама
Аватара пользователя
НовыйДень
Потрогал лапой паяльник
Сообщения: 362
Зарегистрирован: Вс апр 03, 2022 07:01:29

Re: stm32 настройка и сохранение вещественных чисел float.

Сообщение НовыйДень »

Формат float занимает 4 байта под число одинарной точности. Формат double - 8 байт под число двойной точности. Вот с таким шагом их и хранить.
Реклама
Аватара пользователя
КРАМ
Друг Кота
Сообщения: 25259
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

Re: stm32 настройка и сохранение вещественных чисел float.

Сообщение КРАМ »

[uquote="ivan dimir",url="/forum/viewtopic.php?p=4241229#p4241229"]каким образом его сохранить в EEPROM.И в flash памяти?[/uquote]
Есть смутное подозрение, что ваша затея хранить флоат ничем не обоснована. Флоат - это не просто дробное число. Просто дробные числа можно хранить в целочисленном формате.
Martian
Друг Кота
Сообщения: 12867
Зарегистрирован: Сб дек 18, 2021 19:25:32
Контактная информация:

Re: stm32 настройка и сохранение вещественных чисел float.

Сообщение Martian »

А я вообще не понял вопроса, у меня он как: "выбрать шаг инкремента для float"... это, как минимум, странно.
Реклама
Эиком - электронные компоненты и радиодетали
jcxz
Мудрый кот
Сообщения: 1717
Зарегистрирован: Вт авг 15, 2017 10:51:13

Re: stm32 настройка и сохранение вещественных чисел float.

Сообщение jcxz »

[uquote="КРАМ",url="/forum/viewtopic.php?p=4241244#p4241244"]Есть смутное подозрение, что ваша затея хранить флоат ничем не обоснована. Флоат - это не просто дробное число. Просто дробные числа можно хранить в целочисленном формате.[/uquote]Боюсь от Вашей фразы ТС вообще в exception выпадет. :)))
Реклама
Up2805
Встал на лапы
Сообщения: 148
Зарегистрирован: Сб июн 04, 2022 05:21:07

Re: stm32 настройка и сохранение вещественных чисел float.

Сообщение Up2805 »

Вероятно имеется ввиду инкремент указателя на float применительно к тому, сколько места выделить в еепромке под переменную float.
Реклама
ivan dimir
Мучитель микросхем
Сообщения: 440
Зарегистрирован: Вс дек 29, 2019 08:05:21

Re: stm32 настройка и сохранение вещественных чисел float.

Сообщение ivan dimir »

По предыдущим сообщениям.float десятые от целого числа.А double сотые или я ошибаюсь.Значит инкремент 0.1 минимум для float а для double 0.01?А ка же сохранить это число в памяти EEPROM?
Аватара пользователя
КРАМ
Друг Кота
Сообщения: 25259
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

Re: stm32 настройка и сохранение вещественных чисел float.

Сообщение КРАМ »

[uquote="ivan dimir",url="/forum/viewtopic.php?p=4241321#p4241321"]По предыдущим сообщениям.float десятые от целого числа.[/uquote]
Шозабред? :facepalm:
Флоат - это ПЛАВАЮЩАЯ запятая. Флоат перекрывает диапазон от 1,2*10^−38 до 3,4*10^+38. Флоат имеет нелинейное разрешение и никакой "инкремент" к нему не применим по определению.
Тоже самое и с даблом. Только у него диапазон чисел другой.
ivan dimir
Мучитель микросхем
Сообщения: 440
Зарегистрирован: Вс дек 29, 2019 08:05:21

Re: stm32 настройка и сохранение вещественных чисел float.

Сообщение ivan dimir »

Ну хорошо инкремент не применим.Ну а как сохранить данные числа ?
Аватара пользователя
КРАМ
Друг Кота
Сообщения: 25259
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

Re: stm32 настройка и сохранение вещественных чисел float.

Сообщение КРАМ »

Сохранять как обычные 32-х (для флоат) или 64-х (для дабл) разрядные числа. Только у меня остался вопрос. А зачем вам вообще потребовался флоат или дабл? Что такого вы делаете, что без них никак? Да еще и сохранять их нужно....
Аватара пользователя
VladislavS
Собутыльник Кота
Сообщения: 2562
Зарегистрирован: Вт май 01, 2018 19:44:47

Re: stm32 настройка и сохранение вещественных чисел float.

Сообщение VladislavS »

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

void WriteEEPROM(unsigned ee_adr, uint8_t *src, unsigned len);

int main()
{
  float x;
  WriteEEPROM(0,&x,sizeof(x));  
}
Собственно, вместо float может быть вообще что угодно.
ivan dimir
Мучитель микросхем
Сообщения: 440
Зарегистрирован: Вс дек 29, 2019 08:05:21

Re: stm32 настройка и сохранение вещественных чисел float.

Сообщение ivan dimir »

Я правда функциями не пользуюсь.Функция -удобна.Но у меня не пошла.И как это инкремента для вещественного floatне может быть? а настройка кондиционеров ?
Dimon456
Мудрый кот
Сообщения: 1849
Зарегистрирован: Вс дек 25, 2016 08:34:54

Re: stm32 настройка и сохранение вещественных чисел float.

Сообщение Dimon456 »

ivan dimir писал(а):float десятые от целого числа.А double сотые или я ошибаюсь.Значит инкремент 0.1 минимум для float а для double 0.01
Это неверно.

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

1/8бит = 0,00390625
1/16бит = 0,0000152587890625
1/32бит = 0,00000000023283064365386962890625
float - ? 
Если мантисса имеет разрядность 23бит, то 1/23бит = 0,000000119209303761638 по идеи это и есть минимум для float.

Вы с успехом можете инкрементировать хоть на 0,0000125.

Но проблема заключается в другом.
А как уже написали
КРАМ писал(а):Флоат имеет нелинейное разрешение и никакой "инкремент" к нему не применим по определению.
ivan dimir, попробуйте инкрементировать на 0,0125 и через несколько инкрементов у вас вылезет ошибка. Которая с последующими инкрементами будет только накапливаться, что в конечном итоге приведет к неверному результату.
a797945
Мучитель микросхем
Сообщения: 446
Зарегистрирован: Вс ноя 01, 2015 09:15:16
Откуда: 69.Ржев

Re: stm32 настройка и сохранение вещественных чисел float.

Сообщение a797945 »

дело не в ошибке.
у понятий инкремент и плав.точка абсолютно разный базис.
Вы же нигде не встречали рулетку не на металлической полосе, а на резиновой ленте.
разные свойства - разное применение.
Up2805
Встал на лапы
Сообщения: 148
Зарегистрирован: Сб июн 04, 2022 05:21:07

Re: stm32 настройка и сохранение вещественных чисел float.

Сообщение Up2805 »

А почему бы тогда не сделать в целых числах, а запятую ставить вручную. Тоесть напимер 25,3° будет записываться целым числом 253 и его можно инкрементировать по 1 для 0,1° или по 10 для 1°. То есть нецелое число с десятыми или сотыми долями просто домножается на 10 или 100 и таким образом десятичная запятая уходит и не нужен никакой float - достаточно int16_t или int32t. Все расчеты будут в целочисленной математике, а при выводе на дисплей десятичную запятую можно поставить вручную, разделив число на две части - до и после запятой.
Автору нужно разобраться с темой представления чисел.
Аватара пользователя
КРАМ
Друг Кота
Сообщения: 25259
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

Re: stm32 настройка и сохранение вещественных чисел float.

Сообщение КРАМ »

[uquote="Up2805",url="/forum/viewtopic.php?p=4241385#p4241385"]А почему бы тогда не сделать в целых числах, а запятую ставить вручную.[/uquote]
Вы только что изобрели fix point... :))) :))) :)))
Только для этого не надо переходить на двоично-десятичное представление чисел. Хватит и просто двоичного. Так диапазон чисел будет заметно шире, а множитель станет степенью двойки, что заменит умножение/деление на арифметические сдвиги.
Up2805
Встал на лапы
Сообщения: 148
Зарегистрирован: Сб июн 04, 2022 05:21:07

Re: stm32 настройка и сохранение вещественных чисел float.

Сообщение Up2805 »

Я просто не стал называть это слишком сложным словом и объяснил "на пальцах" как попроще :))) И я не говорил про BCD, я имел ввиду записать не float t = 25.3, а int16_t t = 253. А при выводе этого числа на дисплей вывести его как оно есть, а точку поставить вручную между разрядами.
ivan dimir
Мучитель микросхем
Сообщения: 440
Зарегистрирован: Вс дек 29, 2019 08:05:21

Re: stm32 настройка и сохранение вещественных чисел float.

Сообщение ivan dimir »

Как это вывод вручную.Ну число 253*1/10 я так понимаю?А потм вывод присвоить float(duoble)переменной это число и вывод этого числа на экран?
Аватара пользователя
КРАМ
Друг Кота
Сообщения: 25259
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

Re: stm32 настройка и сохранение вещественных чисел float.

Сообщение КРАМ »

[uquote="ivan dimir",url="/forum/viewtopic.php?p=4241365#p4241365"]а настройка кондиционеров ?[/uquote]
Вы путаете вывод на индикацию с математикой регулирования. Регулирование не требует никаких дробей, если конечно диапазон требуемых чисел не выходит за целочисленную разрядность. Но и тогда флоат употребляется при расчетах очень ограничено (например как тип у коэффициентов рекурсивных фильтров - IIR). При выводе не дисплей чисел с фиксированной десятичной разрядностью, место запятой определяется отдельно от целого числа.
Ну и нет никакой необходимости хранить в EEPROM запятые. Достаточно хранить приведенное к целому число (то есть сдвинутое до целого).
Up2805
Встал на лапы
Сообщения: 148
Зарегистрирован: Сб июн 04, 2022 05:21:07

Re: stm32 настройка и сохранение вещественных чисел float.

Сообщение Up2805 »

В зависимости от того, какую функцию вы используете для вывода текста на дисплей и от того, какой дисплей применяете. Если обычный семисегментный 3-разрядный, то отобразите на нем число "253" и включите точку во втором разряде индикатора, чтобы получилось на дисплее "25.3"
Ответить

Вернуться в «ARM»