Как стать автором
Обновить

Комментарии 11

Ну что же, все круто. И все-таки хотелось бы тестов на производительность мультиклета. Я читал что люди жаловались, что вычислительной мощности не хватает для расчета движения сервоприводов, т. к. синусы и косинусы тормозят. Непонятно правда, почему не пользуются предгенерируемой таблицей синусов, ибо её хватит за глаза, но факт остается фактом.
Я сейчас как раз начал экспериментировать с ШИМ у MCp для управления драйвером шагового двигателя. До этого этот же драйвер заводил на TMS320F2808 с предгенерённой таблицей — на нём нет FPU. Но честно вам скажу, что при небольшом напряжении даже полушаг выдавал недостаточный момент при 180-200 об/мин. При наличии редуктора полного шага вполне достаточно для плавного вращения и весьма точного позиционирования. Двигатель сам 48-и вольтовый, но запитывать пришлось от 12, т.ч. скорость нарастания тока при перекоммутации была на порядок ниже. Для микрошага это вообще несерьёзно. Сейчас попробую на MCp с немного изменённой схемой силовой части под 24В.

PS. Я для эксперимента решил реализовать блочный алгоритм ГОСТ-89 на асме. В простейшем виде (без имитовставки и прочих вкусностей) на глаз где-то 640 кб/c. Сейчас чуть-чуть ещё допилю и попробую уже точно замерить и сравнить с тем же LM3S на армовом ядре.
Так а какой компилятор вы используете?
Старый без оптимизации, или новый который еще не релизнут, но доступен в репозитории?
Только сейчас заметил, что вы на асме тестируете ГОСТ-89.

Это безусловно интересно, но интересно знать скорость и компилированного кода, и таким образом оценить эффективность работы текущей версии компилятора.
Самому не терпится. Пока ждём появление нового компилятора. Его активно разрабатывают.
Будут цифры по LM3S по условно тому же коду — ждем комментарий )
Предварительные цифры для LM3S5B91 @ 100 MHz в сравнении с MCp @ 80 такие (10.000 циклов):
O0: 3 секунды
O2: 730 мс
O3: 450-720 мс

На MCp имеем 733 мс.

Прошу обратить внимание, что код по АРМ на Си. Основная функция алгоритма выглядит так:
void gost_round()
{
        int i;
        unsigned int old_bb;
        unsigned int fAiKi = 0;

        int axk = key ^ aa;

        for (i=0; i<8; i++) {
            fAiKi |= ((sblock[i] >> (((axk >> (i*4)) & 0xf) << 2)) & 0xf) << (i*4);
        }
        old_bb = bb;
        bb = aa;
        aa = old_bb ^ ROL(fAiKi, 11);
}

unsigned int ROL(unsigned int a, int n)
{
	__asm("ror %0, %1" : "=r"(a) : "r"(32-n), "0"(a));
	return a;
}


Думаю, отдельным постом распишу про сравнение производительности, в том числе, с запуском ARM-овой сборки под QEMU.
Так, на LM3S5B91@100 MHz имеем 730 мс при оптимизации O2 (исходный код на C).

На MCp имеем 733 мс на чем? На ассемблере или на C с текущим неоптимизированным компилятором?
Видимо на ассемблере.
Ассемблер (для блока) + внешний цикл на Си.
Сильно оптимизированный код под ARM — со всем разнообразием thumb-инструкций, я такой код на асме быстро не напишу.
«Поляризация. Состояние SCK в режиме ожидания. Мы используем сигнал HIGH.»
А на осциллограмме idle state для clk — low. Где косяк?)
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Изменить настройки темы

Истории