FLProg
Вход на сайт
Логин:
Пароль:
Поиск
...
Статистика
Пятница, 15.12.2017, 09:28
Приветствую Вас Гость | RSS
Главная | Регистрация | Вход

Поиск по сайту


Форум
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
Страница 1 из 11
Модератор форума: support, Сергей, Anydy, Олег 
Форум » Основной » Железо - контроллеры, шилды, датчики и др. » Контроллеры » На заметку знатокам!!! Ускоряем работу линий GPIO Arduino. (Ускоряем работу линий GPIO Arduino)
На заметку знатокам!!! Ускоряем работу линий GPIO Arduino.
Александр_Светлый Дата: Суббота, 17.06.2017, 01:25 | Сообщение # 1
Подполковник
Группа: Проверенные
Сообщений: 210
Награды: 3
Репутация: 3
Статус: Offline
Ускоряем работу линий GPIO Arduino

Добавлено (17.06.2017, 01:04)
---------------------------------------------
Платформа Arduino является очень удобной и легко осваиваемой новичками, что позволяет довольно быстро создавать несложные проекты в области электроники и автоматизации. Как правило, наиболее популярные платы Arduino основаны на 8-разрядных микроконтроллерах ATmega и не могут предложить большой производительности. Но для упрощения взаимодействия новичков с платами Arduino многие сложности в коде были скрыты от посторонних глаз с помощью различных библиотек.

Экосистема Arduino в действительности использует язык высокого уровня C++. Как правило, часть кода C++ содержится библиотеках и фреймворках, и большинство людей просто склонны кодировать свои основные программы, используя C-стиль, используя объекты библиотеки. Но из-за этого быстродействие микроконтроллера сильно снижается, поскольку максимальной производительности можно достичь лишь используя ассемблер, а не языки высокого уровня. Тем не менее, энтузиаст под ником Fredllll создал библиотеку шаблонов для ускорения работы линий ввода/вывода (GPIO) Arduino.
Если вы когда-либо делали что-либо серьезное с Arduino, вы, вероятно, знаете, что в то время как функция digitalWrite очень удобна в использовании, она делает много работы за кулисами, и это существенно нагружает ядро микроконтроллера при каждом вызове. Но версия Fredllll может переключать состояние вывода за два цикла. Вы можете использовать константу для включения вывода, например:
switchOn<1>();
Если вам не нравится использовать магические числа (и это разумно), вы можете определить константу:
const uint8_t ledPin=1;
switchOn<ledPin>();
Поскольку вы, вероятно, захотите организовать какие-нибудь временные задержки, то здесь имеется функция nop, которая позволяет отложить заданное количество циклов. Ниже приведен код, который генерирует квадратную волну (меандр) с частотой 1,3 МГц.
const uint8_t myPin = 5;
void loop(){
cli(); // отключить прерывания, так как они нарушают синхронизацию
do {
switchOnExclusive<myPin>(); // 1 цикл nop<5>(); // 5 циклов switchOffPortOfPin<myPin>(); // 1 цикл nop<3>(); // 3 циклов } while(1) //jump back to do is 2 cycles
}

Таким образом, новая библиотека дает большую гибкость при работе с линиями ввода/вывода и позволяет значительно ускорить работу Arduino с этими линиями, поскольку стандартная функция digitalWrite примерно в пятьдесят раз медленнее, чем прямой доступ к порту. Саму библиотек можно взять на https://github.com/fredlll....tion.h.

Добавлено (17.06.2017, 01:25)
---------------------------------------------
Ещё одна интересная статья 

Двойная загрузка или dual boot для обычных настольных компьютеров представляется сегодня вполне нормальным явлением. Так, пользователь может запускать на своем компьютере две операционные системы, например, Linux для работы и Windows для игр и развлечений.



Если это справедливо для больших вычислительных систем, то почему бы такое не реализовать для малых вычислительных систем, например, для Arduino. Тогда бы пользователь Arduino мог бы менять прошивки «на лету» в зависимости от текущих задач без необходимости подключения платы к компьютеру через порт USB и перепрограммирования этой платы. И, к счастью, двойную загрузку можно сделать для Arduino, потребуется лишь дополнительная микросхема энергонезависимой памяти (EEPROM).

В данном случае была «проапгрейдена» миниатюрная плата Arduino Pro Mini. В качестве чипа EEPROM использовалась микросхема M24512 с интерфейсом I2C и объемом памяти 64 КБ. Ниже представлена схема подключения M24512 к Arduino посредством линий SCL и SDA интерфейса I2C.



Из-за отсутствия свободного места на плате микросхему памяти M24512 можно аккуратно напаять непосредственно на микроконтроллер.



В Arduino необходимо записать специальный загрузчик (bootloader), обеспечивающий возможность двойной загрузки. Скачать этот бутлоадер можно с репозитория Github. Работает механизм двойной загрузки следующим образом. Когда кнопка сброса (reset) платы Arduino нажата, происходит вход в режим загрузчика. В данном случае в режиме загрузчика происходит проверка того, закорочены ли выводы 10 и 11. Если это так, то светодиод на плате будет светиться одну секунду. Если убрать перемычку между линиями 10 и 11, прежде чем светодиод погаснет, система войдет в режим двойной загрузки и начнет обмен информацией между внутренней flash-памятью микроконтроллера и внешней EEPROM-памятью. То есть программа, которая выполнялась на микроконтроллере перестанет выполняться и будет записана во внешнюю энергонезависимую память, где будет в последствии храниться, а программа из этой внешней памяти будет записана в микроконтроллер и начнет выполняться вместо предыдущей. Чтобы вернуть все на место, нужно снова закоротить выводы 10 и 11, нажать кнопку сброса и успеть убрать перемычку до того, как погаснет светодиод.

Вот так просто можно реализовать режим двойной загрузки в Arduino. Он может понадобиться, например, если вы хотите запускать стабильный и «сырой» код на одном устройстве. В любом случае dual boot открывает новые возможности для разработчиков малых встраиваемых систем.


Я не флудер , просто мне есть что сказать =)
 
