Limite do case no Switch

Software e Hardware para uC PIC

Moderadores: andre_luis, 51, guest2003, Renie

Mensagempor msamsoniuk » 19 Dez 2008 00:35

pois eh... uma vez eu vi um cara fazer um emulador de alguma cpu qq por ae:

Código: Selecionar todos
switch(ram[pc])
{
  case NOP:
    nop();
    break;
  case ADD:
    add();
    break;
  case SUB:
    add();
    break;
  case MOV:
    ... 

}


achei a ideia boa e pensei em fazer similar para o 68000. dei uma pesquisada e percebi que muitos compiladores otimizam o switch construindo uma lookup table com ponteiros, entao usei uma construcao equivalente :

Código: Selecionar todos
void (*instruction[65536])();

instruction[0x4E75] = nop;
instruction[0x0024] = stop;
...

while()
{
   instruction[ram[pc]]();
}


o salto de performance quando se usa uma lookup table eh muito alto... eh praticamente a arma nuclear da programacao! :) hehehe

tipo, aquela constante ideia "quero converter numero em ascii...":

Código: Selecionar todos
ascii = numero + '0';


mas nao funciona com hexa. dae o cara jah inventa if numero>=0xA e blablabla ou faz um switch com 16 testes... resolve facil com uma lookup table:

Código: Selecionar todos
char *table="0123456789abcdef";

ascii = table[numero];


a historia da tabela de 2^32 entradas eu conto outro dia (muito complexo, tem q fazer uns desenhos para explicar)...e dae jah eh a arma termonuclear do juizo final na programacao! hehehe :D
Avatar do usuário
msamsoniuk
Dword
 
Mensagens: 2935
Registrado em: 13 Out 2006 18:04

Mensagempor buiz » 19 Dez 2008 08:36

30 cases?

Cada programador tem a sua necessidade, a minha é efetuar a leitura de 550 sensores termopares em uma unica placa utilizando um PIC.

Bom, mas realmente não sou um mestre em programação, pois estou sempre em constante aprendizado, e é por isso que participo do forum, para trocas de ideias e soluções.

Um abraço a todos que no decorrer de 2008 estiveram aqui sempre prontos para ajudar.

Boas Festa e um Próspero 2009 para todos.
Editado pela última vez por buiz em 19 Dez 2008 09:56, em um total de 5 vezes.
Avatar do usuário
buiz
Byte
 
Mensagens: 165
Registrado em: 20 Out 2006 14:59
Localização: Cachoeira do Sul - RS

Mensagempor ffcprog » 19 Dez 2008 09:28

Cada programador tem a sua necessidade, a minha é efetuar a leitura de 5500 sensores termopares em uma unica placa utilizando um PIC.
..
>.
>.
>.
..
..
>.
Sei....
ffcprog
Byte
 
Mensagens: 145
Registrado em: 14 Fev 2007 23:16

Mensagempor buiz » 19 Dez 2008 09:54

Legal!!
Avatar do usuário
buiz
Byte
 
Mensagens: 165
Registrado em: 20 Out 2006 14:59
Localização: Cachoeira do Sul - RS

Mensagempor Djalma Toledo Rodrigues » 19 Dez 2008 10:10

65536 cases ? 2^32 entradas ?
Éra um programa para comprovar a Relatividade, só pode ser .
Ou os Teoremas de Gödel.
hehehe.

Abraço Marcelo
Abraço Jean
Editado pela última vez por Djalma Toledo Rodrigues em 19 Dez 2008 11:32, em um total de 2 vezes.
Avatar do usuário
Djalma Toledo Rodrigues
Dword
 
Mensagens: 2334
Registrado em: 03 Ago 2008 13:22

Mensagempor Djalma Toledo Rodrigues » 19 Dez 2008 10:17

buiz escreveu:Legal!!


E ele acreditou ...

Abraço Ffcprog

5 500 Termopilhas ... (coitado do PIC ):D
Avatar do usuário
Djalma Toledo Rodrigues
Dword
 
