Dúvida na "automatização" de configuração de GPIO em uma biblioteca

19 views
Skip to first unread message

agaelema .

unread,
Dec 27, 2017, 8:45:31 PM12/27/17
to
Boa noite pessoal, espero que todos tenham passado um ótimo natal.

Gostaria de uma ajuda com uma dúvida. A algum tempo li sobre o pre-processor ## para C/C++ e achei bastante interessante para tentar automatizar alguns processos.

Para teste tentei aplicar o conceito em uma biblioteca de LCD que adaptei a bastante tempo para o MSP430. Nessa biblioteca a porta utilizada e os pinos já estavam definidos dentro das funções, o que limita um pouco o uso ou torna pouco prático adaptar para um projeto diferente (tendo que mudar todas as linhas manipulando uma porta).

Então pensei em utilizar o ## para permitir uma configuração prévia, mas flexível da porta e do pino.

Por exemplo, posso criar a seguinte macro para setar um pino:
#define    SET_PIN(port, pin)    P ## port ## OUT |= BIT ## pin

Ao chamar essa macro: "SET_PIN(1,0)" será expandida para "P1OUT |= BIT0". Até aqui funciona perfeito, mas para tornar mais flexível preciso que os valores de entrada (não sei se posso chamar de argumentos) possam ser predefinidos, e aí que tive problemas.

Pensei em fazer assim:
#define    x_port    1
#define    x_pin     0

E então chamar a macro "SET_PIN(x_port, x_pin)", mas diferente do que eu esperava a expansão não "pega" o valor relacionado ao define, mas sim a escrita explícita, resultando em "Px_port |= BITx_pin".

Existe alguma maneira da macro reconhecer o valor relacionado ao define, ou algum outro método para tornar essa configuração transparente ao usuário (sem ter que ir de linha em linha modificando todas as chamadas).

Grato.

Haroldo L. M. Amaral

Laboratório de Sistemas de Potência e Técnicas Inteligentes - LSISPOTI
Doutorando em Eng. Elétrica - Poli USP - SP

Mestre em Eng. Elétrica - UNESP Bauru

Tecnólogo em Sistemas Biomédicos - FATEC Bauru

Técnico em Eletrônica - CTI/UNESP Bauru

Skype: academic_haroldo_amaral

agae...@gmail.com

Lattes || Linkedin || Embarcados || Github

Reply all
Reply to author
Forward
0 new messages