Михась 2 6 ноября, 2015 Опубликовано 6 ноября, 2015 · Жалоба Можно ли настроить printf без включения double? Есть кейл микровижн, cortex-m0. Все равно есть плавучка в математике, на индикатор надо выводить плавучку. Сейчас все нормально работает и с притянутыми printfa.o double. Но можно ли в принципе настроить встроенный printf на использование только float? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 119 6 ноября, 2015 Опубликовано 6 ноября, 2015 · Жалоба Обычно, если такая возможность есть - она описана в документации на ваш компилятор. Чтение документации из интернета вслух - не менее 100 евро в час. P.S. Но вообще-то, по стандарту, при передаче в функцию с переменным числом аргументов float неявно приводится к double. Так что если ваш компилятор соответствует стандарту, то заставить его printf внутри работать с float вместо double не получится. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Михась 2 7 ноября, 2015 Опубликовано 7 ноября, 2015 (изменено) · Жалоба Обычно, если такая возможность есть - она описана в документации на ваш компилятор. Чтение документации из интернета вслух - не менее 100 евро в час. P.S. Но вообще-то, по стандарту, при передаче в функцию с переменным числом аргументов float неявно приводится к double. Так что если ваш компилятор соответствует стандарту, то заставить его printf внутри работать с float вместо double не получится. Спасибо, Сергей. Я видел ваш пост по этой теме ранее и посмотрел хидеры printf. Понял что есть выбор только между целочисленным printf и double. Была надежда, что где-то затаился printf с float. Изменено 7 ноября, 2015 пользователем Михась Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Михась 2 7 ноября, 2015 Опубликовано 7 ноября, 2015 (изменено) · Жалоба Спасибо, Сергей. Я видел ваш пост по этой теме ранее и посмотрел хидеры printf. Понял что есть выбор только между целочисленным printf и double. Была надежда, что где-то затаился printf с float. Для информации будущим исследователям МК -STM32f030, индикатор - LCD TIC-55, softspi. Частота тактовая - 8МГц Строка форматируется из sprintf(s_temp, "%4.1f%5d", (float)A, B); Время на функцию включая вывод 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 (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) Изменено 7 ноября, 2015 пользователем Михась Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AlexandrY 2 7 ноября, 2015 Опубликовано 7 ноября, 2015 · Жалоба Для информации будущим исследователям МК -STM32f030, индикатор - LCD TIC-55, softspi. Частота тактовая - 8МГц Если вам очень надо, то скачайте в Keil-е Kinetis SDK , там в директории RTOS/MQX/MQX_STDLIB будут исходники всех стандартных библиотек C Там найдете и _io_doprint, которое ядро всех print-ов. Небольшие исправление и оно будет вам печатать только float. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
M_Andrey 0 7 ноября, 2015 Опубликовано 7 ноября, 2015 · Жалоба А если так: int i = (int)(A*10.0); sprintf(s_temp, "%4d.%.1d %5d", i/10, i%10, B ); Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Михась 2 7 ноября, 2015 Опубликовано 7 ноября, 2015 (изменено) · Жалоба А если так: int i = (int)(A*10.0); sprintf(s_temp, "%4d.%.1d %5d", i/10, i%10, B ); Я, как умная маша, с этого и начал. Но уже есть с десяток "экранов" на каждый выводится 1-2 параметра со знаками, и эти параметры еще масштабировать, т.к. положение точки надо двигать в зависимости от места на экране под число. Я осатанел с проверками за три дня и перешел на флоат. Пара килобайт не стоят инсульта. :) Это не говоря о том, что попробуйте вывести в свой пример отрицательное число. Минус будет показывать в каждой позиции под число. Изменено 7 ноября, 2015 пользователем Михась Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
slavka012 0 8 ноября, 2015 Опубликовано 8 ноября, 2015 · Жалоба Выкинуть стандартный принтф и заменить его собственным, а там уже отключайте и включайте все что угодно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться