Evgeny 0 24 июля, 2022 Опубликовано 24 июля, 2022 · Жалоба Всех приветствую! Я делаю (во всяком случае, пытаюсь) генератор + ГКЧ на связке Silabs Si570 и МК C8051F310. Методику расчета делителей для вывода частоты я освоил, читать-писать регистры сишки научился. Сейчас у меня возник вопрос по конкретной реализации кода для 8051. Господа из Силабса дают вот такой образец программы для демонстрации работы генератора. Переменные для хранения частот и значения множителя опорника RFREQ у них использованы типа float (т.к. double вообще не поддерживается этим МК). В итоге получается некоторая потеря точности. У меня лично есть идея взять за основу линуксовый драйвер https://github.com/torvalds/linux/blob/master/drivers/clk/clk-si570.c Там все типы данных целочисленные, но нужно будет делить числа типа u64 друг на друга. Скажите, пожалуйста, - такую математику есть смысл применять на 8051 или же вычисления будут слишком медленные? Мне ведь частоту нужно будет "на лету" перестраивать. Или же метод вычислений от производителя правильнее? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 231 24 июля, 2022 Опубликовано 24 июля, 2022 · Жалоба В 24.07.2022 в 18:08, Evgeny сказал: Там все типы данных целочисленные, но нужно будет делить числа типа u64 друг на друга. Скажите, пожалуйста, - такую математику есть смысл применять на 8051 или же вычисления будут слишком медленные? Мне ведь частоту нужно будет "на лету" перестраивать. Или же метод вычислений от производителя правильнее? Чем выше разрядность - тем медленнее в общем случае. А плавающие вычисления той же разрядности - ещё медленнее. Так что - не нужно увеличивать разрядность сверх необходимой. Если в вашем МК есть аппаратный умножитель, то нужно стараться деления заменять умножениями (ведь делителя аппаратного явно там нет). Медленно или нет в вашем случае - здесь нет телепатов чтобы угадать что вы там будете считать. Напишите алгоритм. Укажиете - где какая разрядность/точность нужна? Где константы (которые можно вычислить до выполнения), где переменные? Все вычисления, которые можно вынести из run-time, следует вынести. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dimka76 59 24 июля, 2022 Опубликовано 24 июля, 2022 · Жалоба On 7/24/2022 at 6:26 PM, jcxz said: (ведь делителя аппаратного явно там нет). У х51 аппаратный делитель есть изначально. On 7/24/2022 at 6:08 PM, Evgeny said: Скажите, пожалуйста, - такую математику есть смысл применять на 8051 или же вычисления будут слишком медленные? Мне ведь частоту нужно будет "на лету" перестраивать. Или же метод вычислений от производителя правильнее? А вы возьмите и измерьте время вычисления вашей формулы для чисел с плавающей запятой и для целых 64-ех битный чисел. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 231 24 июля, 2022 Опубликовано 24 июля, 2022 · Жалоба В 24.07.2022 в 18:52, dimka76 сказал: У х51 аппаратный делитель есть изначально. Это с 8-битным делимым и 8-битным делителем? Так для нужд ТС такое деление - как мёртвому припарка. Можно считать что нету его. Умножение гораздо полезнее. Хоть и 8x8=16. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Obam 37 24 июля, 2022 Опубликовано 24 июля, 2022 · Жалоба F310: 25МГц при 1 мц/оп (этим и JTAGом урождённый Cygnal отличился в своё время) - достаточная производительность. 1кБ XRAM достаточно, что б насчитать заранее коэффициентов и качать частоту; наверняка, там целочисленной длинной арифметики (ну если не 24, то 32 битов) "за глаза будет". Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Evgeny 0 25 июля, 2022 Опубликовано 25 июля, 2022 · Жалоба Благодарю ответивших! Наверное, так и придется пробовать опытным путем замерять скорость вычислений по разным методам. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться