Числа с плавающей точкой в микроконтроллерах AVR

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Закрыто
Родился
Сообщения: 4
Зарегистрирован: Пн фев 12, 2007 13:30:32

Сообщение FAndrey »

Возможно ли использовать в микроконтроллерах AVR, числа с плавающей точкой? Как я понял при их программировании используется язык СИ. Если возможно их использование, то работают ли ля них операции деления и умножения?
Реклама
Грызет канифоль
Аватара пользователя
Сообщения: 257
Зарегистрирован: Сб сен 09, 2006 19:00:18
Откуда: СССР

Сообщение Tohey »

А чего ж невозможно! Если на си программируют, то ессно и на АСМе возможно.
Реклама
Родился
Сообщения: 4
Зарегистрирован: Пн фев 12, 2007 13:30:32

Сообщение FAndrey »

Т.е. АЛУ получается в них прошито?
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18783
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

Какое еще АЛУ-малу прошито?!
АЛУ в AVR байтовое, обрабатывает только целые числа от 0 до 255 (или со знаком, т.е. от -127 до +127). А все операции с дробными числами (хоть с плавающей точкой, хоть с фиксированной) реализуются программно. Какую программу напишешь - то она и будет делать: хочешь - умножать, хочешь - делить, хочешь - корень извлекать.
А в Си основные операции арифметики уже есть, потому никакой самодеятельности не требуется.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Реклама
Эиком - электронные компоненты и радиодетали
Родился
Сообщения: 4
Зарегистрирован: Пн фев 12, 2007 13:30:32

Сообщение FAndrey »

Понял, спасибо.
Реклама
Вечно гонимый
Аватара пользователя
Сообщения: 568
Зарегистрирован: Ср янв 10, 2007 19:15:51

Сообщение Abakt »

на Си напиши то что нужно, откомпиль и посмотри листинг на АСМе.
Реклама
Модератор
Аватара пользователя
Сообщения: 4517
Зарегистрирован: Пн апр 03, 2006 11:43:25
Откуда: Санкт - Петербург

Сообщение Aheir »

И что это даст в свете вопроса о возможности арифметических операций над числами с плавающей точкой?
Контактная информация:
Вечно гонимый
Аватара пользователя
Сообщения: 568
Зарегистрирован: Ср янв 10, 2007 19:15:51

Сообщение Abakt »

покажет как эти операции реализовать на АСМе.
Родился
Сообщения: 4
Зарегистрирован: Пн фев 12, 2007 13:30:32

Сообщение FAndrey »

Жаль что не все так же просто на ПЛИС.
Сверлит текстолит когтями
Аватара пользователя
Сообщения: 1269
Зарегистрирован: Пт июл 21, 2006 15:05:19
Откуда: плод воображения

Сообщение KT315B »

Гм, странно... Только что пытался посмотреь, как МК передаст в порт десятичную дробь - сделал в лоб написал PORTB=15.41 и посмотрел в VMLAB'e осциллографом выход - там оказалось только 00001111 (то бишь 15 - целая часть). Куда-же делось все остальное? Кстати, а в каком виде AVR хранить десятичные дроби? Подозреваю, что не одним байтом дело обходится?
R2AIV 73!
Контактная информация:
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18783
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

1. Интересно, а что ты ожидал увидеть?! Порт-то ОДНОБАЙТОВЫЙ!!! А любое дробное число представлено как минимум НЕ ОДНИМ байтом (а в зависимости от типа 4 или более, иногда 3-мя).
2. Проанализируйте свою необходимость работы с дробными числами. Всегда можно заранее предусмотреть диапазон как входных чисел, так и выходных. анализ этих входны-выходных потоков чисел возможно позволит вам отказаться от дробей - это резко ускорит вычисления и сократит объем программы, а так же требования к памяти. Как и почему это получается: предположим, мы работаем с температурой - датчик нам выдает значения в сотых долях градуса, а весь диапазон наших температур не более 50 градусов. Это значит, что всего мы можем получить от датчика не более 5000 разных чисел, т.е. ЦЕЛОЕ число (которое займет 2 байта), и никаких сотых долей!. Грубо говоря, во всех расчетах просто отбрасываем запятую, в результате чего получаем ЦЕЛОЕ ЧИСЛО в 100 РАЗ БОЛЬШЕ ФАКТИЧЕСКОЙ ТЕМПЕРАТУРЫ. С этим значением делаем, что нам надо по правилам целочисленной арифметики, а когда потребуется вывести результат - просто ВСТАВИМ знак запятой перед ДВУМЯ ПОСЛЕДНИМИ ЦИФРАМИ - и все! Никакой плавающей точки!
Как правило, почти всегда можно воспользоваться этим приемом.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Вечно гонимый
Аватара пользователя
Сообщения: 568
Зарегистрирован: Ср янв 10, 2007 19:15:51

Сообщение Abakt »

KT315B писал(а):написал PORTB=15.41 и посмотрел в VMLAB'e осциллографом выход - там оказалось только 00001111
можно было просто открыть просмотр портов в VMALB и посмотреть что там.

почитайте о переменных Си в самом начале странички pid.by.ru/05a.htm и подумайте что такое PORTB с точки зрения компилятора.
Мявтор!
Аватара пользователя
Сообщения: 825
Зарегистрирован: Вс дек 18, 2005 20:04:42
Откуда: Свердловская обл.

