Цитата:
Сообщение от sunjob
хотелось бы УСЛЫШАТЬ МНЕНИЯ:
- где можно и корректно использовать "такую замену" ардуиновским функциям
- где нет
- какие особенности
- подводные камни
- итд
|
Сразу скажу, это моя радикальная точка зрения, я её никому не навязываю, но и менять не вижу смысла. Считаю, что использовать Wiring из ардуиновских библиотек вредно и вообще не следует никогда. Функция digitalRead() и является её частью. Суть состоит в том, что эта штука никакого функционала не добавляет, является обёрткой, якобы повышающей удобство кодинга, а на деле только поощряющей быдлокодерство. Её применение на такой слабенькой платформе как AVR является полным абсурдом, т.к. пожирает ресурсы системы на порядки больше, чем непосредственно функциональный код. Для того, чтобы удивиться, достаточно без задержек подрыгать ножкой через digitalWrite() и напрямую и померить частоту меандра. Хотя, можно просто пробежаться по исходникам и прикинуть, сколько это будет тактов вместо одного.
Для себя я создал минимальный набор библиотек переделанных из дистрибутива Ардуины, который позволяет с минимальными переделками подключать к своим проектам дополнительные полезные библиотеки для неё же, плюс всё что душе угодно и собирать всё в среде AVR Studio. Так мной был почти полностью выдран Wiring (кроме кода для функций задержек) и все обращения к железу я всегда переписываю напрямую. Это к вопросу, возможно ли это. Да, не только возможно, но и крайне полезно для производительности. Никаких особенностей нет, кроме того, что надо внимательно прочитать даташит на AVR'ку и понять что и как управляется. С этого вообще и надо начинать знакомиться с МК, но вот Ардуина напрочь отбивает такое желание.
Если интересно, как собирать ардуиновские проекты под AVR Studio, могу сделать отдельный пост.