Mensagens: 2334
Registrado em: 03 Ago 2008 13:22

Mensagempor buiz » 19 Dez 2008 13:07

Editado pela última vez por buiz em 25 Fev 2009 09:07, em um total de 1 vez.
Avatar do usuário
buiz
Byte
 
Mensagens: 165
Registrado em: 20 Out 2006 14:59
Localização: Cachoeira do Sul - RS

Mensagempor Djalma Toledo Rodrigues » 20 Dez 2008 15:21

Buiz
Nesse caso a melhor configuração seria um Multiplex das entradas e o programa um único fazendo o processamento . Isto em principio, ocorre que o custo de um Multiplex com CI ou Reed Relé é maior que um PIC.
Logo a melhor solução é utilizar alguns uC com diversas entradas de ADC e interliga-los em Rede.
Avatar do usuário
Djalma Toledo Rodrigues
Dword
 
Mensagens: 2334
Registrado em: 03 Ago 2008 13:22

Mensagempor chrdcv » 20 Dez 2008 19:17

A associação de mux analógico cascateados seria o mais indicado, mas vejamos:
5500 entradas analógicas - AnIn
Logo: Nº Sel. Mux Anal. = 13. portanto lá se vão 13 pinos de I/O do uC mais uma entrada analógica. Geralmente o mais comum é encontrar Mux de quatro canais, sendo assim, vc precisaria de 512 CI´s ou 256 caso consiga encontrar um de 8 canais analógicos. Fora o circuito externo que deverá ser realizado para a interface entre o sensor e todos os problemas provenientes de um longo cabo que nesse caso passará a ser uma linha de transmissão devido ao comprimento.

A solução do Djalma possui maior custo-benefício, maleabilidade e implementação, sendo que através da interligação de vários sensores "inteligentes" (cada um dotado de seu próprio uC) interligados em uma rede física RS485 em conjuntos de 255 sensores cada ("slaves"), possuindo tb. uma espécie de "sub-master" o qual por sua vez estaria ligado a um "master". A limitação de 255 sensores está relacionada ao número máximo permitido para a interconexão de "slaves" ou "sub-master" em uma rede física RS485 devido a parâmetros elétricos. Este número poderá ser menor dependendo da dimensão e qualidade dos cabos utilizados para a interligação entre os dispositivos, bem como em que ambiente eles estarão a operar.
Avatar do usuário
chrdcv
Dword
 
Mensagens: 1580
Registrado em: 13 Out 2006 14:13

Mensagempor ffcprog » 20 Dez 2008 19:47

meu..
CASE NO SWITCH...
se for usar um int para teste.
IF entrada >..... and <......{

e divide em varias partes de forma de não ultrapassar o limite máximo por teste?!?!

ffcprog
ffcprog
Byte
 
Mensagens: 145
Registrado em: 14 Fev 2007 23:16

Mensagempor buiz » 23 Dez 2008 09:38

Olá pessoal!

No final o sistema ficou assim:

Um dispositivo central, com capacidade para armazenar a leituara de 5760 termopares, esta leitura é efetuada por 30 caixas, cada caixa tem a capacidade para coletar a temperatura de 192 sensores multiplexados por 12 Mux de 16 portas.

Estas mandam as informações via RS485 para a central, que recebe os dados, armazena, disponibiliza a leitura em display LCD 40 X 2, prepara um relatório para impressão em impressora matricial e salva todos estes dados em Pendrive. todos os dias!

Tem previsão de mandar graficos para o PC, mas esta parte ainda não conclui!

O resto ja esta pronto, e vai ser instalado para testes em um armazém graneleiro, neste primeiro teste estarei lendo 1300 sensores.

Estou nos finalmentes, esperando a Serigrafia me entregar o Policarbonato, assim que estiver na mão postarei fotos do equipo pronto!

Bom, um abraço a todos, e obrigado!
Avatar do usuário
buiz
Byte
 
Mensagens: 165
Registrado em: 20 Out 2006 14:59
Localização: Cachoeira do Sul - RS

Anterior

Voltar para PIC

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante

x