Перейти к содержанию
    

Прошу помощи

В автономном устройстве устоит 430 МК. С датчиков получает данные и обрабатывает. На выходе получаются большие числа пару 32 битных и одно 64 битное. Проблема в том, что нужно выводить на восьмисегментный дисплей эту информацию. Причем в десятичном виде. И в зависимости от входных параметров надо выводить либо старшие разряды, либо средние. И вот я не соображу как вычленить десятичные разряды из больших чисел. Пока в рамках отладки вычитаю по очереди тысячи, сотни, десятки и т.д. Но может кто из знатоков подскажет способ получше?

PS: память есть, в приоритете малое время выполнения.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Пока в рамках отладки вычитаю по очереди тысячи, сотни, десятки и т.д.

Я тоже так делал, но у меня 16-разрядные числа, и это не вызывало проблем с быстродействием. А вообще-то, есть же в Си функции типа itoa:

http://ru.wikipedia.org/wiki/Itoa_(%D0%A1%D0%B8)

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ну с 16 разрядными числами проблем нет.

/* И у меня sprintf выполнялся за космические 50000 тактов. Может что не так делаю. Ибо есть примеры работы на Atmega128, где эта функция оч. быстро работала.*/

http://we.easyelectronics.ru/Soft/preobraz...lye-chisla.html - много расписано про преобразование в строки на МК.

Вот интересуют 64 разрядные.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

на msp430 поочередное вычитание степеней 10 будет быстрее чем деление на 10.

 

void putd32 (u32 data){
  const u32 pow10Table[] = {1000000000ul, 100000000ul, 10000000ul, 1000000ul, 100000ul, 10000ul, 1000ul, 100ul, 10ul, 1ul};
  if(data == 0) { putc('0'); return; }
  u8 i = 0;
  u8 add0 = 0;
  do {
    u32 pow10 = pow10Table[i++];
    u8 digit = 0;
    while(data >= pow10) {
      digit++;
      data -= pow10;
    }
    if (digit) {add0 = 1; putc(digit + '0');}
    else if (add0) putc('0');
  } while(i < 10);
}

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

//we.easyelectronics.ru/Soft/preobraz...lye-chisla.html[/url] - много расписано про преобразование в строки на МК.

У MSP есть команда DADD, поэтому можно существенно ускорить работу с двоично-десятичным представлением.

Вот только компилятор сам этого не сообразит, придётся писать ассемблерную функцию.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

У MSP есть команда DADD, поэтому можно существенно ускорить работу с двоично-десятичным представлением.

Вот только компилятор сам этого не сообразит, придётся писать ассемблерную функцию.

Тоже рассматривал вариант BCD чисел, но умножение 9999 на 99999 реализовывать сложновато. Да еще и температуру с АЦП получаемую в BCD представить с ходу не могу. А отдельное преобразование выльется с то же вычитание степеней. Поэтому пока остановлюсь на вычитании.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...