Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: sprintf не выводит float
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
mml
Пробовал так:

char s[256];
sprintf(&s,"APL: %f", 12.345);
sprintf(&s,"APL: %F", 12.345);
sprintf(&s,"APL: %e", 12.345);
sprintf(&s,"APL: %E", 12.345);

Там где должно появиться float число, пустое место (не вставляются никакие символы).
Целые числа, строки и символы выводятся нормально.
Alechek
1. включена ли поддержка float в библиотеке?
2. выравнивание стека по 8?
mml
Цитата(Alechek @ Jan 13 2017, 07:20) *
1. включена ли поддержка float в библиотеке?

В настройках поставлена галочка Use float with nano printf для включения опции -u _printf_float.
Эта опция не помогает.



Цитата(Alechek @ Jan 13 2017, 07:20) *
2. выравнивание стека по 8?

Не знаю как настроить такое выравнивание.
k000858
Цитата(mml @ Jan 13 2017, 07:32) *
В настройках поставлена галочка Use float with nano printf для включения опции -u _printf_float.
Эта опция не помогает.




Не знаю как настроить такое выравнивание.

в настройках адреса начала стека
mml
Цитата(k000858 @ Jan 13 2017, 08:03) *
в настройках адреса начала стека

_estack = 0x20010000;
novikovfb
Цитата(mml @ Jan 13 2017, 08:32) *
В настройках поставлена галочка Use float with nano printf для включения опции -u _printf_float.

nano printf - очень похоже на printf без поддержки плавающей запятой. Ищите опцию включения полнофункциональной printf
mml
Цитата(novikovfb @ Jan 13 2017, 08:53) *
Ищите опцию включения полнофункциональной printf

В этом и смысл моего обращения на форум. Я не знаю как ее включить.
jcxz
Цитата(mml @ Jan 13 2017, 08:59) *
В этом и смысл моего обращения на форум. Я не знаю как ее включить.

Этого тут никто не знает, так как не можем телепатировать какой у Вас компилятор.
_Pasha
не будем телепатировать. будем предполагать дефолтный GCC для арм biggrin.gif
Код
        LD_FLAGS        += -nostartfiles
        LD_FLAGS        += --specs=nano.specs

        LD_FLAGS        += -fno-exceptions -fno-rtti
        LD_FLAGS        += -Wl,--gc-sections
        LD_FLAGS        += -lc -lnosys
        LD_FLAGS        += -lm
        LD_FLAGS        += -u _scanf_float
        LD_FLAGS        += -u _printf_float
        LD_FLAGS        += -T$(LD_SCRIPT)

флаги из реально как печатающего так и ожидающего на вход плавучку проекта.
mml
Цитата(jcxz @ Jan 13 2017, 09:24) *
Этого тут никто не знает, так как не можем телепатировать какой у Вас компилятор.

gcc
mml
Не работает, только при вызове из задачи FREE RTOS.
Вне FREE RTOS работает.
AHTOXA
Значит, у вас стек задачи не выровнен на границу 8 байт.
Сергей Борщ
QUOTE (mml @ Jan 13 2017, 12:05) *
Не работает, только при вызове из задачи FREE RTOS.
Вне FREE RTOS работает.


QUOTE (Alechek @ Jan 13 2017, 06:20) *
2. выравнивание стека по 8?

"Совпадение? Не думаю!"
mml
Как его выровнять на 8?

Использую:
#define configMINIMAL_STACK_SIZE ( ( uint16_t ) 1 * 1024 )
Если речь о величине стека на задачу, то она у меня кратна восьми.
ohmjke
Цитата(mml @ Jan 13 2017, 14:12) *
Как его выровнять на 8?


С FreeRTOS не работал, но, к примеру, в TNKernel стеки задач это просто массивы.
А массив можно выровнять так:
Код
uint32_t stack[STACK_SIZE] __attribute__ ((aligned (8)));
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.