64-разрядная целочисленная реализация для 8-разрядного микроконтроллера - PullRequest
3 голосов
/ 24 сентября 2010

Я работаю над микроконтроллером OKI 431. Это 8-битный микроконтроллер. Мы не хотим, чтобы в нашем проекте выполнялась какая-либо операция с плавающей запятой, поэтому мы исключили все операции с плавающей запятой и каким-то образом преобразовали их в целочисленные операции. Но мы не можем исключить одну операцию с плавающей запятой, потому что для оптимизации вычислений для целочисленной операции требуется 64-разрядное целое число, которое микро изначально не поддерживает. Он имеет компилятор C, который поддерживает до 32-разрядных целочисленных операций. Расчет занимает слишком много времени, что заметно для пользователя.

Мне интересно, есть ли какая-нибудь 64-битная целочисленная библиотека, которую можно легко использовать в C для кодирования микроконтроллеров. Или какой самый простой способ эффективно написать такую ​​вещь? Здесь эффективно подразумевается минимизация требуемого времени.

Заранее спасибо.

Ответы [ 3 ]

3 голосов
/ 24 сентября 2010

Поскольку это микроконтроллер, вы, вероятно, захотите использовать простую библиотеку сборок.Чем меньше операций он должен поддерживать, тем проще и меньше он может быть.Вы также можете обнаружить, что можете использовать менее 64-разрядные числа (возможно, 48-разрядные) и сократить время выполнения и требования к регистру.

1 голос
/ 24 сентября 2010

Возможно, вам придется пойти на сборку, чтобы сделать это.Очевидные вещи, которые вам нужны:

  • сложение

  • 2s дополнение (инвертирование и приращение)

  • арифметический сдвиг влево и вправо на 1

Из них вы можете построить вычитание, умножение, длинное деление и более длинные сдвиги.Имейте в виду, что умножение двух 64-битных чисел дает вам 128-битное число, и длинное деление может потребовать 128-битного дивиденда.

Это будет казаться мучительно медленным, но предположение втакая машина в том, что вам нужна небольшая площадь, а не скорость.Я предполагаю, что вы выполняете эти вычисления с наименьшей частотой, какую только можете.

Библиотека с открытым исходным кодом может иметь немного более быстрый способ сделать это, но она также может быть еще медленнее.

0 голосов
/ 27 сентября 2010

Всякий раз, когда скорость связана с математикой с плавающей запятой в небольших встроенных системах и когда целочисленная математика недостаточна, математика с фиксированной запятой - быстрая замена.

http://forum.e -lab.de / topic.php? t = 2387

http://en.wikipedia.org/wiki/Fixed-point_arithmetic

http://www.eetimes.com/discussion/other/4024639/Fixed-point-math-in-C

http://en.wikibooks.org/wiki/Embedded_Systems/Floating_Point_Unit

...