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

 
 
> 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
Ответов
ReAl
сообщение Apr 17 2010, 11:14
Сообщение #2


Нечётный пользователь.
******

Группа: Свой
Сообщений: 2 033
Регистрация: 26-05-05
Из: Бровари, Україна
Пользователь №: 5 417



У avr-gcc, насколько я помню, поначалу тоже с malloc был. На стеке выделялся только буфер для преобразований целых чисел, а для плавающих форматов буфер длиннее и его по malloc выделяли.


--------------------
Ну, я пошёл… Если что – звоните…
Go to the top of the page
 
+Quote Post
defunct
сообщение Jun 16 2010, 00:04
Сообщение #3


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(ReAl @ Apr 17 2010, 14:14) *
На стеке выделялся только буфер для преобразований целых чисел, а для плавающих форматов буфер длиннее и его по malloc выделяли.

Вначале писали извращенцы, асболютно не представляющие что такое МК. Потом за дело взялись нормальные люди и сделали правильно.
Я все никак не могу взять в толк почему некоторые делают маленький стек, и большой heap, а потом в коде начинают появляться воистину дебильные и тормозные конструции типа:

Код
foo()
{
    U8 *buf = (U8 *)malloc(256);
    /*
        malloc при поиске подходящего блока проходит километровую цепочку heap descriptor'ов.
        процесс прохода дескрипторов необходимо защитить локом либо другим sync примитивом,
        для обеспечения атомарности доступа,
        а значит прерывания могут быть запрещены на ОЧЕНЬ ДОЛГО.
    */
    ...



    free( buf );
    /*
        проходит через процесс объединения текущего блока со свободными,
        хоть этот процесс и быстрее чем выделение,
        но всяко медленнее чем одна команда "SUB SP, 256"
      
        в этом процессе требуется обеспечить атомарность при обращении к heap дескрипторам,
        а значит прерывания и здесь могут быть запрещены на относительно длительное время
    */
}


что мешает млин heap уменьшить на 256 байт, а стек на те же 256 байт увеличить? Чтобы было просто

Код
foo()
{
    buf[ 256 ];  // память выделена мгновенно

    // и освобождена автоматически
}
Go to the top of the page
 
+Quote Post
rezident
сообщение Jun 16 2010, 00:54
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Цитата(defunct @ Jun 16 2010, 06:04) *
Я все никак не могу взять в толк почему некоторые делают маленький стек, и большой heap

ИМХО потому, что у кучи есть менеджер, а стек он неконтролируемый. Наползание стека на данные это одна из самых трудновылавливаемых ошибок при программировании МК.
Go to the top of the page
 
+Quote Post
defunct
сообщение Jun 16 2010, 03:12
Сообщение #5


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(rezident @ Jun 16 2010, 03:54) *
Наползание стека на данные это одна из самых трудновылавливаемых ошибок при программировании МК.

Дык возникает она потому что
Цитата
делают маленький стек

В отличие от Heap'а и его проблем фрагментации, для стека где фрагментация впринципе невозможна (по природе LIFO) - объем можно оценить еще до run-time.
Помножить это число на два, и будет щастье. Если посчитать заранее тяжело - заполнение стек памяти патерном, прогон программы с последующим дампом памяти для оценки использования стека в run-time тоже никто не отменял.

Много ли толку от менеджера, когда в heap нет блока требуемого объема и менеджер возвращает NULL? А "гениальный программист" привыкший, что на PC память есть всегда, даже не соизволит проверить что вернул этот malloc, и сразу начинает туда что-то писать?
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение Jun 16 2010, 09:18
Сообщение #6


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



Цитата(defunct @ Jun 16 2010, 07:12) *
А "гениальный программист" привыкший, что на PC память есть всегда, даже не соизволит проверить что вернул этот malloc, и сразу начинает туда что-то писать?
Да, да. Я читал где-то что по современным веяниям проверять на NULL malloc и иже с ним - моветон.
Причём и с аргументациеё всё вроде как чики-поки... Но всё это естественно в контексте ПО под ПК.


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
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
- - Сергей Борщ   Цитата(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
- - koluna   Столкнулся с определенными проблемами, используя ...   Jan 2 2014, 07:53


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

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 09:24
Рейтинг@Mail.ru


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