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