Não são funções nativas de Arduino porque o Arduino não é uma arquitectura nem um compilador, é uma mera API + bootloader.
Meu caro TigPT,
Arquitectura ? não mencionei essa palavra, o que eu mencionei foi compilador, e ai sim "I stand my
ground" !
A filosofia "Arduino", engloba varias componentes, sendo que o que realmente faz a diferença é
o "Ambiente" Arduino, aquilo que geralmente se chama de IDE e serve para desenvolver o
código "Arduino" que depois será carregado no AVR.
Como em qualquer outro IDE , o do Ambiente de Desenvolvimento do Arduino é constituído por
uma LINGUAGEM, que no caso é baseada no C/C++. A implantação da LINGUAGEM ARDUINO é
somente baseada em C/C++, não é 100% compatível com o padrão ISO/ANSI que especifica
a totalidade da linguagem C/C++.
Como em qualquer linguagem, o Arduino C/C++ tem as suas especificidades, e como qualquer
linguagem o "Ambiente de Desenvolvimento do Arduino" tem a sua "Language Reference".
Acontece que a "Language Reference" do COMPILADOR utilizado pelo IDE do Arduino refere
claramente um conjunto de funções e constantes que são NATIVAS do ambiente/compilador
em si, entre elas estão as funções que "tratam" dos IOs: pinMode, digitalWrite e digitalRead.
Por isso, sim, o Arduino engloba um IDE com UM COMPILADOR, sendo o compilador baseado
no avr-gcc.
E pinMode, digitalWrite e digitalRead são funções que fazem parte da lib do COMPILADOR do
Arduino, dai serem NATIVAS ao COMPILADOR do Arduino e não existirem “nativamente” em mais
nenhum compilador de C/C++.
Já uma API é uma coisa totalmente diferente e que nada tem a ver para o caso, uma API é
uma interface entre um software e um cliente que usa as suas funcionalidades sem sequer
saber dos detalhes da implementação. Se quiseres podemos aprofundar este tema, mas nada
tem a ver para este caso.
No Arduino o que tu tens é IDE (Ambiente de Desenvolvimento) onde escreves o código, aquilo
que em Arduino se chama “sketch” , fazes a COMPILAÇÃO, e fazes o upload do código compilado
para o AVR, que ai sim, tem um bootloader.
O bootloader é um pequeno programa residente no AVR e que serve somente para que o IDE
Arduino possa carregar o código COMPILADO para o AVR, e depois de carregado faz o reset da
board e executa o código que foi carregado, deixando de ter qualquer posterior uso durante a
execução do mesmo.
Por acaso até é possível carregar o código gerado pelo COMPILADOR Arduino sem usar o bootloader
do Arduino, basta usar um programador externo, como o AVRDude ou o AVRprog, por exemplo.
É claro que o IDE Arduino ("Arduino software" ou "Arduino environment" como é descrito por vezes)
tem um compilador, de que outra forma achas tu que o AVR conseguia executar o código ? O AVR
não tem um interpretador. O Arduino usa a toolchain avr-gcc para compilar, o avrdude para
fazer o upload e a lib avr-libc.
O sucesso do Arduino, e a sua principal força, é o seu IDE e as funções disponibilizadas por este
nas suas libs, essas funções, como o pinMode, digitalWrite e digitalRead, vieram permitir que
muitos que não compreendem nem sabem o que está “por detrás” possam utilizar um uC de uma
forma simples e rápida, mas isso vem com um preço, e o preço é depois nos faltam as bases
quando queremos ir mais alem, mas nada como ler as datasheets, está lá tudo, boa sorte na
tua demanda.
Não é nada interessante utilizar valores expostos da arquitectura por uma simples razão, é uma biblioteca, é suposto ser portável e flexível. Em vez de ser um conjunto de horas de trabalho enorme que depois não são facilmente migráveis para outros projectos.
Era somente um exemplo, usa-o da forma que consideres melhor para o projecto em causa, como
define, macro ou numa função, a ideia era somente partilhar a informação.
Abraços
Paulo A.