реклама на сайте
подробности

 
 
> fload в char
Karl
сообщение Jun 25 2007, 09:53
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 179
Регистрация: 4-02-05
Пользователь №: 2 429



Народ, подскажите, как в ИАР преобразовать float (double) в строку с целью вывода на экран?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
shasik
сообщение Jun 26 2007, 09:49
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 319
Регистрация: 3-09-05
Из: Беларусь, Новополоцк
Пользователь №: 8 188



Цитата(Karl @ Jun 25 2007, 12:53) *
Народ, подскажите, как в ИАР преобразовать float (double) в строку с целью вывода на экран?


А на какой экран, если не секрет? Если на "экран" симулятора, то черт с ним. А если преобразовываете double в char для работ с ЖКИ, то использовать printf нельзя - ооооочень медленно будет.
Go to the top of the page
 
+Quote Post
Dog Pawlowa
сообщение Jun 26 2007, 15:37
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 2 702
Регистрация: 14-07-06
Пользователь №: 18 823



Цитата(shasik @ Jun 26 2007, 12:49) *
А на какой экран, если не секрет? Если на "экран" симулятора, то черт с ним. А если преобразовываете double в char для работ с ЖКИ, то использовать printf нельзя - ооооочень медленно будет.

Да? А медленно - это сколько?


--------------------
Уходя, оставьте свет...
Go to the top of the page
 
+Quote Post
shasik
сообщение Jun 27 2007, 05:49
Сообщение #4


Местный
***

Группа: Свой
Сообщений: 319
Регистрация: 3-09-05
Из: Беларусь, Новополоцк
Пользователь №: 8 188



Цитата(Dog Pawlowa @ Jun 26 2007, 18:37) *
Да? А медленно - это сколько?


Встречный вопрос: а как подсчитать количество тактов, потраченных на выполнение того или иного куска кода? Судя по Вашим постам в этом форуме, ответ Вы знаете. Зачем тогда спрашиваете, издеваетесь, да?

Код:
Код
sprintf(txt, "%.4f", 12.35);


занимает в IAR симуляторе примерно 19000 тиков CYCLECOUNTER'а. Много это или мало Вам судить.
По мне проще сделать простое преобразование типов (int), а затем (char *)& или Bin2BCD. Если нужна и дробная часть, то сначала умножить на 10.0, 100.0, 1000.0 и т.д. Все равно быстрее. Да и не забудьте добавить 0.5, чтобы получить правильное округление.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Jun 27 2007, 09:30
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(shasik @ Jun 27 2007, 08:49) *
По мне проще сделать простое преобразование типов (int), а затем (char *)& или Bin2BCD. Если нужна и дробная часть, то сначала умножить на 10.0, 100.0, 1000.0 и т.д. Все равно быстрее. Да и не забудьте добавить 0.5, чтобы получить правильное округление.

То о чем Вы пытаетесь вести речь не есть работа c float double. Это призыв не пользоваться float, но далеко не все могут ему последовать. Попробуйте написать свою функцию для печати 64bit float smile.gif и расскажите сколько сэкономили. Заодно можете попробовать сколько времени на 8-бит контроллерах операции с 64 битной плавучкой занимают, но есть такое слово "надо" smile.gif
Естественно, printf() обладает избыточностью и "сделать" его на печати какого-нибудь int тупо задав выходной формат и написав жесткую обработку легко. Но для float относительный выигрыш будет меньше.
По поводу "18ms" и "отсутствие контроля" - про прерывания Вам уже сказали, а вообще в нормально созданной системе процесс отображения самый не приоритетный и очередь сообщений к процессу отображения строится с намеряными потерями, что позволяет не отображать тупо информацию чаще, чем оператор ее может считывать.
Цитата(shasik @ Jun 27 2007, 12:16) *
А напрягать свой "мозг" не станем.

Напрягать мозг станем! Обязательно! Только в правильном направлении а не в рамках полировки отдельных абсолютно не критичных кусочков кода.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
shasik
сообщение Jun 27 2007, 10:48
Сообщение #6


Местный
***

Группа: Свой
Сообщений: 319
Регистрация: 3-09-05
Из: Беларусь, Новополоцк
Пользователь №: 8 188



Цитата(zltigo @ Jun 27 2007, 12:30) *
То о чем Вы пытаетесь вести речь не есть работа c float double


Еще раз: в моем случае у меня float, а на ЖКИ вывод с одним знаком после запятой, да и диапазон известен (ну, скажем проценты). Зачем мне printf?
Умножил на 10.0, добавил 0.5, преобразовал к unsigned, преобразовал к BCD. Все просто и никаких заманух. В таком случае sprintf явно избыточен. Согласны? Понимаю, что такой вариант не всем подходит. Но и не говорите, что такой вариант не имеет право на жизнь. Иногда нужен и sprintf, не отрицаю. Я же всего лишь указал на один из возможных вариантов, но не горил, что это единственно возможный путь.

