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

 
 
 
Reply to this topicStart new topic
> float & vsprintf
MrDarkness
сообщение Sep 10 2008, 08:57
Сообщение #1





Группа: Новичок
Сообщений: 7
Регистрация: 10-09-08
Пользователь №: 40 095



Ранее написаные коды для 8051 стал перносить для pl2144. Столкнулся с проблемой что функция вывода на индикатор не работает. Проц виснет и се. Хотя в симуляторе все ОК.
И виснет причем толькол с float. в функции используется такой код
va_list arg_ptr;
va_start (arg_ptr, str);
vsprintf (buf, str, arg_ptr);
va_end (arg_ptr);
далее вывод на сам индикатор из буфера buf

В чем проблема не подскажим!

Сообщение отредактировал MrDarkness - Sep 10 2008, 08:58
Go to the top of the page
 
+Quote Post
Alex03
сообщение Sep 10 2008, 09:23
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 359
Регистрация: 9-12-05
Пользователь №: 12 034



Варианты:
1. vsprintf() хочет double а получает float.
2. Не хватает стека
....
Хоть бы компиллер и вызывающий код указали?
Go to the top of the page
 
+Quote Post
MrDarkness
сообщение Sep 10 2008, 10:20
Сообщение #3





Группа: Новичок
Сообщений: 7
Регистрация: 10-09-08
Пользователь №: 40 095



Сама функция
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. Не хватает стека

если стек где почем - поменять! я тока с авр разбераюсь. А надо очень!
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Sep 10 2008, 10:30
Сообщение #4


Гуру
******

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



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


--------------------
На любой вопрос даю любой ответ
"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
MrDarkness
сообщение Sep 10 2008, 10:42
Сообщение #5





Группа: Новичок
Сообщений: 7
Регистрация: 10-09-08
Пользователь №: 40 095



Цитата(Сергей Борщ @ 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
Go to the top of the page
 
+Quote Post
MrDarkness
сообщение Sep 10 2008, 12:02
Сообщение #6





Группа: Новичок
Сообщений: 7
Регистрация: 10-09-08
Пользователь №: 40 095



Вопрос решен! 1111493779.gif
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Sep 10 2008, 12:14
Сообщение #7


Гуру
******

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



Цитата(MrDarkness @ Sep 10 2008, 15:02) *
Вопрос решен! 1111493779.gif
Обычно принято сообщать, в чем была проблема, даже если она из серии "сам дурак". Чтобы люди, наступившие на такие же грабли и нашедшие ваше сообщение поиском по форуму, нашли и решение.


--------------------
На любой вопрос даю любой ответ
"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
MrDarkness
сообщение Sep 10 2008, 12:48
Сообщение #8





Группа: Новичок
Сообщений: 7
Регистрация: 10-09-08
Пользователь №: 40 095



В StartUp файле для параметра HeapSize нужно поставить какой нить размер. Это количество динамически выделяемых байт. По умолчанию оно стоит равным нулю. От сюда и ноги росли! smile.gif
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Sep 10 2008, 15:01
Сообщение #9


Гуру
******

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



Цитата(MrDarkness @ Sep 10 2008, 15:48) *
Отсюда и ноги росли! smile.gif
Т.е. vsprintf оказалась не виновата, а вешалось где-то в другом месте? Ибо что-то я плохо представляю, где vsprintf может использовать динамическую память.


--------------------
На любой вопрос даю любой ответ
"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
ReAl
сообщение Sep 10 2008, 18:08
Сообщение #10


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

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



Цитата(Сергей Борщ @ Sep 10 2008, 18:01) *
Т.е. vsprintf оказалась не виновата, а вешалось где-то в другом месте? Ибо что-то я плохо представляю, где vsprintf может использовать динамическую память.
Да вот как раз в некоторых реализациях для вывода чисел с плавающей точкой буфер на байт эдак сто (double оно в тексте длинное) для преобразования запрашивется по malloc при встрече формата.
Почему не на стеке всегда резервируют? Не знаю.


--------------------
Ну, я пошёл… Если что – звоните…
Go to the top of the page
 
+Quote Post
sergeeff
сообщение Sep 11 2008, 06:04
Сообщение #11


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

Группа: Свой
Сообщений: 1 481
Регистрация: 10-04-05
Пользователь №: 4 007



Данная ветка хорошо иллюстрирует ущербность embedded программирования "с наскока", которую наблюдаю в последнее время. Берем процессор, какой-то компилятор, быстренько что-то написали (а то еще Linux поставили), а потом начинаем задавать всем вопросы:"Почему не работает?" И не хотят граждане сначала четко и ясно себе уяснитъ основополагающие вопросы по организации памяти: где код, где данные, где стек, где heap, какого все это размера и как этим всем управлять.
Go to the top of the page
 
+Quote Post
MrDarkness
сообщение Sep 11 2008, 06:16
Сообщение #12





Группа: Новичок
Сообщений: 7
Регистрация: 10-09-08
Пользователь №: 40 095



Цитата(sergeeff @ Sep 11 2008, 10:04) *
Данная ветка хорошо иллюстрирует ущербность embedded программирования "с наскока", которую наблюдаю в последнее время. Берем процессор, какой-то компилятор, быстренько что-то написали (а то еще Linux поставили), а потом начинаем задавать всем вопросы:"Почему не работает?" И не хотят граждане сначала четко и ясно себе уяснитъ основополагающие вопросы по организации памяти: где код, где данные, где стек, где heap, какого все это размера и как этим всем управлять.

Это вам не училище или институт где все разжевывают и расказывают как вы хотите. - это реали. Есть задача - она и решается. И походу дела все изучается и учится. нет времени на то что зубрить досканально мануал! Тем более програмируется не под асмом - и знание всей организации смягчается!
Go to the top of the page
 
+Quote Post
sergeeff
сообщение Sep 11 2008, 10:01
Сообщение #13


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

Группа: Свой
Сообщений: 1 481
Регистрация: 10-04-05
Пользователь №: 4 007



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


А при чем здесь институты? Еще надо поискать в которых из них про это "разжевывают". А как вы предлагаете, так она, по серьезному, не решается. Сколько автор этой ветки времени своего и ЧУЖОГО угрохал, чтобы понять, что дело не в vsprintf?
Go to the top of the page
 
+Quote Post
MrDarkness
сообщение Sep 11 2008, 10:07
Сообщение #14





Группа: Новичок
Сообщений: 7
Регистрация: 10-09-08
Пользователь №: 40 095



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

На счет чужого загнули! Прям вот все кинулись решать эту проблему! lol.gif Зашли от нечего делать - посмотрели - отписались- все свалили от сюда! А свое время - да кто ж мне объснит то все ! - никто ! так что уж за мое время не беспокойтесь. (мануалы то я все таки читаю wink.gif ). А если ваше время уж бесценное отнимал так уж извеняюсь! sad.gif . Если уж так не стоило вам все таки тратиться на второе сообщение и последующие! help.gif
Go to the top of the page
 
+Quote Post
sahka
сообщение Sep 11 2008, 10:24
Сообщение #15


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

Группа: Участник
Сообщений: 181
Регистрация: 2-05-08
Из: Moscow
Пользователь №: 37 231



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

разжевывается и еще как, например при обучении по специальности пром. электроника.
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 22nd June 2025 - 10:58
Рейтинг@Mail.ru


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