Свежие обсуждения
Микроконтроллеры

ассемблер AVR математика с плавающей точкой.

То, что нашел, работает, но глюки есть странные. Кроме того, что при переводе из IEEE
в BCD нет проверки на ноль (просто зависает). Это исправить несложно.
Второй замеченный глюк - подпрограмма сложения. Если складываем отрицательное число(меньшее по модулю) с положительным (большим по модулю), то получаем
ОТРИЦАТЕЛЬНОЕ НЕПОНЯТНО КАКОЕ. Если остались еще любители асма, поделитесь
чем-нить похожим, но РАБОЧИМ. СИ не люблю

118643.zip

 

Вот, что-то нашёл. Не пробовал (не люблю асм )

118648.inc

 

Не, это у меня есть, спасибо, там трехбайтные, 2хбайтная мантисса, маловато будет, хочу очень точно...
Кстати, то, что в моей прицепке, памяти не ест вообще(в отличие от Си ) и занимает чуть больше 1Кб. Ее бы до ума довести, глюки возникают при сложении чисел с разными знаками.
Уже начал ковыряться. Если получится до ума довести, тут положу

 

Михаил__: 2хбайтная мантисса, маловато будет, хочу очень точно...
Внутри контроллера не обязательно стандартный формат. Если арифметики немного, можно для себя создать/выбрать любое представление, какое вам удобнее...

 

Vlad_Petr: любое представление, какое вам удобнее...
Да я всегда и пользовался обычным многобайтным умножением-делением.
Который АНТОХА положил, как раз немного нестандартное представление чисел.
Мне желательно точность до 6-7 знака.
http://pro-radio.ru/measure/4319-28/
Вот эту штуку перерисовываю под авр
А там оно чем точнее, тем лучше.
Сам вроде разобрался, может сегодня тут исправленную положу. Думал, может какой апнот
атмеловский есть. Че-то не нашел.

 

Ну вот это рабочий инклюд. ENJOY!

118875.inc

 

А можно там пояснений раскидать? А то не всё с первого раза прозрачно. В виде: имя процедуры, действие, исходные, результат. Спасибо.

PS: А я на gcc попробую под 88ю(168ю) мегу RLC-метер сделать.

 

_AlexAndr_: А можно там пояснений раскидать?
Да я до сих пор с ней бьюсь. Буржуи написали ВАЩЩЕ без комментариев.
Добавил преобразование флоатов в ASCII, в виде (+/-)мантисса(от 0.0 до 0.9999999) (+/-)экспонента(десятичная уже). Пока что-то глючит если экспонента
трехзначная, первая цифра не 1, а ";" или "="
Но это вроде дурит оригинал (преобразование из флоатов в целое)
Вот пока то, что получилось. Там, где комментарии на каждой строчке, это мое
В некоторых местах коряво, на скорую руку лепил, исправьте, кому не лень

120290.inc