На счет некритичности... Отсчеты - 1кГц, т.е. на обработку одного отсета 1мс. Теперь добавим немного арифметики с плавающей запятой, пару прерываний на прием/передачу, да не забудем про тактовую частоту в 1048576 Гц. 18мс*"частота кадров" в таких условиях много или мало?

Цитата(Dog Pawlowa @ Jun 27 2007, 12:35) *
Если Вы будете переходить на личности, модераторы примут меры, что будет не очень хорошо для Вас, так как мне кажется, что всегда и всем есть чему поучиться, в том числе и Вам у меня. Если это Вам смешно и/или обидно, лучше промолчите.
Если же Вы готовы продолжить дискуссию, то мы можем это сделать, только избегайте упоминания об абстрактном готовом софте, смысле напрягать мозги, упреков в получении незаработанных денег, и месте моей работы - только технические аспекты.

Итак, что мешает Вам огранизовать контроль технологических процессов с периодичностью 0,5 .. 1 мс в прерывании таймера, исключив тем самым задержку контроля при выводе информации на экран?


1. А объяснять, что есть такая штука как система прерываний, и ерничать по этому поводу, не считаете оскорблением? Если чем обидел, извините. Вот только пугать не надо - не женщина я, чтобы бояться. А по поводу поучиться у Вас, я как раз и говорил, о значительном(!) присутствии смысла в Ваших постах, не думал, что это Вас обидит.

2. Есть проблема и в условиях неопределенности конкретных требований к ее решению несколько возможных путей ее устранения. Не лучше ли рассмотреть разные варианты, предоставив возможность выбора, чем в безапеляционно отстаивать свою точку зрения. Помню, была уже у нас однопартийная система, а вместо выборов голосование.
Go to the top of the page
 
+Quote Post
Dog Pawlowa
сообщение Jun 27 2007, 11:19
Сообщение #7


Гуру
******

Группа: Свой
Сообщений: 2 702
Регистрация: 14-07-06
Пользователь №: 18 823



Цитата(shasik @ Jun 27 2007, 13:48) *
1. А объяснять, что есть такая штука как система прерываний, и ерничать по этому поводу, не считаете оскорблением? ...

И Вы меня извините.

Цитата(shasik @ Jun 27 2007, 13:48) *
2. Есть проблема и в условиях неопределенности конкретных требований к ее решению несколько возможных путей ее устранения.

Не очень понятна суть проблемы, даже интересно, но решите ведь и без меня?
Успехов


--------------------
Уходя, оставьте свет...
Go to the top of the page
 
+Quote Post
Karl
сообщение Jun 28 2007, 11:52
Сообщение #8


Частый гость
**

Группа: Свой
Сообщений: 179
Регистрация: 4-02-05
Пользователь №: 2 429



Уф, ну и дискуссию вы тут развернули! Похоже, у кого-то мало работы wink.gif По моему мнению что кому использовать каждый решит сам. В моем случае использование переменных с плавающей точкой - необходимость. Избежать этого не получилось. А выводить эти переменные на дисплей ЖКИ необходимо только для контроля в режиме отладки. И тут, как правильно подметил shasik, "зачем мучить себя и писать какой-то код, если есть уже готовый" biggrin.gif
Всем удачи!
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Karl   fload в char   Jun 25 2007, 09:53
- - Dog Pawlowa   Цитата(Karl @ Jun 25 2007, 12:53) Народ, ...   Jun 25 2007, 10:12
- - KRS   Цитата(Karl @ Jun 25 2007, 13:53) Народ, ...   Jun 25 2007, 10:14
|- - Karl   Попробовал sprintf - вылезла ошибка Fatal Error[e7...   Jun 25 2007, 10:59
|- - zltigo   Цитата(Karl @ Jun 25 2007, 13:59) Попробо...   Jun 25 2007, 11:01
- - IgorKossak   Для работы sprintf HEAP не нужен. Видимо автор пыт...   Jun 25 2007, 14:00
|- - Karl   Цитата(IgorKossak @ Jun 25 2007, 20:00) Д...   Jun 26 2007, 03:29
- - Dog Pawlowa   Цитата(shasik @ Jun 27 2007, 08:49) Встре...   Jun 27 2007, 06:36
|- - shasik   Цитата(Dog Pawlowa @ Jun 27 2007, 09:36) ...   Jun 27 2007, 07:58
|- - Dog Pawlowa   Цитата(shasik @ Jun 27 2007, 10:58) А отс...   Jun 27 2007, 08:36
|- - shasik   Цитата(Dog Pawlowa @ Jun 27 2007, 11:36) ...   Jun 27 2007, 09:16
|- - Dog Pawlowa   Цитата(shasik @ Jun 27 2007, 12:16) Смешн...   Jun 27 2007, 09:35


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 05:30
Рейтинг@Mail.ru


Страница сгенерированна за 0.01435 секунд с 7
ELECTRONIX ©2004-2016