Почему в библиотеках Arduino нет встроенного кода на языке C?

Когда я посмотрел, как закодированы библиотеки Arduino, я ожидал увидеть имена регистров, такие как регистры ввода-вывода (PINx, DDRx, PORTx) и другие подобные регистры с назначенными им значениями, но вместо этого я увидел обычный код на языке C с функциями и классом.

Почему в структуре библиотеки нет встроенного C? Я что-то не понимаю в чем-то очень простом? Пожалуйста, помогите мне понять.

, 👍1


2 ответа


0

Потому что API Arduino абстрагирует эти вещи.

Если вы поместите такой низкоуровневый код в библиотеку, библиотека станет непереносимой. Придерживаясь API Arduino (digitalWrite, pinMode и т. д.), библиотеку можно использовать на всех платах.

,

1

Если вы посмотрите на основную библиотеку Arduino (например, версию AVR wiring.c), вы увидите много низкоуровневого доступа к регистрам. Это почему основной код специфичен для архитектуры процессора.

Другие библиотеки построены поверх основного API, чтобы быть портативный.

,

Тогда почему люди вообще пишут код, используя низкоуровневые регистры, если они могут просто использовать основной API?, @Roshan

@Roshan: 1. Производительность: digitalWrite(), например, более чем в 100 раз медленнее, чем прямой доступ к порту. 2. Аппаратные возможности: ядро обеспечивает доступ только к самым общим вещам, вы можете в полной мере использовать возможности оборудования, только если вы обращаетесь к оборудованию напрямую., @Edgar Bonet