Сообщение moLCHec »

ARV дело говорит если нужно организовать простые арифметические операции то лучше умножить число на 10^n. Я так с температурой делал тока в Си используя тип long int. Хуже если синусы или там корни какиенибудь но и здесь можно просто разложить в ряд и всё ограничется делением и сложением. Для тех кто не верит слепо в Си есть функции AVR для работы с дробными числами. НАпример функция умножения знаковых чисел FMULS. тока в тини вроде этой команды нет.
Настоящий кот всегда либо голоден,
либо невыспался ...
Контактная информация:
Вечно гонимый
Аватара пользователя
Сообщения: 568
Зарегистрирован: Ср янв 10, 2007 19:15:51

Сообщение Abakt »

moLCHec писал(а):Для тех кто не верит слепо в Си есть функции AVR для работы с дробными числами.
а для тех кто верит в Си эти функции недоступны ?
Мявтор!
Аватара пользователя
Сообщения: 825
Зарегистрирован: Вс дек 18, 2005 20:04:42
Откуда: Свердловская обл.

Сообщение moLCHec »

Доступны только про них часто забывают или вообще не знают либо не заморачиваются когда можно объявить тип float. Скажи честно как часто ты используешь в Си асемблеровские вставики.
Настоящий кот всегда либо голоден,
либо невыспался ...
Контактная информация:
Вечно гонимый
Аватара пользователя
Сообщения: 568
Зарегистрирован: Ср янв 10, 2007 19:15:51

Сообщение Abakt »

я только sei cli wdt использую - чисто традиционно для CVAVR. так как и средствами Си можно управлять битами и пимеры приведены в даташитах на меги.

на счет "по честному" - я только так всегда и пишу.
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18783
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

moLCHec писал(а):Хуже если синусы или там корни какие-нибудь но и здесь можно просто разложить в ряд и всё ограничется делением и сложением.
Если и хуже, то не сильно :). Если использовать функции Си для вычисления синуса - то никакой производительности меги не хватит! Очень часто, точнее - везде, где можно, и в Си используют табличное представление синуса (а не ряд - забодаешься суммировать :) ), т.е. вместо вычисления используют извлечение из таблицы заранее расчитанного значения. Этот путь намного быстрее, а наличие большого объема памяти позволяет хранить значение синуса хоть с точностью до пятого знака после запятой (хотя и двух знаков порой достаточно). Естественно, хранят целые числа, умноженные на коэффициент кратный 10: 10, 100, 1000 и т.д. Если знаком с алгеброй - то работа с синусами в целочисленном представлении труда не составит.
Действительно хуже с корнями и логарифмами всякими, т.к. это апериодические функции. Это для синуса (а также косинуса) можно задать таблицу значений с определенным шагом для значений аргумента от 0 до Pi/4 - и хватит, остальное вычисляется элементарно по формулам преобразования. А для апериодических функций табличное представление возможно только для ограниченного набора аргумента. В общем, без школьного учебника алгебры - никак, господа коты :)
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Мявтор!
Аватара пользователя
Сообщения: 825
Зарегистрирован: Вс дек 18, 2005 20:04:42
Откуда: Свердловская обл.

Сообщение moLCHec »

На счёт рядов точно не помню но вроде для точности 2-х знаков не более 4-х слагаемых. Хотя геммор а куды денешься. :cry:
Настоящий кот всегда либо голоден,
либо невыспался ...
Контактная информация:
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18783
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

Про Си могу привести пару отрицательных примеров.
1. Чисто для эксперимента пробовал на Си вычислить синус, в результате программа выполнялась несколько миллисекунд - это при АВРовской-то производительности! Размер кода тоже, мягко говоря, получился не радующим. Я конечно понимаю, у меги памяти куча, и внешний кварц на 10 МГц можно поставить и даже больше, но получается как-то нерационально... А с таблицей я тот же синус получаю за десяток команд асма (т.е. на 2 порядка быстрее), и размер кода не больше, чем на Си... Правда синус с тремя знаками после запятой, а не с плавающей точкой, но мне достаточно.
2. Пару раз попадал под "оптимизацию" компилятора Си, когда он так оптимизировал программу, что она просто не работала, а без оптимизации в память не влезала... Это я пытался "знаменитый" платформо-независимый код на Си использовать в чуть-чуть ином контроллере. Пришлось плюнуть и переписать на асме.
Может, я не такой уж знаток Си, но не очень-то и хотелось ;)
Так что ухо надо держать востро постоянно...
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Вечно гонимый
Аватара пользователя
Сообщения: 568
Зарегистрирован: Ср янв 10, 2007 19:15:51

Сообщение Abakt »

moLCHec писал(а):Не пойму почему ты так в Си слепо веришь.
Я не слепо а просто верю!

Так как Си
- существуют и применяется уже не одно десятилетие.
- он работает.
- он признан производителями МК - последние несколько лет БОЛЬШИНСТВО апноутов уже сопровождается кодом именно на Си.

Почему бы мне не доверять производителям если я использую их продукцию ?

Самое главное я ни где не писал что АСМ это плохо.
Закрыто

Вернуться в «Микроконтроллеры и ПЛИС»