Análise de abstração : um belo desafio..

Bom pessoal.
Antes de mais nada, queria deixar claro que a ideia eh trazer conhecimento com o intuito de ajudar. Sendo assim o conceito de abstração com estudo do caso pode ser levado na brincadeira. Pessoas podem achar que eh perca de tempo. Beleza. Eu acho que nao é e tenho razoes para pensar assim o que nao vem ao caso.
O problema:
Como abstrair o gerenciamento de um dispositivo externo qualquer, com base em primitivas de acesso (init, read, write, etc...) considerando:
a) A diversidade do dispositivo controlador, no nosso caso aqui um processador (pic, arm, 8051, avr...)
b) O modelo da placa real, que implica em utilizar diferentes metodos de acesso para o gerenciamento, a saber:
b.1) Na possibilidade de usar um periferico interno do processador para acessar o dispositivo ou;
b.2) Acessar o mesmo via GPIO emulada.
c) Esse é só para dificultar mais ainda. O dispositivo no caso de GPIO emulada, pode ser ligado no barramento de gpio dependendo do gosto do usuario, ou seja (b.2) nao implica em conexao fisica fixa, depende da necessidade.
Traduzindo em estudo de caso:
Vamos escolher algo que todo mundo conhece pra deixar claro a forma de fazer.
Uma memoria eeprom 24c01, que pode ser acessada via spi. Essa spi pode partir de um recurso interno do processador (se tiver disponivel) ou pode ser feita na mão, escolhendo pinos GPIO do processador pra fazer o acesso.
Como fazemos hoje. Tomando por base a linguagem C so para fixar, hoje a gente faz da seguinte forma:
A) Usa um main.c, da um include do processador, define os gpio, inicia os gpio (direcao, estado), e escreve um conjunto de rotinas, start, stop, read, write, etc....beleza...funciona..mas se oce trocar de placa..voce vai la e muda o gpio no main.c (ou main.h se for o caso) e tudo fica bem. beleza...se isso pra voce eh o seu mundo nem precisa ler o resto.
- Problema associado : voce tem um conjunto de projetos com o mesmo processador, que estao evoluindo e tals. Se tem N projetos diferentes tem N ee24xx.c ee24xx.h diferentes, um em cada pasta de projeto. Qq atualizacao ou insercao de funcoes, caso isso queira ser aplicacado na linha de produção é um parto. Tem gente que suporta isso, mesmo N sendo grande (tipo uns 50 projetos diferentes).
- Ah na placa X1, com processador Y1, eu usei o spi interno. Na placa X2, f****, tive que fazer com GPIO emulado, em 3 pinos da PORTA Z1. Na placa X3, mudou.... vai ser ligado na porta Z2.
Na placa X4 ixe, mudou o processador. Mi fu*....??? Há controvérsias.
Voce fica insistindo: poxa basta criar um conjunto de arquivos por pasta de projeto, por versao que resolve. Resolve mesmo ? Mesmo que quando a quantidade de projetos aumente, com varias versoes e tals... Um iria me dizer...ah usa o CVS SVN pra controlar a versao. Puxa aversao do cara e usa. Pronto acabou ! ehehehehe calma que nem comecei o samba....
Bom, amanha voce descobre que por uma questao qq voce precise corrigir um defeitim la em ee24xx.c e agora ? Abre todos os ee24xx.c e corrige ? o CVS ja resolve isso ?
Bom ae ... muda-se processador ... comeca tudo de novo ? o que importa nao eh a eficiencia.... e se livrar...sera mermo ?
Ate onde voce pode criar camadas de abstracao, para evitar muita coisa associada aos metodos convencionais de fazer a coisa ?
(fica pra proxima...) ehehhe
Antes de mais nada, queria deixar claro que a ideia eh trazer conhecimento com o intuito de ajudar. Sendo assim o conceito de abstração com estudo do caso pode ser levado na brincadeira. Pessoas podem achar que eh perca de tempo. Beleza. Eu acho que nao é e tenho razoes para pensar assim o que nao vem ao caso.
O problema:
Como abstrair o gerenciamento de um dispositivo externo qualquer, com base em primitivas de acesso (init, read, write, etc...) considerando:
a) A diversidade do dispositivo controlador, no nosso caso aqui um processador (pic, arm, 8051, avr...)
b) O modelo da placa real, que implica em utilizar diferentes metodos de acesso para o gerenciamento, a saber:
b.1) Na possibilidade de usar um periferico interno do processador para acessar o dispositivo ou;
b.2) Acessar o mesmo via GPIO emulada.
c) Esse é só para dificultar mais ainda. O dispositivo no caso de GPIO emulada, pode ser ligado no barramento de gpio dependendo do gosto do usuario, ou seja (b.2) nao implica em conexao fisica fixa, depende da necessidade.
Traduzindo em estudo de caso:
Vamos escolher algo que todo mundo conhece pra deixar claro a forma de fazer.
Uma memoria eeprom 24c01, que pode ser acessada via spi. Essa spi pode partir de um recurso interno do processador (se tiver disponivel) ou pode ser feita na mão, escolhendo pinos GPIO do processador pra fazer o acesso.
Como fazemos hoje. Tomando por base a linguagem C so para fixar, hoje a gente faz da seguinte forma:
A) Usa um main.c, da um include do processador, define os gpio, inicia os gpio (direcao, estado), e escreve um conjunto de rotinas, start, stop, read, write, etc....beleza...funciona..mas se oce trocar de placa..voce vai la e muda o gpio no main.c (ou main.h se for o caso) e tudo fica bem. beleza...se isso pra voce eh o seu mundo nem precisa ler o resto.
- Problema associado : voce tem um conjunto de projetos com o mesmo processador, que estao evoluindo e tals. Se tem N projetos diferentes tem N ee24xx.c ee24xx.h diferentes, um em cada pasta de projeto. Qq atualizacao ou insercao de funcoes, caso isso queira ser aplicacado na linha de produção é um parto. Tem gente que suporta isso, mesmo N sendo grande (tipo uns 50 projetos diferentes).
- Ah na placa X1, com processador Y1, eu usei o spi interno. Na placa X2, f****, tive que fazer com GPIO emulado, em 3 pinos da PORTA Z1. Na placa X3, mudou.... vai ser ligado na porta Z2.
Na placa X4 ixe, mudou o processador. Mi fu*....??? Há controvérsias.
Voce fica insistindo: poxa basta criar um conjunto de arquivos por pasta de projeto, por versao que resolve. Resolve mesmo ? Mesmo que quando a quantidade de projetos aumente, com varias versoes e tals... Um iria me dizer...ah usa o CVS SVN pra controlar a versao. Puxa aversao do cara e usa. Pronto acabou ! ehehehehe calma que nem comecei o samba....
Bom, amanha voce descobre que por uma questao qq voce precise corrigir um defeitim la em ee24xx.c e agora ? Abre todos os ee24xx.c e corrige ? o CVS ja resolve isso ?
Bom ae ... muda-se processador ... comeca tudo de novo ? o que importa nao eh a eficiencia.... e se livrar...sera mermo ?
Ate onde voce pode criar camadas de abstracao, para evitar muita coisa associada aos metodos convencionais de fazer a coisa ?
(fica pra proxima...) ehehhe