Página 1 de 1

Problema Hi-tech para C18

MensagemEnviado: 24 Ago 2012 11:07
por ÁgioFelipe
Amigos, estou reescrevendo um código feito para o HiTech no C18 e estou encontrando alguns problemas, como esse aqui:
Está escrito no programa:

wi = -Sinewave[j];
wi >>= 1;

Então, pelo que podemos ver, wi redeberá um valor de uma tabela, esse valor fica negativo e na linha seguinte wi recebe o seu valor deslocado 1 bit para a direita, ou seja dividido por 2.
Simulando passo a passo no MPlab usando o C18, no final wi fica dividido por 2 só que positivo.
Obs: Estou simulando com valores de Sinewave positivos.

Alguém poderia dar uma ajuda?

MensagemEnviado: 24 Ago 2012 13:05
por xultz
A rotação só funciona direito com valores positivos e/ou unsigned. O sinal de negativo é reresentado por um bit 1 no mais significativo. Gira prá direita, e esse bit fica zerado, e positivo. Se quer dividir por 2, melhor usar uma divisão mesmo.

MensagemEnviado: 24 Ago 2012 13:21
por ÁgioFelipe
Sim, mas não sou eu que quero. O código que peguei é que está assim.
Queria alguma explicação sobre isso, pois o código funciona, só estou querendo passar para o C18.

wi = -Sinewave[j];
wi >>= 1;

MensagemEnviado: 27 Ago 2012 13:50
por ÁgioFelipe
Estudando mais um pouco percebi o seguinte:

No Hi-tech:

a = -8;
a >>= 1;
//Após isso a = -4

a = -7;
a >>= 1;
//Após isso a = -4 também.

No C18:

a = -8;
a >>= 1;
//Após isso a = 72

a = -7;
a >>= 1;
//Após isso a = 107

Agora o problema é o seguinte, tenho isso aqui no Hitech:

a>>=1;

Quero substituir por um código com a mesma função no C18 e com o mesmo tempo de procesamento.

Por favor ajudem.

MensagemEnviado: 27 Ago 2012 19:52
por ze
veja o conceito que o xuts tentou te explicar. Pelo que vi o c18 está considerando como signed char e o ht unsigned. veja os respectivos asm´s gerados (se tiver coragem) e faça o que for + otimizado em asm mesmo (iéca) . sabia que numero impar não é divisível por 2? bom pelo menos é o que minha filha de 7 anos me disse. Ela me disse também que algumas palavras mágicas são imperativas para uma boa fluidez num diálogo virtual cronologicamente defasado. Mas não entendi nada.

'dinada'.

abç

MensagemEnviado: 28 Ago 2012 13:35
por ÁgioFelipe
Já verifiquei as diferenças e consegui "traduzir" o código.

Obrigado ao lellis pela importantíssima contribuição, sem a ajuda dele eu jamais poderia ter concluído esse trabalho.