Fast Pins - (быстрые пины). -- Оптимизация работы входов/выходов -- digitalRead, digitalWrite, analogRead, analogWrite

Пользовательские блоки не подходящее под другие разделы
Правила форума
Рекомендации по размещению блоков:
Автор блока создает подробное описание блока, отличие от подобных(если есть на данный момент).Сложные блоки очень желательно с примерами.
При выходе новых версий редактирует/дополняет свой первый пост с указанием даты, версии, причины.
В каждой теме обсуждается только выложенный автором блок - баги, возможность (или предложение) доработки и прочие хотелки.
Свои блоки, переработанные, с другими библиотеками, протоколами и т.д.- размещаем либо сами отдельно, либо обсуждаем и дорабатываем в форуме Разработка блоков.
Пользователи улучшив блок автора и проверив его работоспособность - могут обратиться к автору или модераторам с просьбой добавить их версию блока в первое сообщение темы.
Аватара пользователя
Dryundel
Полковник
Сообщения: 2406
Зарегистрирован: 22 май 2017, 23:15
Откуда: Ярославль
Имя: Андрей
Поблагодарили: 15 раз

fastDigital Read / Write - Ускоритель работы портов (быстрые пины)

Сообщение Dryundel »

Sancho писал(а): 18 июл 2022, 13:42 Компилятор преобразует функции на этапе сборки в прямую работу с регистрами. Скорость одинакова.
Правда, как он это делает я не могу предположить, т.к.
А все очень просто.
1. Размер проекта зависит от количества символов в ПБ. Даже описание на это влияет, да и все эти условия, параметры в Про редакторе.
2. Размер скетча в ArduinoIDE цифирька не однозначная и не окончательная, а весьма приблизительная.
3. Компилятор много чего вырезает.
К примеру если:

const int a = 5;
int b;
.........
if(a == 5) b = a;

То он тупо сделает так:
const int b = 5;

а возможно даже так: )))
const byte b = 5;

И никакие операции сравнений и лишние переменные в прошивку не пойдут.
В конечном итоге компилятору по барабану, функция там или библиотека. Если есть признак однозначности, если варианты отсутствуют, то он режет код вдоль и поперек. Даже иногда лишнее вырезает. Особенно когда функции по прерываниям присутствуют. Ему же без разницы, прошивка то в итоге на уровне битов и регистров происходит.
Аватара пользователя
Dryundel
Полковник
Сообщения: 2406
Зарегистрирован: 22 май 2017, 23:15
Откуда: Ярославль
Имя: Андрей
Поблагодарили: 15 раз

Fast Pins - (быстрые пины). -- Оптимизация работы входов/выходов -- digitalRead, digitalWrite, analogRead, analogWrite

Сообщение Dryundel »

Блок обновился и поменял название.
Название темы тоже пришлось поменять.
Fast Pins
.
4.jpg
Скачать в первом посте
.
Добавлено:
- Оптимизация Аналоговых входов (analogRead)
- Оптимизация Аналоговых выходов (analogWrite)
- Выбор оптимизируемых позиций
.
Тест новой версии
Импровизация управления скоростью, ну скажем вентилятора.
- Два цифровых входа - Включение питания, Режим работы 1 - 2
- Два аналоговых входа - Потенциометры предустановки режимов 1 и 2
- Три цифровых выхода - Индикация Питание, Режим 1, Режим 2.
- Аналоговый(ШИМ) выход - собственно то, чем управляем
- Блок подсчета усредненного количества циклов программы за секунду + вывод результата в UART.
[spoiler=Скрин тестового проекта]
3.jpg
[/spoiler]
Скачать
Test_Fast_Pins.flp
.
Результаты:
Сначала тестируем проект без блока оптимизации - 6600 - 6700 циклов в секунду, в разных режимах. (более 150мкс на цикл)
Теперь закидываем блок Fast Pins в проект - 56000 - 58000 циклов в секунду. (17мкс на цикл)
.
О результатах судите сами.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
arisov77
Рядовой
Сообщения: 57
Зарегистрирован: 11 июн 2016, 12:42
Откуда: Инза
Благодарил (а): 5 раз

Fast Pins - (быстрые пины). -- Оптимизация работы входов/выходов -- digitalRead, digitalWrite, analogRead, analogWrite

Сообщение arisov77 »

Dryundel писал(а): 16 июл 2022, 20:35Блок актуален для AVR ATmega168 / 328...
А почему для AtMega2560 не подойдёт?
Аватара пользователя
Dryundel
Полковник
Сообщения: 2406
Зарегистрирован: 22 май 2017, 23:15
Откуда: Ярославль
Имя: Андрей
Поблагодарили: 15 раз

