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

 
 
 
Reply to this topicStart new topic
> Можно ли настроить printf без включения double?
Михась
сообщение Nov 6 2015, 15:13
Сообщение #1


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

Группа: Участник
Сообщений: 161
Регистрация: 29-09-10
Пользователь №: 59 816



Можно ли настроить printf без включения double?

Есть кейл микровижн, cortex-m0. Все равно есть плавучка в математике, на индикатор надо выводить плавучку. Сейчас все нормально работает и с притянутыми printfa.o double. Но можно ли в принципе настроить встроенный printf на использование только float?
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Nov 6 2015, 20:47
Сообщение #2


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Обычно, если такая возможность есть - она описана в документации на ваш компилятор. Чтение документации из интернета вслух - не менее 100 евро в час.

P.S. Но вообще-то, по стандарту, при передаче в функцию с переменным числом аргументов float неявно приводится к double. Так что если ваш компилятор соответствует стандарту, то заставить его printf внутри работать с float вместо double не получится.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
Михась
сообщение Nov 7 2015, 04:28
Сообщение #3


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

Группа: Участник
Сообщений: 161
Регистрация: 29-09-10
Пользователь №: 59 816



Цитата(Сергей Борщ @ Nov 7 2015, 03:47) *
Обычно, если такая возможность есть - она описана в документации на ваш компилятор. Чтение документации из интернета вслух - не менее 100 евро в час.

P.S. Но вообще-то, по стандарту, при передаче в функцию с переменным числом аргументов float неявно приводится к double. Так что если ваш компилятор соответствует стандарту, то заставить его printf внутри работать с float вместо double не получится.


Спасибо, Сергей. Я видел ваш пост по этой теме ранее и посмотрел хидеры printf. Понял что есть выбор только между целочисленным printf и double. Была надежда, что где-то затаился printf с float.

Сообщение отредактировал Михась - Nov 7 2015, 04:28
Go to the top of the page
 
+Quote Post
Михась
сообщение Nov 7 2015, 06:56
Сообщение #4


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

Группа: Участник
Сообщений: 161
Регистрация: 29-09-10
Пользователь №: 59 816



Цитата(Михась @ Nov 7 2015, 11:28) *
Спасибо, Сергей. Я видел ваш пост по этой теме ранее и посмотрел хидеры printf. Понял что есть выбор только между целочисленным printf и double. Была надежда, что где-то затаился printf с float.


Для информации будущим исследователям
МК -STM32f030, индикатор - LCD TIC-55, softspi. Частота тактовая - 8МГц