pan Дата: Суббота, 17.06.2017, 15:31 | Сообщение # 2
Генерал-полковник
Группа: Проверенные
Сообщений: 1246
Награды: 41
Репутация: 38
Статус: Offline
Цитата Александр_Светлый ()
поскольку стандартная функция digitalWrite примерно в пятьдесят раз медленнее, чем прямой доступ к порту.
это ж опупеть ... 
вот бы сделать чтоб flprog использовала эту библиотеку
 
support Дата: Суббота, 17.06.2017, 19:55 | Сообщение # 3
Автор программы
Группа: Администраторы
Сообщений: 1003
Награды: 46
Репутация: 28
Статус: Offline
Цитата pan ()
вот бы сделать чтоб flprog использовала эту библиотеку
Для начала ссылка на гитхаб не работает (страница не найдена), а вообще интересно.


Разработчик программы FLProg
 
Dev1 Дата: Суббота, 17.06.2017, 20:06 | Сообщение # 4
Генерал-лейтенант
Группа: Проверенные
Сообщений: 691
Награды: 13
Репутация: 18
Статус: Offline
Цитата support ()
Для начала ссылка на гитхаб не работает (страница не найдена), а вообще интересно.

TEMPLATES SPEED UP ARDUINO I/O

Библиотеки автора


Win7/10-64 FLProg v3.0.2 external IDE 1.8.5

 
support Дата: Суббота, 17.06.2017, 20:08 | Сообщение # 5
Автор программы
Группа: Администраторы
Сообщений: 1003
Награды: 46
Репутация: 28
Статус: Offline
Спасибо

Разработчик программы FLProg
 
Александр_Светлый Дата: Воскресенье, 18.06.2017, 01:31 | Сообщение # 6
Подполковник
Группа: Проверенные
Сообщений: 210
Награды: 3
Репутация: 3
Статус: Offline
Цитата support ()
Для начала ссылка на гитхаб не работает (страница не найдена)
В самом-самом верху первого сообщения рабочая ссылка.


Я не флудер , просто мне есть что сказать =)

Сообщение отредактировал Александр_Светлый - Воскресенье, 18.06.2017, 02:07
 
Слимпер Дата: Воскресенье, 18.06.2017, 06:09 | Сообщение # 7
Генерал-полковник
Группа: Проверенные
Сообщений: 1017
Награды: 57
Репутация: 44
Статус: Offline
Для того чтобы было в одном месте, добавлю еще одну библиотеку.
Ускоряем работу Arduino, та же, но на github.com   CyberLib 

На ее базе делал один блок, вполне рабочая библиотека.
 
Александр_Светлый Дата: Среда, 21.06.2017, 02:19 | Сообщение # 8
Подполковник
Группа: Проверенные
Сообщений: 210
Награды: 3
Репутация: 3
Статус: Offline
Вот ТУТ альтернативный монитор порта с поддержкой разных кодировок, но у меня всё равно в порту "кракозяблы" почему то...

Я не флудер , просто мне есть что сказать =)
 
dekorator Дата: Среда, 21.06.2017, 20:52 | Сообщение # 9
Подполковник
Группа: Проверенные
Сообщений: 286
Награды: 10
Репутация: 2
Статус: Offline
По поводу ускорения. Есть тема на Русском!!!
   http://www.cyber-place.ru/showthread.php?t=550
 
Слимпер Дата: Четверг, 22.06.2017, 08:04 | Сообщение # 10
Генерал-полковник
Группа: Проверенные
Сообщений: 1017
Награды: 57
Репутация: 44
Статус: Offline
Цитата dekorator ()
По поводу ускорения. Есть тема на Русском!!!    http://www.cyber-place.ru/showthread.php?t=550
Я эту же ссылку давал в 7 сообщении  tongue
 
Dev1 Дата: Суббота, 24.06.2017, 14:33 | Сообщение # 11
Генерал-лейтенант
Группа: Проверенные
Сообщений: 691
Награды: 13
Репутация: 18
Статус: Offline
То же про "ускорение", где то мелькало...
Fast library ILI9341




Win7/10-64 FLProg v3.0.2 external IDE 1.8.5

 
Форум » Основной » Железо - контроллеры, шилды, датчики и др. » Контроллеры » На заметку знатокам!!! Ускоряем работу линий GPIO Arduino. (Ускоряем работу линий GPIO Arduino)
Страница 1 из 11
Поиск:

FLProg © 2017
Яндекс.Метрика