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

 
 
 
Reply to this topicStart new topic
> sprintf не выводит float
mml
сообщение Jan 13 2017, 04:15
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 43
Регистрация: 10-11-10
Из: Екатеринбург
Пользователь №: 60 777



Пробовал так:

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 число, пустое место (не вставляются никакие символы).
Целые числа, строки и символы выводятся нормально.
Go to the top of the page
 
+Quote Post
Alechek
сообщение Jan 13 2017, 04:20
Сообщение #2


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

Группа: Свой
Сообщений: 1 241
Регистрация: 15-11-05
Из: Челябинск
Пользователь №: 10 882



1. включена ли поддержка float в библиотеке?
2. выравнивание стека по 8?
Go to the top of the page
 
+Quote Post
mml
сообщение Jan 13 2017, 04:32
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 43
Регистрация: 10-11-10
Из: Екатеринбург
Пользователь №: 60 777



Цитата(Alechek @ Jan 13 2017, 07:20) *
1. включена ли поддержка float в библиотеке?

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



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

Не знаю как настроить такое выравнивание.
Go to the top of the page
 
+Quote Post
k000858
сообщение Jan 13 2017, 05:03
Сообщение #4


Местный
***

Группа: Участник
Сообщений: 319
Регистрация: 31-01-12
Пользователь №: 69 978



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




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

в настройках адреса начала стека
Go to the top of the page
 
+Quote Post
mml
сообщение Jan 13 2017, 05:46
Сообщение #5


Участник
*

Группа: Участник
Сообщений: 43
Регистрация: 10-11-10
Из: Екатеринбург
Пользователь №: 60 777



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

_estack = 0x20010000;
Go to the top of the page
 
+Quote Post
novikovfb
сообщение Jan 13 2017, 05:53
Сообщение #6


Знающий
****

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



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

nano printf - очень похоже на printf без поддержки плавающей запятой. Ищите опцию включения полнофункциональной printf
Go to the top of the page
 
+Quote Post
mml
сообщение Jan 13 2017, 05:59
Сообщение #7


Участник
*

Группа: Участник
Сообщений: 43
Регистрация: 10-11-10
Из: Екатеринбург
Пользователь №: 60 777



Цитата(novikovfb @ Jan 13 2017, 08:53) *
Ищите опцию включения полнофункциональной printf

В этом и смысл моего обращения на форум. Я не знаю как ее включить.
Go to the top of the page
 
+Quote Post
jcxz
сообщение Jan 13 2017, 06:24
Сообщение #8


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



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

Этого тут никто не знает, так как не можем телепатировать какой у Вас компилятор.
Go to the top of the page
 
+Quote Post
_Pasha
сообщение Jan 13 2017, 07:07
Сообщение #9


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



не будем телепатировать. будем предполагать дефолтный 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)

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

Сообщение отредактировал _Pasha - Jan 13 2017, 07:09
Go to the top of the page
 
+Quote Post
mml
сообщение Jan 13 2017, 07:17
Сообщение #10


Участник
*

Группа: Участник
Сообщений: 43
Регистрация: 10-11-10
Из: Екатеринбург
Пользователь №: 60 777



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

gcc
Go to the top of the page
 
+Quote Post
mml
сообщение Jan 13 2017, 10:05
Сообщение #11


Участник
*

Группа: Участник
Сообщений: 43
Регистрация: 10-11-10
Из: Екатеринбург
Пользователь №: 60 777



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

Сообщение отредактировал mml - Jan 13 2017, 10:07
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Jan 13 2017, 10:28
Сообщение #12


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



Значит, у вас стек задачи не выровнен на границу 8 байт.


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Jan 13 2017, 10:31
Сообщение #13


Гуру
******

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



QUOTE (mml @ Jan 13 2017, 12:05) *
Не работает, только при вызове из задачи FREE RTOS.
Вне FREE RTOS работает.


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

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


--------------------
На любой вопрос даю любой ответ
"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
mml
сообщение Jan 13 2017, 11:12
Сообщение #14


Участник
*

Группа: Участник
Сообщений: 43
Регистрация: 10-11-10
Из: Екатеринбург
Пользователь №: 60 777



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

Использую:
#define configMINIMAL_STACK_SIZE ( ( uint16_t ) 1 * 1024 )
Если речь о величине стека на задачу, то она у меня кратна восьми.

Сообщение отредактировал mml - Jan 13 2017, 11:15
Go to the top of the page
 
+Quote Post
ohmjke
сообщение Jan 14 2017, 11:10
Сообщение #15


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

Группа: Участник
Сообщений: 116
Регистрация: 27-01-10
Из: СПб
Пользователь №: 55 094



Цитата(mml @ Jan 13 2017, 14:12) *
Как его выровнять на 8?


С FreeRTOS не работал, но, к примеру, в TNKernel стеки задач это просто массивы.
А массив можно выровнять так:
Код
uint32_t stack[STACK_SIZE] __attribute__ ((aligned (8)));
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 13th August 2025 - 23:47
Рейтинг@Mail.ru


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