Строка форматируется из
sprintf(s_temp, "%4.1f%5d", (float)A, cool.gif;
Время на функцию включая вывод softspi - 2.2ms

sprintf(s_temp, "%2d %5d", A, B );
Время на функцию включая вывод softspi - 0.9ms

Время чистого вывода на индикатор по softspi -0.4ms

Библиотеки (float используется и в других функциях, double - только printf)
Оптимизация отключена. Стека в 256 байт не хватило (без printf с double хватало 256), пришлось увеличить до 512.

CODE
----------------------------------------------------------------------

Code (inc. data) RO Data RW Data ZI Data Debug Library Member Name

34 0 0 0 0 60 fpclassifyf.o
62 0 0 0 0 340 funder.o
1520 90 320 0 0 176 powf.o
0 0 0 0 0 0 entry.o
0 0 0 0 0 0 entry10a.o
0 0 0 0 0 0 entry11a.o
8 4 0 0 0 0 entry2.o
4 0 0 0 0 0 entry5.o
0 0 0 0 0 0 entry7b.o
0 0 0 0 0 0 entry8b.o
8 4 0 0 0 0 entry9a.o
12 6 0 4 0 60 errno.o
30 0 0 0 0 0 handlers.o
40 0 0 0 0 72 idiv.o
36 8 0 0 0 68 init.o
0 0 0 0 0 0 iusefp.o
32 0 0 0 0 68 llshl.o
38 0 0 0 0 68 llsshr.o
34 0 0 0 0 68 llushr.o
2242 94 0 0 0 472 printfa.o
36 12 0 4 0 120 rand.o
44 0 0 0 0 72 uidiv.o
96 0 0 0 0 84 uldiv.o
40 2 0 0 0 68 cdrcmple.o
356 4 0 0 0 140 dadd.o
240 6 0 0 0 84 ddiv.o
236 0 0 0 0 216 depilogue.o
64 10 0 0 0 68 dfixul.o
208 6 0 0 0 88 dmul.o
40 0 0 0 0 60 f2d.o
178 0 0 0 0 108 fadd.o
124 0 0 0 0 72 fdiv.o
130 0 0 0 0 144 fepilogue.o
50 0 0 0 0 60 ffixi.o
76 0 0 0 0 68 ffixir.o
40 0 0 0 0 60 ffixui.o
22 0 0 0 0 68 fflti.o
14 0 0 0 0 68 ffltui.o
122 0 0 0 0 72 fmul.o
24 0 0 0 0 60 fscalb.o

----------------------------------------------------------------------
6242 246 320 8 0 3232 Library Totals
2 0 0 0 0 0 (incl. Padding)


Сообщение отредактировал Михась - Nov 7 2015, 06:58
Go to the top of the page
 
+Quote Post
AlexandrY
сообщение Nov 7 2015, 07:10
Сообщение #5


Ally
******

Группа: Модераторы
Сообщений: 6 232
Регистрация: 19-01-05
Пользователь №: 2 050



Цитата(Михась @ Nov 7 2015, 08:56) *
Для информации будущим исследователям
МК -STM32f030, индикатор - LCD TIC-55, softspi. Частота тактовая - 8МГц


Если вам очень надо, то скачайте в Keil-е Kinetis SDK , там в директории RTOS/MQX/MQX_STDLIB будут исходники всех стандартных библиотек C
Там найдете и _io_doprint, которое ядро всех print-ов.
Небольшие исправление и оно будет вам печатать только float.
Go to the top of the page
 
+Quote Post
M_Andrey
сообщение Nov 7 2015, 08:21
Сообщение #6


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

Группа: Свой
Сообщений: 158
Регистрация: 15-10-07
Из: Й-Ола
Пользователь №: 31 376



А если так:

int i = (int)(A*10.0);

sprintf(s_temp, "%4d.%.1d %5d", i/10, i%10, B );
Go to the top of the page
 
+Quote Post
Михась
сообщение Nov 7 2015, 08:54
Сообщение #7


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

Группа: Участник
Сообщений: 161
Регистрация: 29-09-10
Пользователь №: 59 816



Цитата(M_Andrey @ Nov 7 2015, 15:21) *
А если так:

int i = (int)(A*10.0);

sprintf(s_temp, "%4d.%.1d %5d", i/10, i%10, B );


Я, как умная маша, с этого и начал. Но уже есть с десяток "экранов" на каждый выводится 1-2 параметра со знаками, и эти параметры еще масштабировать, т.к. положение точки надо двигать в зависимости от места на экране под число. Я осатанел с проверками за три дня и перешел на флоат. Пара килобайт не стоят инсульта. sm.gif

Это не говоря о том, что попробуйте вывести в свой пример отрицательное число. Минус будет показывать в каждой позиции под число.

Сообщение отредактировал Михась - Nov 7 2015, 09:02
Go to the top of the page
 
+Quote Post
ar__systems
сообщение Nov 8 2015, 15:15
Сообщение #8


self made
****

Группа: Свой
Сообщений: 855
Регистрация: 7-03-09
Из: Toronto, Canada
Пользователь №: 45 795



Выкинуть стандартный принтф и заменить его собственным, а там уже отключайте и включайте все что угодно.
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 20th July 2025 - 12:31
Рейтинг@Mail.ru


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