Fast Pins - (быстрые пины). -- Оптимизация работы входов/выходов -- digitalRead, digitalWrite, analogRead, analogWrite

Сообщение Dryundel »

arisov77 писал(а): 24 июл 2022, 09:01 А почему для AtMega2560 не подойдёт?
Хороший вопрос.
Наверное потому, что сделан для того, для чего сделан.
Возможно позже добавлю и 2560.
arisov77
Рядовой
Сообщения: 57
Зарегистрирован: 11 июн 2016, 12:42
Откуда: Инза
Благодарил (а): 5 раз

Fast Pins - (быстрые пины). -- Оптимизация работы входов/выходов -- digitalRead, digitalWrite, analogRead, analogWrite

Сообщение arisov77 »

Dryundel писал(а): 24 июл 2022, 10:43Возможно позже добавлю и 2560.
Было бы не плохо, тем более, что в AtMega2560 полно входов/выходов и я иногда, что бы не использовать всякие "расширители" портов использую её.
Masterli
Рядовой
Сообщения: 13
Зарегистрирован: 04 ноя 2020, 20:52
Откуда: Москва
Имя: Владимир

Fast Pins - (быстрые пины). -- Оптимизация работы входов/выходов -- digitalRead, digitalWrite, analogRead, analogWrite

Сообщение Masterli »

[ref=#ff8000]Dryundel[/ref], супер! Как же здорово, что есть ребята, которые умеют делать очень нужные блоки, да еще так изящно! :smile9: Спасибо!
Аватара пользователя
Di123
Капитан
Сообщения: 828
Зарегистрирован: 03 ноя 2018, 19:38
Имя: Дмитрий

Fast Pins - (быстрые пины). -- Оптимизация работы входов/выходов -- digitalRead, digitalWrite, analogRead, analogWrite

Сообщение Di123 »

у меня как раз и влияет блок на ацп с потенциометрами
если без блока то всё норм по всем трём потенциометрам цыфры меняются от 0-9
с вашим блоком один потенциометр влияяет на другой меняя на том значения и некоторые не доходят до нуля
тест.flp
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Аватара пользователя
Dryundel
Полковник
Сообщения: 2406
Зарегистрирован: 22 май 2017, 23:15
Откуда: Ярославль
Имя: Андрей
Поблагодарили: 15 раз

Fast Pins - (быстрые пины). -- Оптимизация работы входов/выходов -- digitalRead, digitalWrite, analogRead, analogWrite

Сообщение Dryundel »

[ref]Di123[/ref], этот блок не для Вас. Вам только штатные и то не все. Остальное у Вас не работает. :)

Отправлено спустя 5 минут 47 секунд:
Перед тем как что то писать, типа - "Фсёпропало! ", обычно читают инструкции и тестируют настройки. Я не могу никого заставлять это делать.
Аватара пользователя
Dryundel
Полковник
Сообщения: 2406
Зарегистрирован: 22 май 2017, 23:15
Откуда: Ярославль
Имя: Андрей
Поблагодарили: 15 раз

Fast Pins - (быстрые пины). -- Оптимизация работы входов/выходов -- digitalRead, digitalWrite, analogRead, analogWrite

Сообщение Dryundel »

Блок обновлен.
Исправлен баг неотключения ШИМ при совместной оптимизации analogWrite и digitalWrite (Аналоговых и Цифровых выходов)
Ссылка на скачивание в первом посте..
Аватара пользователя
Dryundel
Полковник
Сообщения: 2406
Зарегистрирован: 22 май 2017, 23:15
Откуда: Ярославль
Имя: Андрей
Поблагодарили: 15 раз

Fast Pins - (быстрые пины). -- Оптимизация работы входов/выходов -- digitalRead, digitalWrite, analogRead, analogWrite

Сообщение Dryundel »

Блок обновлен.

Актуальная версия:
Fast_Pins_(Быстрые_пины)_V1.2_(Code_-_Professional).ubi
Полностью переработана оптимизация analogWrite.
Доработано описание настроек.

Описание в первом посте.
cfitymrf
Рядовой
Сообщения: 93
Зарегистрирован: 06 сен 2021, 07:45
Имя: иван
Благодарил (а): 2 раза
Поблагодарили: 2 раза

Fast Pins - (быстрые пины). -- Оптимизация работы входов/выходов -- digitalRead, digitalWrite, analogRead, analogWrite

Сообщение cfitymrf »

Здравствуйте . поставил блок , полезли ошибки , без блока все нормально.
[scroll]Arduino: 1.8.19 (Windows 10), Плата:"Arduino Pro or Pro Mini, ATmega328P (5V, 16 MHz)"

pr1:1854:6: error: ambiguating new declaration of 'bool digitalReadFast(uint8_t)'

