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

 
 
> sprintf
sergey sva
сообщение Apr 15 2010, 17:37
Сообщение #1


Гуру
******

Группа: Свой
Сообщений: 2 546
Регистрация: 23-05-07
Из: Самарская область Сызрань
Пользователь №: 27 923



Где можно посмотреть исходник sprintf, библиотечная работает, только с целыми значениями, а если нужно %f зависает все ,где искать причину не знаю?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
koluna
сообщение Jan 2 2014, 07:53
Сообщение #2


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

Группа: Участник
Сообщений: 1 040
Регистрация: 3-01-07
Пользователь №: 24 061



Столкнулся с определенными проблемами, используя маленький и слабенький процессор.
Немного поковырялся, обобщил результаты и решил вставить свои 5 копеек sm.gif

При сборке проекта (процессор STM32F100C4), содержащего вызов стандартной библиотечной функции sprintf() линковка не удается по двум причинам:
- Отсутствуют некоторые системные функции (ошибка ”undefined reference to `_sbrk'” или ей подобные).
- Код не помещается во FLASH.

Первая проблема обусловлена тем, что в тулчейнах для встраиваемых систем отсутствуют требуемые системные функции ( https://sourceware.org/newlib/libc.html#Syscalls ), которые необходимы для работы библиотеки newlib (эти функции обеспечиваются полноценной ОС). Их необходимо реализовать самостоятельно или взять готовый вариант ( http://electronix.ru/forum/index.php?showt...mp;#entry651990 ).

Вторая проблема обусловлена нехваткой FLASH памяти выбранного микроконтроллера, ”объемной” реализацией функции sprinft() и всего, что с ней связано. Поэтому оптимальное решение в сложившейся ситуации - поиск менее ”объемного” варианта этой функции.

Протестировал несколько вариантов функций sprintf() от различного производителя sm.gif
Тестирование проводилось с помощью простого приложения, написанного на языке C с использованием библиотеки SPL. Приложение осуществляет циклический вывод форматированной строки через USART микроконтроллера. Результаты тестирования приведены ниже (перечислены не все секции выходного файла). В итоге было установлено, что наиболее ”легкий” вариант реализации функции sprintf() от ChaN.

Функции sprintf() в стандартных библиотеках тулчейнов бывают в нескольких вариантах (или просто разные функции или разные библиотеки, часто с ограниченным функционалом). Часто функции, реализованные в стандартной библиотеке, требуют приличного количества ОЗУ, поэтому при их использовании необходимо обеспечить достаточный объем для стека (кучи).

ПО с использованием стандартной библиотечной функции sprintf().
Чтобы проект собрался пришлось увеличить в скрипте линкера размер региона FLASH до 32 кБ.
.text 27048
.ARM.exidx 8
.data 1436
.bss 80

ПО с использованием стандартной библиотечной функции sniprintf().
Это облегченный вариант sprintf(), работающий только с целыми числами.
.text 12092
.ARM.exidx 8
.text.align 4
.data 1436
.bss 80

ПО без использования форматированного вывода (без каких-либо функций sprintf()).
.text 1604
.text.align 4
.data 20
.bss 16

Реализация от ChaN (целые числа).
http://elm-chan.org/fsw/strf/xprintf.html
.text 2368
.data 20
.bss 28

Реализация от Georges Menie (целые числа).
http://www.menie.org/georges/embedded/index.html
.text 7656
.data 1308
.bss 80

Доработанный вариант от Сергея Борща (оригинал неизвестен)
http://electronix.ru/forum/index.php?showt...mp;#entry746084
.text 7952
.data 24
.bss 16

Вариант от sergey_sva
http://electronix.ru/forum/index.php?s=&am...st&p=746563
.text 13600
.ARM.exidx 8
.data 268
.bss 16

makefile и скрипт линкера использовался из комплекта scmRTOS. Тулчейн - Sourcery CodeBench Lite ARM EABI.

А, с Новым Годом всех! sm.gif

Сообщение отредактировал koluna - Jan 2 2014, 07:55


--------------------
Благодарю заранее!
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- sergey sva   sprintf   Apr 15 2010, 17:37
- - Dog Pawlowa   Цитата(sergey sva @ Apr 15 2010, 20:52) Г...   Apr 15 2010, 18:04
- - baralgin   Или нехватка стэка.   Apr 15 2010, 18:05
- - sergey sva   >ЧТо за компилятор, что за среда, какие настрой...   Apr 15 2010, 18:31
- - sergey sva   Вот что говорит на -target-help , может нужно еще ...   Apr 15 2010, 21:01
|- - Аматер   У меня тоже висло все из за printf %f в keil. Пом...   Apr 16 2010, 06:08
- - MrYuran   printf() обычно имеет несколько "градаций...   Apr 16 2010, 06:32
- - sergey sva   ЦитатаХип и стек - вообще-то не одно и то же, скор...   Apr 16 2010, 08:11
|- - AHTOXA   Цитата(sergey sva @ Apr 16 2010, 14:26) К...   Apr 16 2010, 12:55
|- - Сергей Борщ   Цитата(sergey sva @ Apr 16 2010, 10:26) h...   Apr 16 2010, 13:04
|- - AHTOXA   Цитата(Сергей Борщ @ Apr 16 2010, 19:19) ...   Apr 16 2010, 15:38
- - sergeeff   Навскидку - все правильно. Совет - на IRQ_STACK_SI...   Apr 16 2010, 08:28
- - sergey sva   ЦитатаНавскидку - все правильно. Совет - на IRQ_ST...   Apr 16 2010, 08:51
|- - AHTOXA   А у вас вообще malloc() работает?   Apr 16 2010, 12:05
- - sergey sva   Странно получается не работает, а sprintf с целыми...   Apr 16 2010, 12:51
- - sonycman   В кейле для кортексов юзаю vsprintf постоянно. Пол...   Apr 16 2010, 13:16
|- - Сергей Борщ   Цитата(sonycman @ Apr 16 2010, 15:31) В к...   Apr 16 2010, 13:39
- - smac   Цитата(sergey sva @ Apr 15 2010, 21:52) Г...   Apr 16 2010, 19:54
- - ReAl   У avr-gcc, насколько я помню, поначалу тоже с mall...   Apr 17 2010, 11:14
|- - defunct   Цитата(ReAl @ Apr 17 2010, 14:14) На стек...   Jun 16 2010, 00:04
|- - rezident   Цитата(defunct @ Jun 16 2010, 06:04) Я вс...   Jun 16 2010, 00:54
|- - defunct   Цитата(rezident @ Jun 16 2010, 03:54) Нап...   Jun 16 2010, 03:12
|- - demiurg_spb   Цитата(defunct @ Jun 16 2010, 07:12) А ...   Jun 16 2010, 09:18
- - Сергей Борщ   Цитата(sergey sva @ Apr 15 2010, 19:52) Г...   Apr 17 2010, 15:02
- - sergey sva   Хотел попробовать kgp но что то он у меня не идет...   Apr 17 2010, 15:39
|- - smac   Цитата(sergey sva @ Apr 17 2010, 19:54) И...   Apr 17 2010, 17:14
|- - AHTOXA   Цитата(sergey sva @ Apr 17 2010, 21:54) Х...   Apr 17 2010, 17:46
- - sergeeff   Я чего-то вообще не пойму в сыр-бор. Исходников sp...   Apr 17 2010, 22:39
- - sergey sva   >Хм. Из-за одной небольшой проблемы сразу менят...   Apr 18 2010, 15:09
|- - sergeeff   Цитата(sergey sva @ Apr 18 2010, 18:24) Н...   Apr 18 2010, 16:04
- - sergey sva   Спасибо, теперь работает float и строки и целые ч...   Apr 18 2010, 20:27
|- - MrYuran   Цитата(sergey sva @ Apr 19 2010, 00:27) С...   Jun 17 2010, 05:38
- - _Макс   Как указать вывод float с предшествующими пробелам...   Jun 15 2010, 22:41
- - rezident   defunct, было бы хорошо, если все было бы так прос...   Jun 16 2010, 19:54
|- - defunct   Цитата(rezident @ Jun 16 2010, 22:54) def...   Jun 16 2010, 23:19
- - skripach   IAR float32 без проблем.   Jun 17 2010, 07:01
- - fox1   Добрый день ! Кто нибудь использует sprintf с ...   Jul 7 2010, 12:00
|- - demiurg_spb   Включите в makefile поддержку расширенной printf. ...   Jul 7 2010, 14:24
|- - fox1   Цитата(demiurg_spb @ Jul 7 2010, 18:24) В...   Jul 8 2010, 04:49
|- - demiurg_spb   Понятно. Тогда поищите по форуму. Недавно тут кто-...   Jul 8 2010, 08:47
|- - Wano   Малость не в тему. Смотрю человек работает с текст...   Jul 9 2010, 08:32
- - fox1   Ну вобщем ... взломался printf с float от IARа ......   Jul 22 2010, 12:13


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

 


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


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