Re: [TI] E-mail de compilação para texas-sc@googlegroups.com - 1 atualização em 1 tópico

17 views
Skip to first unread message

Bruno Jurse Saraiva

unread,
Jan 4, 2018, 5:43:04 AM1/4/18
to texa...@googlegroups.com
Bom dia Haroldo,

Para esse tipo de implementação, que é um driver de baixo nível, eu recomendo que você use uma estratégia um pouco diferente:

- Encapsule o driver de maneira totalmente separada da aplicação principal. Ele deve requerer somente um #include do header, e o source pode até estar pré-compilado ao invés de também ser incluído.
- Crie uma função de inicialização. Essa função é chamada uma única vez na sua aplicação, e nela são definidos os parâmetros de hardware (os pinos).
- Com um pouco de paciência e abstração é possível até você criar várias instâncias de LCD's em rodando para uma mesma aplicação.
- Também com um pouco de abstração (fica a seu critério decidir se vale a pena ou não), é possível ainda usar uma única biblioteca para diferentes hardwares (por exemplo, MSP e ARM/TIVA) - note que apenas a alteração do estado do pino exige um comando diferente, o resto é igual para qualquer processador. Nessa situação, uma possível estratégia é criar uma função externa cuja missão é ligar (ou desligar) um pino - e um parâmetro qualquer na inicialização define se a função a ser chamada é para MSP ou para Tiva.

Enjoy!

Bruno

2017-12-28 21:27 GMT+00:00 <texa...@googlegroups.com>:
"agaelema ." <agae...@gmail.com>: Dec 27 11:45PM -0200

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 <http://lattes.cnpq.br/3986982115883346> || Linkedin
<https://br.linkedin.com/in/haroldoamaral> || Embarcados
<http://www.embarcados.com.br/author/agaelema/> || Github
<https://github.com/agaelema>*
Você recebeu esse resumo porque está inscrito para receber atualizações deste grupo. Você pode alterar suas configurações na página de associação do grupo.
Para cancelar sua inscrição neste grupo e deixar de receber e-mails do mesmo, envie um e-mail para texas-sc+unsubscribe@googlegroups.com.



--
(via GMail)

agaelema .

unread,
Jan 4, 2018, 10:53:25 AM1/4/18
to Texas Instruments Info para Designers e Projetistas
Boa tarde Bruno.

Consegui resolver o problema. Em outros repositórios eu usei a abordagem de usar alguns #define selecionando qual o uC utilizado e depois com #ifdefined eu conseguia isolar a configuração exata de cada um, funciona muito bem. Mas nesse caso ainda ficariam algumas pendência dificultando mudar pinos/portas, ou teria que apelar para várias funções, uma para cada possibilidade.

No final o resultado foi esse aqui

O usuário modifica os pinos e portas no .h, dentro do .c eu deixei as macros que automatizam o processo. Inclusive adicionando alguns #ifdefined da para tornar portável para outras arquiteturas.

Abraço.

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

Reply all
Reply to author
Forward
0 new messages