Como transformar uma coisa em outra coisa

Software e Hardware para uC STM

Moderadores: andre_luis, 51

Como transformar uma coisa em outra coisa

Mensagempor Guri » 10 Nov 2020 19:54

Eu estou meio sem ideias, preciso de ajuda: :P

Eu tenho uma variável do tipo UNSIGNED INT (ou seja uma variável não sinalizada).
Como eu faço para transformar uma UNSIGNED INT em uma variável sinalizada do tipo SIGNED INT?

Afi.... :D
DEUS SEJA LOUVADO
GURI (VonNilmam)
Guri
Byte
 
Mensagens: 457
Registrado em: 25 Abr 2010 09:05
Localização: Minas Gerais

Re: Como transformar uma coisa em outra coisa

Mensagempor sync » 10 Nov 2020 20:19

sync
Byte
 
Mensagens: 195
Registrado em: 04 Mai 2020 16:11

Re: Como transformar uma coisa em outra coisa

Mensagempor cfreund » 10 Nov 2020 21:29

Código: Selecionar todos
    unsigned int u;
    int i;

    u = (unsigned int)0xFFFFFFFF;
    i = (int)u;
Cláudio F
Avatar do usuário
cfreund
Word
 
Mensagens: 672
Registrado em: 14 Out 2006 14:02
Localização: São Paulo

Re: Como transformar uma coisa em outra coisa

Mensagempor Rodrigo_P_A » 10 Nov 2020 21:37

Guri escreveu:Eu estou meio sem ideias, preciso de ajuda: :P

Eu tenho uma variável do tipo UNSIGNED INT (ou seja uma variável não sinalizada).
Como eu faço para transformar uma UNSIGNED INT em uma variável sinalizada do tipo SIGNED INT?

Afi.... :D



unsigned int variavel=1
signed int svar=(signed int) variavel;
---
Avatar do usuário
Rodrigo_P_A
Dword
 
Mensagens: 2236
Registrado em: 12 Out 2006 18:27
Localização: Osasco - S.P - Brasil

Re: Como transformar uma coisa em outra coisa

Mensagempor vtrx » 11 Nov 2020 07:50

Só uma observação.
se voce pode definir uma variável,por que ja não a define antes?
Avatar do usuário
vtrx
Dword
 
Mensagens: 2239
Registrado em: 20 Abr 2008 21:01

Re: Como transformar uma coisa em outra coisa

Mensagempor Guri » 12 Nov 2020 12:25

Agradeço a ajuda.

Respondendo, porque não definir signet antes! É porque eu gostaria de saber se é possivel fazer isso sem ter que alterar todo o sistema:P
DEUS SEJA LOUVADO
GURI (VonNilmam)
Guri
Byte
 
Mensagens: 457
Registrado em: 25 Abr 2010 09:05
Localização: Minas Gerais

Re: Como transformar uma coisa em outra coisa

Mensagempor KrafT » 17 Nov 2020 09:58

Ô Guri, me diz uma coisa... Tu faz projetos fantásticos de equipamentos profissionais de áudio e tem uma dúvida dessas?

Eu fiquei mais de ano sem acessar o fórum e vejo vc ainda solta uma dessas periodicamente... Tu faz isso para animar o fórum, não? :D

Brincadeira, tá? manda um abraço pro Vonillmann
"..."Come to the edge," he said. And so they came. And he pushed them. And they flew."― Guillaume Apollinaire
Avatar do usuário
KrafT
Dword
 
Mensagens: 2228
Registrado em: 11 Out 2006 14:15
Localização: Blumenau -SC

Re: Como transformar uma coisa em outra coisa

Mensagempor Guri » 19 Nov 2020 09:56

KrafT escreveu:Ô Guri, me diz uma coisa... Tu faz projetos fantásticos de equipamentos profissionais de áudio e tem uma dúvida dessas?

Eu fiquei mais de ano sem acessar o fórum e vejo vc ainda solta uma dessas periodicamente... Tu faz isso para animar o fórum, não? :D

Brincadeira, tá? manda um abraço pro Vonillmann


Oi, Kraft....Quem sou eu!
Na verdade sou um eterno aprendiz e gosto muito do forum, parabéns para quem o idealizou e para os participantes também. :D

