Jump to content

    

sprintf не выводит float

Recommended Posts

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 число, пустое место (не вставляются никакие символы).

Целые числа, строки и символы выводятся нормально.

Share this post


Link to post
Share on other sites

mml
1. включена ли поддержка float в библиотеке?

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

Эта опция не помогает.

 

 

 

2. выравнивание стека по 8?

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

Share this post


Link to post
Share on other sites

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

Эта опция не помогает.

 

 

 

 

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

в настройках адреса начала стека

Share this post


Link to post
Share on other sites

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

nano printf - очень похоже на printf без поддержки плавающей запятой. Ищите опцию включения полнофункциональной printf

Share this post


Link to post
Share on other sites

mml
Ищите опцию включения полнофункциональной printf

В этом и смысл моего обращения на форум. Я не знаю как ее включить.

Share this post


Link to post
Share on other sites

jcxz
В этом и смысл моего обращения на форум. Я не знаю как ее включить.

Этого тут никто не знает, так как не можем телепатировать какой у Вас компилятор.

Share this post


Link to post
Share on other sites

_Pasha

не будем телепатировать. будем предполагать дефолтный GCC для арм :biggrin:

        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)

флаги из реально как печатающего так и ожидающего на вход плавучку проекта.

Edited by _Pasha

Share this post


Link to post
Share on other sites

Не работает, только при вызове из задачи FREE RTOS.

Вне FREE RTOS работает.

 

2. выравнивание стека по 8?

"Совпадение? Не думаю!"

 

Share this post


Link to post
Share on other sites

mml

Как его выровнять на 8?

 

Использую:

#define configMINIMAL_STACK_SIZE ( ( uint16_t ) 1 * 1024 )

Если речь о величине стека на задачу, то она у меня кратна восьми.

Edited by mml

Share this post


Link to post
Share on other sites

ohmjke
Как его выровнять на 8?

 

С FreeRTOS не работал, но, к примеру, в TNKernel стеки задач это просто массивы.

А массив можно выровнять так:

uint32_t stack[STACK_SIZE] __attribute__ ((aligned (8)));

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.