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

 
 
> 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
 
Start new topic
Ответов
MrDarkness
сообщение Sep 10 2008, 10:20
Сообщение #2





Группа: Новичок
Сообщений: 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
Сообщение #3


Гуру
******

Группа: Модераторы
Сообщений: 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
Сообщение #4





Группа: Новичок
Сообщений: 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



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

 


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


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