Цитата(tag @ Mar 26 2008, 12:46)

...а вы для вывода sprintf используете?
Нет, от них избавился. Заменил на
ftoaКод
//------------------------------------------------------------------------------
// Вывод результатов измерения на ЖКИ
//------------------------------------------------------------------------------
class TReDraw : public TMsg
{
public:
// TReDraw();
virtual void run()
{
TCritSect cs;
ks0108FillRect(0, 11, 80, 9, WHITE);
ftoa(diffPressure, lcd_buf, 2, 0); // Динамическое давление
// itoa((unsigned int)diffPressure);
ks0108GotoXY(0, 11);
ks0108PutStr(lcd_buf);
....................
// вывод других переменных на экран
}
};
На всякий случай приведу еще и код
ftoa:
Код
char* ftoa(double v, char *s, unsigned char decimals, bool sign)
{
unsigned long i, f;
if(v < 0)
{
*s++ = '-';
v = -v;
}
else if(sign)
*s++ = '+';
if(v >= 1.0)
{
i = (unsigned long)v;
v = v - (double)i;
s = ultoa(i, s);
}
else
*s++ = '0';
if(decimals > 0)
{
*s++ = '.';
for (; decimals > 0; decimals--)
v = v * 10;
f = (unsigned long)v;
s = ultoa(f, s);
}
*s = '\0';
return s;
}
//----------------------------------------------------------------------------
char* ultoa(unsigned long x, char *s)
{
unsigned long r;
ldiv_t DivRes;
DivRes = ldiv(x, 10);
r = '0' + DivRes.rem;
x = DivRes.quot;
// r = (x % 10) + '0';
// x = x / 10;
if (x != 0)
s = ultoa(x, s);
*s = r; // Built the str when nesting back
*(s + 1) = '\0';
return s + 1;
}
Замена
ftoa на
itoa не дало положительного результата (в смысле, проблема осталась). Но ведь значения АЦП в
doable выводит нормально через
ftoa хоть в этой ф-ции используется рекурсия. В симуляторе проверил время выполнения ReDraw одной
double переменной на экране. Это заняло 1ms при 8 Мгц. На мой взгляд проблема в чем-то другом.