C:\Users\шурик\AppData\Local\Temp\flprog\pr1\pr1.ino:2:22: note: old declaration 'int digitalReadFast(uint8_t)'

C:\Program Files (x86)\FLProg\ideV8\portable\packages\arduino\hardware\avr\1.8.4\cores\arduino/Arduino.h:136:5: note: in expansion of macro 'digitalRead'

int digitalRead(uint8_t pin);

^~~~~~~~~~~

C:\Users\шурик\AppData\Local\Temp\flprog\pr1\pr1.ino: In function 'void setup()':

pr1:216:22: error: call of overloaded 'digitalWriteFast(int, int)' is ambiguous

C:\Users\шурик\AppData\Local\Temp\flprog\pr1\pr1.ino:3:23: note: candidate: void digitalWriteFast(uint8_t, uint8_t)

C:\Program Files (x86)\FLProg\ideV8\portable\packages\arduino\hardware\avr\1.8.4\cores\arduino/Arduino.h:135:6: note: in expansion of macro 'digitalWrite'

void digitalWrite(uint8_t pin, uint8_t val);

^~~~~~~~~~~~

C:\Users\шурик\AppData\Local\Temp\flprog\pr1\pr1.ino:1868:6: note: candidate: void digitalWriteFast(uint8_t, bool)

C:\Users\шурик\AppData\Local\Temp\flprog\pr1\pr1.ino: In function 'void loop()':

pr1:1149:39: error: call of overloaded 'analogWriteFast(int, double&)' is ambiguous

C:\Users\шурик\AppData\Local\Temp\flprog\pr1\pr1.ino:4:22: note: candidate: void analogWriteFast(uint8_t, int)

C:\Program Files (x86)\FLProg\ideV8\portable\packages\arduino\hardware\avr\1.8.4\cores\arduino/Arduino.h:139:6: note: in expansion of macro 'analogWrite'

void analogWrite(uint8_t pin, int val);

^~~~~~~~~~~

C:\Users\шурик\AppData\Local\Temp\flprog\pr1\pr1.ino:1881:6: note: candidate: void analogWriteFast(uint8_t, uint16_t)

C:\Users\шурик\AppData\Local\Temp\flprog\pr1\pr1.ino: In function 'bool digitalReadFast(uint8_t)':

pr1:1854:10: error: ambiguating new declaration of 'bool digitalReadFast(uint8_t)'

C:\Users\шурик\AppData\Local\Temp\flprog\pr1\pr1.ino:2:22: note: old declaration 'int digitalReadFast(uint8_t)'

C:\Program Files (x86)\FLProg\ideV8\portable\packages\arduino\hardware\avr\1.8.4\cores\arduino/Arduino.h:136:5: note: in expansion of macro 'digitalRead'

int digitalRead(uint8_t pin);

^~~~~~~~~~~

Несколько библиотек найдено для "Wire.h"

Используется: c:\Program Files (x86)\FLProg\ideV8\portable\sketchbook\libraries\Wire

Не используется: C:\Program Files (x86)\FLProg\ideV8\portable\packages\arduino\hardware\avr\1.8.4\libraries\Wire

Несколько библиотек найдено для "EEPROM.h"

Используется: C:\Program Files (x86)\FLProg\ideV8\portable\packages\arduino\hardware\avr\1.8.4\libraries\EEPROM

Не используется: c:\Program Files (x86)\FLProg\ideV8\portable\sketchbook\libraries\E2PROM

Несколько библиотек найдено для "SPI.h"

Используется: c:\Program Files (x86)\FLProg\ideV8\portable\sketchbook\libraries\SPI

Не используется: C:\Program Files (x86)\FLProg\ideV8\portable\packages\arduino\hardware\avr\1.8.4\libraries\SPI

exit status 1

ambiguating new declaration of 'bool digitalReadFast(uint8_t)'

Неверная версия '3.8b' для библиотеки в: c:\Program Files (x86)\FLProg\ideV8\portable\sketchbook\libraries\GyverButton

[/scroll]
НовыйUser
Сержант
Сообщения: 154
Зарегистрирован: 26 ноя 2015, 22:05

Fast Pins - (быстрые пины). -- Оптимизация работы входов/выходов -- digitalRead, digitalWrite, analogRead, analogWrite

Сообщение НовыйUser »

Dryundel писал(а): 24 июл 2022, 10:43 Возможно позже добавлю и 2560.
Спасибо за блоки и информацию для размышлений
результаты впечатляют 0_o
2560 ходовая железка и оптимизация ее , очень интересный ход

(в ожидании блоков на 2560)
Ответить

Вернуться в «Другое»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 4 гостя