Problema Hi-tech para C18

Software e Hardware para uC PIC

Moderadores: andre_luis, 51, guest2003, Renie

Problema Hi-tech para C18

Mensagempor ÁgioFelipe » 24 Ago 2012 11:07

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?
ÁgioFelipe
Word
 
Mensagens: 626
Registrado em: 27 Out 2006 20:04

Mensagempor xultz » 24 Ago 2012 13:05

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.
98% das vezes estou certo, e não estou nem aí pros outros 3%.
Avatar do usuário
xultz
Dword
 
Mensagens: 3001
Registrado em: 13 Out 2006 18:41
Localização: Curitiba

Mensagempor ÁgioFelipe » 24 Ago 2012 13:21

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;
ÁgioFelipe
Word
 
Mensagens: 626
Registrado em: 27 Out 2006 20:04

Mensagempor ÁgioFelipe » 27 Ago 2012 13:50

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.
ÁgioFelipe
Word
 
Mensagens: 626
Registrado em: 27 Out 2006 20:04

Mensagempor ze » 27 Ago 2012 19:52

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ç
Avatar do usuário
ze
Dword
 
Mensagens: 1655
Registrado em: 05 Jun 2007 14:32

Mensagempor ÁgioFelipe » 28 Ago 2012 13:35

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.
ÁgioFelipe
Word
 
Mensagens: 626
Registrado em: 27 Out 2006 20:04


Voltar para PIC

Quem está online

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

cron

x