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

Арифметика 8051 MCU

Всех приветствую! 

Я делаю (во всяком случае, пытаюсь) генератор + ГКЧ на связке Silabs Si570 и МК C8051F310. Методику расчета делителей для вывода частоты я освоил, читать-писать регистры сишки научился. Сейчас у меня возник вопрос по конкретной реализации кода для 8051. Господа из Силабса дают вот такой образец программы для демонстрации работы генератора. Переменные для хранения частот и значения множителя опорника RFREQ у них использованы типа float (т.к. double вообще не поддерживается этим МК). В итоге получается некоторая потеря точности.

У меня лично есть идея взять за основу линуксовый драйвер https://github.com/torvalds/linux/blob/master/drivers/clk/clk-si570.c Там все типы данных целочисленные, но нужно будет делить числа типа u64 друг на друга. Скажите, пожалуйста, - такую математику есть смысл применять на 8051 или же вычисления будут слишком медленные? Мне ведь частоту нужно будет "на лету" перестраивать. Или же метод вычислений от производителя правильнее?

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


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

В 24.07.2022 в 18:08, Evgeny сказал:

Там все типы данных целочисленные, но нужно будет делить числа типа u64 друг на друга. Скажите, пожалуйста, - такую математику есть смысл применять на 8051 или же вычисления будут слишком медленные? Мне ведь частоту нужно будет "на лету" перестраивать. Или же метод вычислений от производителя правильнее?

Чем выше разрядность - тем медленнее в общем случае. А плавающие вычисления той же разрядности - ещё медленнее. Так что - не нужно увеличивать разрядность сверх необходимой. Если в вашем МК есть аппаратный умножитель, то нужно стараться деления заменять умножениями (ведь делителя аппаратного явно там нет).

Медленно или нет в вашем случае  - здесь нет телепатов чтобы угадать что вы там будете считать. Напишите алгоритм. Укажиете - где какая разрядность/точность нужна? Где константы (которые можно вычислить до выполнения), где переменные? Все вычисления, которые можно вынести из run-time, следует вынести.

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


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

On 7/24/2022 at 6:26 PM, jcxz said:

(ведь делителя аппаратного явно там нет).

У х51 аппаратный делитель есть изначально. 

On 7/24/2022 at 6:08 PM, Evgeny said:

Скажите, пожалуйста, - такую математику есть смысл применять на 8051 или же вычисления будут слишком медленные? Мне ведь частоту нужно будет "на лету" перестраивать. Или же метод вычислений от производителя правильнее?

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

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


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

В 24.07.2022 в 18:52, dimka76 сказал:

У х51 аппаратный делитель есть изначально.

Это с 8-битным делимым и 8-битным делителем? Так для нужд ТС такое деление - как мёртвому припарка. Можно считать что нету его.

Умножение гораздо полезнее. Хоть и 8x8=16.

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


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

F310: 25МГц при 1 мц/оп (этим и JTAGом урождённый Cygnal отличился в своё время) - достаточная производительность. 1кБ XRAM достаточно, что б насчитать заранее коэффициентов и качать частоту; наверняка, там целочисленной длинной арифметики (ну если не 24, то 32 битов) "за глаза будет".

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


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

Благодарю ответивших!

Наверное, так и придется пробовать опытным путем замерять скорость вычислений по разным методам.

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


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

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

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

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

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

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

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

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

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

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