Tem vezes que a cabeça dá um nó...Aí peço ajuda aos amigos do forum.
A pergunta parece ser mesmo muito "ingênua", pense o seguinte:

Eu tenho uma tabela enorme com amostras de aúdio, ela foi feita em formato "unsigned", onde o offset de ZERO do áudio é 0x80 (como exemplo 8bits), agora eu quero um offsset onde o ZERO do audio será 0x00 e para isso ocorrer teria que ser uma variável "signed". E como consequencia a tabela de ondas com o audio, teria que ser toda sinalizada.

Acabei resolvendo o dilema utilizando tudo unsigned como era o original e para fazer zerar essa variável eu utilizei outra variável unsigned que decresce o volume da tabela de ondas até zerar (controle de volume automático, se assim posso dizer), assim meu offset na saída de cada canal de audio será ZERO 0x00, mesmo que esteja utilizando unsigned com offset 0x80.

Agradeço a todas as dicas...Obrigado :)
DEUS SEJA LOUVADO
GURI (VonNilmam)
Guri
Byte
 
Mensagens: 457
Registrado em: 25 Abr 2010 09:05
Localização: Minas Gerais

Re: Como transformar uma coisa em outra coisa

Mensagempor vtrx » 19 Nov 2020 11:52

Se voce tem uma tabela,e ela é fixa,ja determinada,use um editor de texto e altere todos 0x80 por0x00.
Avatar do usuário
vtrx
Dword
 
Mensagens: 2239
Registrado em: 20 Abr 2008 21:01

Re: Como transformar uma coisa em outra coisa

Mensagempor cfreund » 20 Nov 2020 01:06

Guri escreveu:Eu tenho uma tabela enorme com amostras de aúdio, ela foi feita em formato "unsigned", onde o offset de ZERO do áudio é 0x80 (como exemplo 8bits), agora eu quero um offsset onde o ZERO do audio será 0x00 e para isso ocorrer teria que ser uma variável "signed". E como consequencia a tabela de ondas com o audio, teria que ser toda sinalizada.

Acabei resolvendo o dilema utilizando tudo unsigned como era o original e para fazer zerar essa variável eu utilizei outra variável unsigned que decresce o volume da tabela de ondas até zerar (controle de volume automático, se assim posso dizer), assim meu offset na saída de cada canal de audio será ZERO 0x00, mesmo que esteja utilizando unsigned com offset 0x80.

Agradeço a todas as dicas...Obrigado :)


Numa variável signed, a função do bit mais a esquerda (0b10000000) é dizer se o numero é negativo ou não. De repente, essa tabela pode trabalhar direto em signed. Mas se realmente foi feito um offset de 0x80, então será necessário espelhar a parte alta do byte:

Código: Selecionar todos
    valor_signed = valor_tabela & 0x7F;
    if (valor_tabela < 0x80)
        valor_signed -= 0x80;
Cláudio F
Avatar do usuário
cfreund
Word
 
Mensagens: 672
Registrado em: 14 Out 2006 14:02
Localização: São Paulo

Re: Como transformar uma coisa em outra coisa

Mensagempor KrafT » 20 Nov 2020 07:39

Guri escreveu:
Eu tenho uma tabela enorme com amostras de aúdio, ela foi feita em formato "unsigned", onde o offset de ZERO do áudio é 0x80 (como exemplo 8bits), agora eu quero um offsset onde o ZERO do audio será 0x00 e para isso ocorrer teria que ser uma variável "signed". E como consequencia a tabela de ondas com o audio, teria que ser toda sinalizada.


Bah, tchê...

Posso estar sendo leviano, mas uma "tabela com offset de Zero em 0x80" é uma tabela de 8 bits signed. Se só zero obedece esse formato e os demais valores não, então a tabela está mal construída ou corrompida, pois seus tipos de dados não são consistentes. Ou ainda, é uma nova codificação, tipo "codificação de KrafT" cuja única regra é não permitir um registro nulo, e por isso um bit "é queimado" só para atender à mesma.

Eu iria na sugestão do Vtrx, de corrigir a tabela. E não de alterar o software para lidar com tabelas mal construídas.
"..."Come to the edge," he said. And so they came. And he pushed them. And they flew."― Guillaume Apollinaire
Avatar do usuário
KrafT
Dword
 
Mensagens: 2228
Registrado em: 11 Out 2006 14:15
Localização: Blumenau -SC

