Поговорим о Wiring #11
Replies: 4 comments 5 replies
-
Не могу сказать, что у меня есть четкое понимание, но судя по другим платам, в пакетах ардуино принято инициализировать всю встроенную периферию по максимуму заранее. Пользователь не должен в явном виде запускать какую-то инициализацию, он пишет только свой пользовательский код. Насчет того, что китайцы постоянно что-то ремапят - не могли бы Вы привести пример? Я если это речь про наш пакет - там ардуино-кода-то пяток строчек, когда они успевают? :) |
Beta Was this translation helpful? Give feedback.
-
Многие знания - многие печали... :) Если вы имеете в виду перепроверку и переинициализацию пинов - это в Ардуино во всех платах так. При каждом обращении пин инициализируется заново. Добавлю - для ардуино мира это абсолютно нормально. Если вы мигаете лампочкой с частотой раз в секунду, вам абсолютно все равно, занимает ли вывод на пин 1 микросекунду или даже пару миллисекунд. |
Beta Was this translation helpful? Give feedback.
-
Мне кажется, Вы мыслите категориями больших компьютеров. В микро мире у пользователя на этапе инициализации консоль на USART0 может и отсуствовать и он никакой вашей диагностики не увидит. Для него это будет выглядеть так, как будто плата зависла. Мне кажется, что о эффективности тут надо думать в последнюю очередь. Еще раз - тем, кому нужна эффективность - не нужны команды ардуино, они будут пользовать функции СДК напрямую. Посмотрите аддон Эрла Филхофера для ярда RP2040. Он поддерживает функции Вайринга, но вместе с тем он дает прямой доступ ко всем методам СДК. И весь эффективный код, конечно, пишется через СДК, а не через Вайринг. |
Beta Was this translation helpful? Give feedback.
-
Вообще главный смысл Вайринга - переносимость кода. Если вы используете только ардуино-функции, один и тот же код будет работать и на Ардуино Нано, и на ЕСП32, и на СТМ. Если вы начнете требовать от пользователя инициализировать периферию "вручную" - никакой переносимости и близко не останется. |
Beta Was this translation helpful? Give feedback.
-
Дмитрий, а у Вас есть понимание или представление как проинициализировать борду? Так как китайцы сделали, это отстой.
В моем понимании, сначала нужно собрать все данные о том какую периферию хочет задействовать ардуино-прогер. Затолкать все параметры в какую либо структуру однозначно описывающее конкретную борду, и сделать вызов функции инициализации железа один раз, непосредственно перед передачей управления в loop(). И больше не проверять.
Китайцы же проверяют соответствие пинов и режимов постоянно, постоянно ремапят... и т.д В общем не понятно для чего эти костыли.
Beta Was this translation helpful? Give feedback.
All reactions