Потестил немного на 32-х пиновом списке. Стандартная версия быстрее твоей в 11 раз, а если пины более-менее упорядочить, то получим еще значительное ускорение. Моя медленная реализация, с BSRR и одним байтом на пин, быстрее в 1.6 раза.
Reflector, за-то без всяких там классов и 3-4 страниц не известно какого кода. Но пока сравнить не с чем, вашего кода, а особенно кода VladislavS я не видел.
Пока похоже только на болтовню, может и ни какого кода не существует.
VladislavS, я не знал что в этот регистр можно просто писать
В теме "STM32 новичку..." VladislavS приводил пример класса TSimplePort специально для тебя, с комментариями, а в классе была фактически одна функция преимущественно пишущая в BRR/BSRR:
уводит МК в hard faultЯ не знаю как у вас, ide - компилятор - С++, таблица находится во флеш, соответственно должен быть вызов не const port_pin *p а volatile const port_pin *p, хотя может быть у вас это и позволяет. Тем не менее сделал сравнительные тесты, исправив кое-что что бы работалоСпойлер
Код:
Program Size: port_write 89us text data bss dec hex filename 1216 0 1024 2240 8c0 port_103.elf
Program Size: port_write64 108us text data bss dec hex filename 1288 0 1024 2312 908 port_103.elf
Program Size: port_write32 104us text data bss dec hex filename 1224 0 1024 2248 8c8 port_103.elf
port_write моя функция, остальные две ваши, us - время в микро секундах измеренное в протеусе + проверка на реальном МК.Что вы пытаетесь с этой функции выжить, мне не понятно.
OMG!!! Во-первых, даже скопировать не можете правильно. У меня не такой код. Во-вторых, нужна либо первая, либо вторая строка. Зачем их вместе то? Вы вообще не понимаете что код делает? В-третьих, и самое главное, у вас F103 - у него есть BRR и нет пословного доступа к BSRR!!! Снимать комментарий с этой строки было в высшей степени глупо.
Я не знаю как у вас, ide - компилятор - С++, таблица находится во флеш, соответственно должен быть вызов не const port_pin *p а volatile const port_pin *p, хотя может быть у вас это и позволяет.
volatile нужен только в одном месте - при доступе к регистру BSRR. Во всех остальных местах его надо резать не дожидаясь перитонита! Нечего ему делать ни во флеше, ни в параметре функции.
Что вы пытаетесь с этой функции выжить, мне не понятно.
Скорость. Ещё страницу назад вы утверждали, что эту функцию нельзя оптимизировать в принципе. Называли меня болтуном. А потом, оказалось, в 4!!! раза оптимизируется. Где извинения?
VladislavS, ну извините высокоинтеллектуальный программист, не соблаговолит ли ВАША светлость проверить, что будет в переменной temp после выполнения этого кода
Ну что же, очень жаль, хотелось конечно увидеть во всей красе работу профессионала, но ... , пока похоже на пустую болтовню с картинками и даже неизвестно если он вообще этот профессиональный код.
Ну да ладно, как вам, уважаемый, такой вариант?Спойлер
не только больше по объему, один на 72 другой на 8 байт, но и по времени выполнения, 89/108/104 us.
Во-первых, вы не показали что компилировали. Судя по усердной борьбе с HardFault - сравнивали вы между собой какую-то хрень, а не мой пример.
Во-вторых, я свои примеры скомпилировал и там даже по листингу видно, что они быстрее. Из главного цикла "вынута" 64-битная арифметика. А цикл там аж 36 раз выполняется.
В-третьих, что вы там измеряли вообще непонятно. Возьмём те же 104 мкс на установку 36 бит. У f103 частота 72 МГц. Я должен поверить, что на установку одного бита уходит 104/36*72 = 208 тактов процессора? Даже если вы его на 8 МГц измеряли с пьяну, то это 23 такта на бит - овердофига для листинга из моего сообщения. Так что, без кода и листинга это всё бла-бла.
В-четвёртых, скорость и размер кода вообще сложносвязанные величины. Оптимизация по скорости очень часто идёт за счёт увеличения размера кода. Например, IAR при определённых настройках в этой функции частично разворачивает цикл - делает 8х4 итераций. Размер кода растёт в несколько раз, скорость лишь незначительно. Поэтому, при "выжимании" скорости/размера открываем листинг и смотрим что там получается. Я больше чем уверен, что вы ни разу этого не сделали.
А потом приходит Reflector и показывает алгоритм, работающий в 10 раз быстрее
У меня тоже такое ощущение складывается. Открытым текстом вам рассказываешь что и как надо делать, а вы в упор не слышите. Как будто мы на разных языках разговариваем. Да ещё и хамство в ответ.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 17
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения