Почему в библиотеках Arduino нет встроенного кода на языке C?
Когда я посмотрел, как закодированы библиотеки Arduino, я ожидал увидеть имена регистров, такие как регистры ввода-вывода (PINx, DDRx, PORTx) и другие подобные регистры с назначенными им значениями, но вместо этого я увидел обычный код на языке C с функциями и классом.
Почему в структуре библиотеки нет встроенного C? Я что-то не понимаю в чем-то очень простом? Пожалуйста, помогите мне понять.
@Roshan, 👍1
2 ответа
Потому что API Arduino абстрагирует эти вещи.
Если вы поместите такой низкоуровневый код в библиотеку, библиотека станет непереносимой. Придерживаясь API Arduino (digitalWrite, pinMode и т. д.), библиотеку можно использовать на всех платах.
Если вы посмотрите на основную библиотеку Arduino (например, версию AVR wiring.c), вы увидите много низкоуровневого доступа к регистрам. Это почему основной код специфичен для архитектуры процессора.
Другие библиотеки построены поверх основного API, чтобы быть портативный.
- Какие Arduino поддерживают ATOMIC_BLOCK?
- Двоичный форматировщик сообщений
- Создание библиотеки для ардуино
- Использование библиотеки PBC на Arduino
- устаревшее преобразование из строковой константы в 'char*'
- Как получить исходные файлы для библиотек Arduino?
- Ошибка: "недопустимое использование нестатической функции-члена" при вызове функции из моего собственного класса-метода
- Как запрограммировать ардуино на чистом C/C++?
Тогда почему люди вообще пишут код, используя низкоуровневые регистры, если они могут просто использовать основной API?, @Roshan
@Roshan: 1. Производительность:
digitalWrite()
, например, более чем в 100 раз медленнее, чем прямой доступ к порту. 2. Аппаратные возможности: ядро обеспечивает доступ только к самым общим вещам, вы можете в полной мере использовать возможности оборудования, только если вы обращаетесь к оборудованию напрямую., @Edgar Bonet