Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: float & vsprintf
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему
MrDarkness
Ранее написаные коды для 8051 стал перносить для pl2144. Столкнулся с проблемой что функция вывода на индикатор не работает. Проц виснет и се. Хотя в симуляторе все ОК.
И виснет причем толькол с float. в функции используется такой код
va_list arg_ptr;
va_start (arg_ptr, str);
vsprintf (buf, str, arg_ptr);
va_end (arg_ptr);
далее вывод на сам индикатор из буфера buf

В чем проблема не подскажим!
Alex03
Варианты:
1. vsprintf() хочет double а получает float.
2. Не хватает стека
....
Хоть бы компиллер и вызывающий код указали?
MrDarkness
Сама функция
void WriteInd (byte Index, byte Position, char *str, ...)
{
byte j,
jj;
char buf [21];

va_list arg_ptr;
va_start (arg_ptr, str);
vsprintf (buf, str, arg_ptr);
va_end (arg_ptr);

switch (Index)
{
case 1 : WriteWh2004_code (0x80 + Position); break;
case 2 : WriteWh2004_code (0xC0 + Position); break;
case 3 : WriteWh2004_code (0x94 + Position); break;
case 4 : WriteWh2004_code (0xD4 + Position); break;
}

for (j = 0; buf[j]; j++)
{
jj = buf [j];
if (jj > 0xBF) jj = DDRAM[jj - 0xC0];
WriteWh2004_data (jj);
if (j > 15) break;
}
}

и ее вызов
WriteInd (2, 0, "%f", du);

Цитата(Alex03 @ Sep 10 2008, 13:23) *
2. Не хватает стека

если стек где почем - поменять! я тока с авр разбераюсь. А надо очень!
Сергей Борщ
Цитата(MrDarkness @ Sep 10 2008, 13:20) *
если стек где почем - поменять! я тока с авр разбераюсь. А надо очень!
Где-то в опциях линкера. Где точнее - никто не скажет, пока не признаетесь, какой компилятор используете. А вы уверены, что vsprintf достаточно 21 байт буфера?
MrDarkness
Цитата(Сергей Борщ @ Sep 10 2008, 14:30) *
Где-то в опциях линкера. Где точнее - никто не скажет, пока не признаетесь, какой компилятор используете. А вы уверены, что vsprintf достаточно 21 байт буфера?

Keil 3.2 для ARM

Цитата(Сергей Борщ @ Sep 10 2008, 14:30) *
Где-то в опциях линкера. Где точнее - никто не скажет, пока не признаетесь, какой компилятор используете. А вы уверены, что vsprintf достаточно 21 байт буфера?

Если овспользовать даже вот sprintf (buf, "%f", 2.56); проц все равно повиснет. В симуляторе все путем. а в чем дело х.з. 07.gif
MrDarkness
Вопрос решен! 1111493779.gif
Сергей Борщ
Цитата(MrDarkness @ Sep 10 2008, 15:02) *
Вопрос решен! 1111493779.gif
Обычно принято сообщать, в чем была проблема, даже если она из серии "сам дурак". Чтобы люди, наступившие на такие же грабли и нашедшие ваше сообщение поиском по форуму, нашли и решение.
MrDarkness
В StartUp файле для параметра HeapSize нужно поставить какой нить размер. Это количество динамически выделяемых байт. По умолчанию оно стоит равным нулю. От сюда и ноги росли! smile.gif
Сергей Борщ
Цитата(MrDarkness @ Sep 10 2008, 15:48) *
Отсюда и ноги росли! smile.gif
Т.е. vsprintf оказалась не виновата, а вешалось где-то в другом месте? Ибо что-то я плохо представляю, где vsprintf может использовать динамическую память.
ReAl
Цитата(Сергей Борщ @ Sep 10 2008, 18:01) *
Т.е. vsprintf оказалась не виновата, а вешалось где-то в другом месте? Ибо что-то я плохо представляю, где vsprintf может использовать динамическую память.
Да вот как раз в некоторых реализациях для вывода чисел с плавающей точкой буфер на байт эдак сто (double оно в тексте длинное) для преобразования запрашивется по malloc при встрече формата.
Почему не на стеке всегда резервируют? Не знаю.
sergeeff
Данная ветка хорошо иллюстрирует ущербность embedded программирования "с наскока", которую наблюдаю в последнее время. Берем процессор, какой-то компилятор, быстренько что-то написали (а то еще Linux поставили), а потом начинаем задавать всем вопросы:"Почему не работает?" И не хотят граждане сначала четко и ясно себе уяснитъ основополагающие вопросы по организации памяти: где код, где данные, где стек, где heap, какого все это размера и как этим всем управлять.
MrDarkness
Цитата(sergeeff @ Sep 11 2008, 10:04) *
Данная ветка хорошо иллюстрирует ущербность embedded программирования "с наскока", которую наблюдаю в последнее время. Берем процессор, какой-то компилятор, быстренько что-то написали (а то еще Linux поставили), а потом начинаем задавать всем вопросы:"Почему не работает?" И не хотят граждане сначала четко и ясно себе уяснитъ основополагающие вопросы по организации памяти: где код, где данные, где стек, где heap, какого все это размера и как этим всем управлять.

Это вам не училище или институт где все разжевывают и расказывают как вы хотите. - это реали. Есть задача - она и решается. И походу дела все изучается и учится. нет времени на то что зубрить досканально мануал! Тем более програмируется не под асмом - и знание всей организации смягчается!
sergeeff
Цитата(MrDarkness @ Sep 11 2008, 10:16) *
Это вам не училище или институт где все разжевывают и расказывают как вы хотите. - это реали. Есть задача - она и решается. И походу дела все изучается и учится. нет времени на то что зубрить досканально мануал! Тем более програмируется не под асмом - и знание всей организации смягчается!


А при чем здесь институты? Еще надо поискать в которых из них про это "разжевывают". А как вы предлагаете, так она, по серьезному, не решается. Сколько автор этой ветки времени своего и ЧУЖОГО угрохал, чтобы понять, что дело не в vsprintf?
MrDarkness
Цитата(sergeeff @ Sep 11 2008, 14:01) *
А при чем здесь институты? Еще надо поискать в которых из них про это "разжевывают". А как вы предлагаете, так она, по серьезному, не решается. Сколько автор этой ветки времени своего и ЧУЖОГО угрохал, чтобы понять, что дело не в vsprintf?

На счет чужого загнули! Прям вот все кинулись решать эту проблему! lol.gif Зашли от нечего делать - посмотрели - отписались- все свалили от сюда! А свое время - да кто ж мне объснит то все ! - никто ! так что уж за мое время не беспокойтесь. (мануалы то я все таки читаю wink.gif ). А если ваше время уж бесценное отнимал так уж извеняюсь! sad.gif . Если уж так не стоило вам все таки тратиться на второе сообщение и последующие! help.gif
sahka
Цитата(sergeeff @ Sep 11 2008, 14:01) *
А при чем здесь институты? Еще надо поискать в которых из них про это "разжевывают". А как вы предлагаете, так она, по серьезному, не решается. Сколько автор этой ветки времени своего и ЧУЖОГО угрохал, чтобы понять, что дело не в vsprintf?

разжевывается и еще как, например при обучении по специальности пром. электроника.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.