|
|
  |
Деление на дробь на ассемблере, Поделить число на коэффициент с плавающей запятой |
|
|
|
Dec 17 2010, 06:33
|
Частый гость
 
Группа: Участник
Сообщений: 81
Регистрация: 25-10-10
Пользователь №: 60 395

|
Цитата(777777 @ Dec 16 2010, 10:48)  Ёжики плакали, кололись, но продолжали писать на ассемблере плавающую точку... Ребят, кто знает: как можно преобразовать переменную с плавающей запятой (результат деления на коэффициент входного напряжения АЦП) в символьную константу (для вывода ее на терминал)на Си? Есть какая-то функция или директива преобразования float в char? Заранее, благодарим!
|
|
|
|
|
Dec 17 2010, 10:33
|

Профессионал
    
Группа: Участник
Сообщений: 1 091
Регистрация: 25-07-07
Из: Саратов
Пользователь №: 29 357

|
Цитата(Slavast @ Dec 17 2010, 12:33)  Ребят, кто знает: как можно преобразовать переменную с плавающей запятой (результат деления на коэффициент входного напряжения АЦП) Деление на константу всегда можно заменить на умножение на величину ей обратную Цитата(Slavast @ Dec 17 2010, 12:33)  в символьную константу (для вывода ее на терминал)на Си? Для этого есть алгоритмы преобразования двоичного в двоично-десятичное. Тут был товарищ который придумывал для этого хитроумные алгоритмы, в крайнем случае можно воспользоваться функцией itoa.
|
|
|
|
|
Dec 24 2010, 04:17
|
Вечный студент
   
Группа: Участник
Сообщений: 500
Регистрация: 11-09-06
Из: Питер
Пользователь №: 20 262

|
Цитата(Slavast @ Dec 24 2010, 10:05)  Поделитесь опытом, может есть команда или процедура? Могу только поделиться опытом. Давно сделал и пользую не задумываясь набор подпрограмм с плавающей точкой для АВР на асм и свой "терминал" для компа на паскале, отображающий в зависимости от команды (полученной от АВР вместе с данными) данные как целые или "плавающие" или строку. Трудно представить, как раньше без этого работал и как все без этого работают. Лучше немного (а может поначалу и много) попыхтеть, а дальше работать и наслаждаться
|
|
|
|
|
Dec 24 2010, 04:29
|
Частый гость
 
Группа: Участник
Сообщений: 81
Регистрация: 25-10-10
Пользователь №: 60 395

|
Цитата(Diusha @ Dec 24 2010, 10:17)  Могу только поделиться опытом. Давно сделал и пользую не задумываясь набор подпрограмм с плавающей точкой для АВР на асм и свой "терминал" для компа на паскале, отображающий в зависимости от команды (полученной от АВР вместе с данными) данные как целые или "плавающие" или строку. Трудно представить, как раньше без этого работал и как все без этого работают. Лучше немного (а может поначалу и много) попыхтеть, а дальше работать и наслаждаться Пишу на Си. Можете показать подпрограммы?
|
|
|
|
|
Dec 24 2010, 07:56
|
Частый гость
 
Группа: Участник
Сообщений: 81
Регистрация: 25-10-10
Пользователь №: 60 395

|
Цитата(Tanya @ Dec 24 2010, 13:04)  А если Вам нужно только передать данные в компьютер, то зачем их преобразовывать? Гоните сырые в компьютер - пусть он тоже поработает. И как по вашему я выведу число 4.467234 на UART? Это число то мне и надо в строку перевести!
|
|
|
|
|
Dec 24 2010, 12:09
|

Профессионал
    
Группа: Свой
Сообщений: 1 940
Регистрация: 16-12-07
Из: Москва
Пользователь №: 33 339

|
Цитата(sergeeff @ Dec 24 2010, 16:46)  Что-то мне сдается, что автор ветки не хочет советы слушать и с упорством, достойным лучшего применения, ломится в открытую дверь. Что вы уперлись в этот самый float? Чем вас не устраивают предложенные вам варианты? +1 Цитата Как подсказали перейдите от деления к умножению Надо разделить на 17,2. Попытаемся представить это число в виде 65536/x 17,2 = 65536/x x = 65536/17.2 = 3810 Теперь если взять любое входное значение, умножить на 3810 а потом отбросить два старших байта (что эквивалентно сдвигу на 16 вправо или делению на 65536) то получите то что Вам нужно. Не обзязательно брать 65536, можно любое число степень двойки (чем больше число тем выше точность). Суть метода в том чтобы уйти от операции деления к операции умножения с последующим сдвигом результата вправо. Умножение для любого процессора также как и сдвиг довольно простые и быстрые операции. Особенно если писать на ассемблере Уже всё рассказали , осталось только написать. Это элементарно и это asm
--------------------
Закон Мерфи:
Чем тщательнее составлен проект, тем больше неразбериха, если что-то пошло не так
|
|
|
|
|
Dec 25 2010, 06:42
|
Вечный студент
   
Группа: Участник
Сообщений: 500
Регистрация: 11-09-06
Из: Питер
Пользователь №: 20 262

|
Цитата(Slavast @ Dec 24 2010, 10:29)  Можете показать подпрограммы? Оп! Хотел выслать в личку, но не нашел, как там прикрутить файл. То ли там чего-то поменялось, то ли я забыл. Копаться лень, так что если объясните, как... Или оставьте мыло. Как правильно подметила Tanya, АЦП выдает не float, а 2-байтовое число (10 бит). Можете его и отправлять, а уже на компе обсчитывать как угодно
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|