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

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> 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
Dog Pawlowa
сообщение Jun 25 2007, 10:12
Сообщение #2


Гуру
******

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



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

Я использую форматированный вывод с помощью sprintf.


--------------------
Уходя, оставьте свет...
Go to the top of the page
 
+Quote Post
KRS
сообщение Jun 25 2007, 10:14
Сообщение #3


Профессионал
*****

Группа: Модераторы
Сообщений: 1 951
Регистрация: 27-08-04
Из: Санкт-Петербург
Пользователь №: 555



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


sprintf

или можно прямо printf если вы определите функции вывода на экран
Go to the top of the page
 
+Quote Post
Karl
сообщение Jun 25 2007, 10:59
Сообщение #4


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

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



Попробовал sprintf - вылезла ошибка
Fatal Error[e72]: Segment HEAP must be defined in a segment definition option (-Z, -b or -P)
Go to the top of the page
 
+Quote Post
zltigo
сообщение Jun 25 2007, 11:01
Сообщение #5


Гуру
******

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



Цитата(Karl @ Jun 25 2007, 13:59) *
Попробовал sprintf - вылезла ошибка
Fatal Error[e72]: Segment HEAP must be defined in a segment definition option (-Z, -b or -P)

Ну так нужен ему heap сегмент - опишите линкеру месторасположение и размер.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
IgorKossak
сообщение Jun 25 2007, 14:00
Сообщение #6


Шаман
******

Группа: Модераторы
Сообщений: 3 064
Регистрация: 30-06-04
Из: Киев, Украина
Пользователь №: 221



Для работы sprintf HEAP не нужен.
Видимо автор пытается определить буфер для выводимого стринга в динамической памяти. Определите буфер статически и не будет никаких ошибок.
Go to the top of the page
 
+Quote Post
Karl
сообщение Jun 26 2007, 03:29
Сообщение #7


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

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



Цитата(IgorKossak @ Jun 25 2007, 20:00) *
Для работы sprintf HEAP не нужен.
Видимо автор пытается определить буфер для выводимого стринга в динамической памяти. Определите буфер статически и не будет никаких ошибок.


Я действительно локально определил массив. HEAP уже определил.
Всем спасибо за помощь.
Go to the top of the page
 
+Quote Post
shasik
сообщение Jun 26 2007, 09:49
Сообщение #8


Местный
***

Группа: Свой
Сообщений: 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
Сообщение #9


Гуру
******

Группа: Свой
Сообщений: 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
Сообщение #10


Местный
***

Группа: Свой
Сообщений: 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
Dog Pawlowa
сообщение Jun 27 2007, 06:36
Сообщение #11


Гуру
******

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



Цитата(shasik @ Jun 27 2007, 08:49) *
Встречный вопрос: а как подсчитать количество тактов, потраченных на выполнение того или иного куска кода? Судя по Вашим постам в этом форуме, ответ Вы знаете. Зачем тогда спрашиваете, издеваетесь, да?

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


занимает в IAR симуляторе примерно 19000 тиков CYCLECOUNTER'а. Много это или мало Вам судить.
По мне проще сделать простое преобразование типов (int), а затем (char *)& или Bin2BCD. Если нужна и дробная часть, то сначала умножить на 10.0, 100.0, 1000.0 и т.д. Все равно быстрее. Да и не забудьте добавить 0.5, чтобы получить правильное округление.

Издеваюсь ли? Немножко smile.gif

19000 тиков - это на частоте 8 Мгц время 2 мс, частота 500 Гц, да? Глаз чаще 20 Гц не различает. Реально отсчеты могут отложиться в мозгу с частотой 1-2 Гц, если смотрит человек, а не терминатор.
Поэтому я и удивился - так для кого Вы делаете такой прибор?! smile.gif

А такты я не считаю, я осциллографом смотрю критичные участки.


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


Местный
***

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



Цитата(Dog Pawlowa @ Jun 27 2007, 09:36) *
Издеваюсь ли? Немножко smile.gif

19000 тиков - это на частоте 8 Мгц время 2 мс, частота 500 Гц, да? Глаз чаще 20 Гц не различает. Реально отсчеты могут отложиться в мозгу с частотой 1-2 Гц, если смотрит человек, а не терминатор.
Поэтому я и удивился - так для кого Вы делаете такой прибор?! smile.gif

А такты я не считаю, я осциллографом смотрю критичные участки.


А если так: процессор MSP430, тактовая 32*32768 Гц. Тогда 19000 = 18мс или 55 Гц. С 55 Гц вроде нормально, но тратить 18мс на простой вывод на экран - это уж слишком. Реально в промышленных приборах индикатор скорее красивая примочка, основная же работа "скрыта от глаз". А отсутствие контроля в течении 18мс для некоторых технологических процессов неприемлимо.

Мое мнение неизменно: printf - только для Simulator'а. Даже на PC'ках с их гигигерцами в программах, критичных к времени выполнения, это роскошь.
Go to the top of the page
 
+Quote Post
Dog Pawlowa
сообщение Jun 27 2007, 08:36
Сообщение #13


Гуру
******

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



Цитата(shasik @ Jun 27 2007, 10:58) *
А отсутствие контроля в течении 18мс для некоторых технологических процессов неприемлимо.

А систему прерываний уже отменили?
Кто посмел?! smile.gif


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


Местный
***

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



Цитата(Dog Pawlowa @ Jun 27 2007, 11:36) *
А систему прерываний уже отменили?
Кто посмел?! smile.gif


Смешно!

Действительно, зачем мучить себя и писать какой-то код, если есть уже готовый. Да фиг с ним, что он на порядок(!) медленне, фиг с ним - купим проц побыстрее. А напрягать свой "мозг" не станем. А наслаждение от хорошо сделанной работы - тоже фиг с ним, лишь бы деньги платили.

P.S. В Microsoft работаете?
Go to the top of the page
 
+Quote Post
zltigo
сообщение Jun 27 2007, 09:30
Сообщение #15


Гуру
******

Группа: Свой
Сообщений: 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

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

 


RSS Текстовая версия Сейчас: 21st July 2025 - 21:53
Рейтинг@Mail.ru


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