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

 
 
> sprintf от Keil, мусор после полезной строки
firstvald
сообщение Nov 18 2014, 23:07
Сообщение #1


Знающий
****

Группа: Свой
Сообщений: 580
Регистрация: 3-06-08
Пользователь №: 38 041



во франклине (для работы с плав арифметикой не использую, но спецэффект видел) и в кейле сталкиваюсь с тем, что sprintf мусорит в строке после полезной части. при выводе плавающего числа со спецификатором f4.1 после полезной части кидается еще байт так 9 мусора. обычно обхожу это тем, что завожу большую строку с запасом, фактически для вывода плавающего числа по спецификатору f4.1 требуется строка длиной 24 байта (с некоторым запасом), но может быть кто- то нашел лечилку?


в порядке пожарного бубна

может кому срочно поможет, как посмотрю подробнее еще отпишусь. вроде бы мусор исчезает, если вызвать последовательно сначала sprintf без поля точности: sprintf(...,"%f",....) и сразу же еще раз, но уже как нам нужно sprintf(...,"%4.3f",...).
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
jcxz
сообщение Dec 7 2014, 18:40
Сообщение #2


Гуру
******

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



Цитата(firstvald @ Nov 19 2014, 05:07) *
во франклине (для работы с плав арифметикой не использую, но спецэффект видел) и в кейле сталкиваюсь с тем, что sprintf мусорит в строке

Возможно - у Вас элементарно переполняется стек.
Наблюдал на IAR+CortexM3 использование ~0.5кБ стека при вызове printf-функций.
Go to the top of the page
 
+Quote Post
firstvald
сообщение Dec 8 2014, 17:19
Сообщение #3


Знающий
****

Группа: Свой
Сообщений: 580
Регистрация: 3-06-08
Пользователь №: 38 041



Цитата(jcxz @ Dec 7 2014, 22:40) *
Возможно - у Вас элементарно переполняется стек.
Наблюдал на IAR+CortexM3 использование ~0.5кБ стека при вызове printf-функций.

не простая функция и приглядывать надо при использовании. пользую в 51 процессоре. озу осталось байт 300. сомневаюсь, что использует стек в регистрах, но если народ знает в каком месте print sprintf творит свое черное дело, то милости просим высказаться.


ps вот как только я стал писать параноидально, ручками раскладывая каждый байтик - эффект исчез.

CODE
const char specif[] = "%4.2f\0";


неплохо, но на самом деле же писал что спецификатор надо в ряде случаев менять .

Цитата(psL @ Dec 7 2014, 16:30) *
По идее изменение формата sprintf не спасет буфер от поломки


CODE
sprintf(out_line, "%*.*f", digits, decimals, in_val);


вот это интересно
Go to the top of the page
 
+Quote Post
scifi
сообщение Dec 8 2014, 18:08
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Цитата(firstvald @ Dec 8 2014, 20:19) *
Код
sprintf(out_line, "%*.*f", digits, decimals, in_val);

вот это интересно

Под столом :-)
"О, сколько нам открытий чудных..."
Go to the top of the page
 
+Quote Post
firstvald
сообщение Dec 8 2014, 19:17
Сообщение #5


Знающий
****

Группа: Свой
Сообщений: 580
Регистрация: 3-06-08
Пользователь №: 38 041



Цитата(scifi @ Dec 8 2014, 22:08) *
Под столом :-)
"О, сколько нам открытий чудных..."

ну да. за 19 лет первый раз вижу такую запись. rolleyes.gif
пад сталом я смотрел - там нету
Go to the top of the page
 
+Quote Post



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

 


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


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