Re: Como transformar uma coisa em outra coisa

Mensagempor Guri » 20 Nov 2020 11:04

KrafT escreveu:
Guri escreveu:
Eu tenho uma tabela enorme com amostras de aúdio, ela foi feita em formato "unsigned", onde o offset de ZERO do áudio é 0x80 (como exemplo 8bits), agora eu quero um offsset onde o ZERO do audio será 0x00 e para isso ocorrer teria que ser uma variável "signed". E como consequencia a tabela de ondas com o audio, teria que ser toda sinalizada.


Bah, tchê...

Posso estar sendo leviano, mas uma "tabela com offset de Zero em 0x80" é uma tabela de 8 bits signed. Se só zero obedece esse formato e os demais valores não, então a tabela está mal construída ou corrompida, pois seus tipos de dados não são consistentes. Ou ainda, é uma nova codificação, tipo "codificação de KrafT" cuja única regra é não permitir um registro nulo, e por isso um bit "é queimado" só para atender à mesma.

Eu iria na sugestão do Vtrx, de corrigir a tabela. E não de alterar o software para lidar com tabelas mal construídas.


Tranquilo Kraft :)
A tabela esta correta :D : O arquivo foi salvo em unsigned char 8 bits, por isso o offset (ZERO) é = 0x80, caso fosse salva em signed char o offset (ZERO) seria 0x00. A dica cfreund é interessante.
DEUS SEJA LOUVADO
GURI (VonNilmam)
Guri
Byte
 
Mensagens: 457
Registrado em: 25 Abr 2010 09:05
Localização: Minas Gerais

Re: Como transformar uma coisa em outra coisa

Mensagempor KrafT » 20 Nov 2020 11:36

Guri escreveu:
Tranquilo Kraft :)
A tabela esta correta :D : O arquivo foi salvo em unsigned char 8 bits, por isso o offset (ZERO) é = 0x80, caso fosse salva em signed char o offset (ZERO) seria 0x00. A dica cfreund é interessante.


Tua frase não faz sentido, mas tudo bem. Talvez me falte capacidade matemática para compreender o conceito. Para mim, zero é zero e isso é um tipo um axioma. Não pode ser mudado.
Representação do zero em 7 bits para reservar o oitavo para o sinal, ainda vai ser zero. Adicionar/subtrair um offset é outra coisa, zero mais ou menos outro número diferente dele mesmo, não é mais zero. Talvez você esteja se referindo ao zero como um adjetivo, como "zero de uma função" ou "derivada zero", "polos e zeros", aí a interpretação é diferente. Mas o numeral zero é único e imutável e é zero.

Edit: Nossa, desvirtuei totalmente tua pergunta, já respondida a muito tempo. Desculpe, mas é um desafio mental bacana, para reduzir a chance/gravidade do Alzheimer.
"..."Come to the edge," he said. And so they came. And he pushed them. And they flew."― Guillaume Apollinaire
Avatar do usuário
KrafT
Dword
 
Mensagens: 2228
Registrado em: 11 Out 2006 14:15
Localização: Blumenau -SC

Re: Como transformar uma coisa em outra coisa

Mensagempor vtrx » 20 Nov 2020 11:59

Acho que imagino como esta utilizando a tabela.
Voce esta gerando WAV diretamente,mas 0x80,eletricamente,representa uma tensão e não zero,isso deve ser manipulado na parte amplificadora de áudio,gerando um áudio com tensões negativas e positivas onde 0x80 não gera nenhuma tensão.
Avatar do usuário
vtrx
Dword
 
Mensagens: 2239
Registrado em: 20 Abr 2008 21:01

Re: Como transformar uma coisa em outra coisa

Mensagempor cfreund » 20 Nov 2020 13:35

Caros,

No caso, uma variável com offset difere de uma signed.

0x79 não é o mesmo que -1; 0x00 não é o mesmo que -127;

Não sabemos como está feita a lógica do software e nem o hardware. E isso faz toda a diferença, p.ex. trabalhando com DMA ou equivalente.
Cláudio F
Avatar do usuário
cfreund
Word
 
Mensagens: 672
Registrado em: 14 Out 2006 14:02
Localização: São Paulo

Próximo

Voltar para STMicroelectronics

Quem está online

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

x