Raciocionio sobre nibles.

Software e Hardware para uC PIC

Moderadores: andre_luis, 51, guest2003, Renie

Re: Raciocionio sobre nibles.

Mensagempor Vonnilmam » 28 Nov 2016 10:28

Corretissimo, ilustre tcpipchip

Peço desculpas pelo erro.

Como eu disse tô aprendendo esse treco de C...mas chego lá.

Obrigado
VonNilmam "Assembler" e agora "C"
Avatar do usuário
Vonnilmam
Byte
 
Mensagens: 446
Registrado em: 19 Out 2006 14:25
Localização: espacial

Re: Raciocionio sobre nibles.

Mensagempor Vonnilmam » 28 Nov 2016 10:46

Acabei de baixar o livro sugerido,

Muito bom mesmo, pela folheada que dei, notei que é muito bem explicado e inteligivel, gostoso de ler.

Muito obrigado mesmo pela ótima dica.
VonNilmam "Assembler" e agora "C"
Avatar do usuário
Vonnilmam
Byte
 
Mensagens: 446
Registrado em: 19 Out 2006 14:25
Localização: espacial

Re: Raciocionio sobre nibles.

Mensagempor Maffeis » 28 Nov 2016 15:02

Treinamento em linguagem C tb é muito bom
www.saraiva.com.br/treinamento-em-linguagem-c-2590525.html
Maffeis
Word
 
Mensagens: 501
Registrado em: 07 Ago 2010 19:10

Re: Raciocionio sobre nibles.

Mensagempor Vonnilmam » 28 Nov 2016 17:28

Muito agradecido pelas dicas.

Ultimamente eu estou comendo e bebendo "C"...

Uma pergunta,

É obrigatório declarar, variaveis de forma local, ou tem algum problema em fazer isso de forma global e porque?

O motivo da pergunta é que tenho lido isso constantemente, mas não ficou claro para mim o do porque.
VonNilmam "Assembler" e agora "C"
Avatar do usuário
Vonnilmam
Byte
 
Mensagens: 446
Registrado em: 19 Out 2006 14:25
Localização: espacial

Re: Raciocionio sobre nibles.

Mensagempor tcpipchip » 28 Nov 2016 18:35

------------------------------------------
http://www.youtube.com/tcpipchip
Avatar do usuário
tcpipchip
Dword
 
Mensagens: 6560
Registrado em: 11 Out 2006 22:32
Localização: TCPIPCHIPizinho!

Re: Raciocionio sobre nibles.

Mensagempor andre_luis » 28 Nov 2016 18:48

Declarando de forma gobal, essas variaveis não esrão liberadas após utilizadas.
De forma local, o espaço de memoria que elas ocupam pode ser reciclado, além de organizar melhor o programa.
"Por maior que seja o buraco em que você se encontra, relaxe, porque ainda não há terra em cima."
Avatar do usuário
andre_luis
Dword
 
Mensagens: 5447
Registrado em: 11 Out 2006 18:27
Localização: Brasil - RJ

Re: Raciocionio sobre nibles.

Mensagempor Vonnilmam » 28 Nov 2016 19:20

Hum, muito bom

Entendi, adré e tcpipchip.

Então, de forma global apenas aquelas que eu usaria em qualquer parte da rotina, e para aquelas que eu usaria apenas numa determinada rotina local, agruparia as locais nessa rotinas locais...

Boa, saber.

Obrigado.
VonNilmam "Assembler" e agora "C"
Avatar do usuário
Vonnilmam
Byte
 
Mensagens: 446
Registrado em: 19 Out 2006 14:25
Localização: espacial

Re: Raciocionio sobre nibles.

Mensagempor Maffeis » 28 Nov 2016 19:27

Global eu uso em ultimo caso e declarada como volatile.
Maffeis
Word
 
Mensagens: 501
Registrado em: 07 Ago 2010 19:10

Re: Raciocionio sobre nibles.

Mensagempor andre_luis » 29 Nov 2016 07:14

Vonnilmam escreveu:Então, de forma global apenas aquelas que eu usaria em qualquer parte da rotina, e para aquelas que eu usaria apenas numa determinada rotina local, agruparia as locais nessa rotinas locais...


Apenas estendendo um pouco mais o raciocínio, mesmo aquelas que são declaradas como "global", se não for o caso classico dos flags acionados numa parte do programa e lido em outra parte do programa, mas se ao invez disso for variaveis mutuamente alterada em várias partes do programa, voce deve estudar a utilização de mecanismos como "semáforos" por exemplo, afim de estabelecer uma politica de acesso, tal como prioridades e bloqueio enquanto estiver em uso por outra função. Enfim, sei que é tentador, mas tem muita teoria pra ler antes de sair programando...
"Por maior que seja o buraco em que você se encontra, relaxe, porque ainda não há terra em cima."
Avatar do usuário
andre_luis
Dword
 
Mensagens: 5447
Registrado em: 11 Out 2006 18:27
Localização: Brasil - RJ

Re: Raciocionio sobre nibles.

Mensagempor Vonnilmam » 29 Nov 2016 10:34

AProveitando a deixa do andre, o que a função se é que é função, volatile faz...qual a diferença de declarar a variável global e utilizar essa função.
Se for possivel, dar um exemplo dessa declaração.

Peço perdão pela ignorancia da minha parte, mas o meu propósito é aprender C, da forma correta ou pelo menos tentar seguindo os caminhos corretos.

Comecei ontem a ler cuidadosamente o livro indicado, achei bem didático...

Obrigado
VonNilmam "Assembler" e agora "C"
Avatar do usuário
Vonnilmam
Byte
 
Mensagens: 446
Registrado em: 19 Out 2006 14:25
Localização: espacial

Re: Raciocionio sobre nibles.

Mensagempor Maffeis » 29 Nov 2016 11:01

Uma variável que é lida e escrita em vários pontos do código pode ser um problema.

Por exemplo numa interrupção.

Durante a execução do código a variavel tem um valor x

Ocorre a interrupção ela é atualizada para Y

Quando o programa volta para o código essa variável pode voltar como x e vc perder a informação que foi atualizada pela interrupção.

O volatile evita esse problema parcialmente.

pq toda vez que a variável é utilizada ela é lida novamente da RAM, o compilador não executa nenhuma otimização com relação a essa variável.

porém ainda pode ocorrer interrupção durante a gravação de um novo valor

O semáforo seria a melhor opção (Ou não utilizar variáveis globais)
Maffeis
Word
 
Mensagens: 501
Registrado em: 07 Ago 2010 19:10

Re: Raciocionio sobre nibles.

Mensagempor Vonnilmam » 29 Nov 2016 15:09

Meu Deus,


Tô vendo que tenho Muuuuito que entender ainda.

Então uma declaração GLOBAL, pode ser perdido o seu valor?....inclusive se houver interrupções na rotina o que é comum em uma rotina longa. Meu Deus.

Se fosse em assembler na "isr" seria salvo os dados importantes necessários e depois repostos, tipo um push & pop da vida. Mas em "C" não tem essa opção? Por esse motivo é indicada a não utilização de declarações globais? Será que entendi certinho Maffeis.

Quero fazer uma pergunta de aprendiz, não me levem a mal, por favor: Suponhamos que eu tenha uma variável que tem de ser global, porque vai ser utilizada em varios pontos da rotina main, como eu faço, qual a solução.

Pergunto, porque com as dicas de vocês todos do forum, consegui terminar uma rotina que controla um GLCD 128x64, e esse será parte de um conjunto mais complexo, servindo apenas de escravo, ou seja, fiz um controlador especifico para o glcd que recebe informações de um outro controlador (detalhe: programado todo em assembler, com interrupções, e mais de 10 tasks, full time, rsss :lol: )....

Estou apavorado, então o glcd controlado pelo pic em questão, feito em mikroc, pode dar pal inesperadamente, ou ficar instavel...Meu Deus.

Obrigadão.
VonNilmam "Assembler" e agora "C"
Avatar do usuário
Vonnilmam
Byte
 
Mensagens: 446
Registrado em: 19 Out 2006 14:25
Localização: espacial

Re: Raciocionio sobre nibles.

Mensagempor Rodrigo_P_A » 29 Nov 2016 15:33

Minha opinião é que o pessoal começou a complicar demais.

Sugiro que você pense nas variáveis globais apenas como uma variável que você acessa de qualquer rotina/ou função, além do próprio loopin principal ( main ) , interrupções etc...

Não se preocupe com o resto neste momento, faz o básico e vai entendendo. Se você começar a ver semáforos, e outras coisas, você vai se enroscar todo, e nesse momento, na minha opinião, é desnecessário.
---
Avatar do usuário
Rodrigo_P_A
Dword
 
Mensagens: 2237
Registrado em: 12 Out 2006 18:27
Localização: Osasco - S.P - Brasil

Re: Raciocionio sobre nibles.

Mensagempor Vonnilmam » 29 Nov 2016 19:16

É que como eu vim da era ASM, estou ainda me acostumando com o jeitão de pensar como C...

Mas ainda tenho na mente o jeitão de pensar como ASM, entenderam.

Por isso existem algumas coisas que fico meio que boiando e como decidi imprimir todo o esforço mental a entender C, fico meio maluco de vez em quando.

Obrigado pelas dicas, Rodrigo.
VonNilmam "Assembler" e agora "C"
Avatar do usuário
Vonnilmam
Byte
 
Mensagens: 446
Registrado em: 19 Out 2006 14:25
Localização: espacial

Re: Raciocionio sobre nibles.

Mensagempor fabim » 30 Nov 2016 11:56

Char *Ponteiro;
int Variavel16bit;
char VarLO, VarHI;

Ponteiro = (char *)&Variavel16bit;
VarLO = *Ponteiro;
Ponteiro++;
VarHI = *Ponteiro;

ou

VarLo = ((char *)&Variavel16bit)[0]
VarHI = ((char *)&Variavel16bit)[1]

Observe que as duas formas são ANSI C, e fazem exatamente a mesma coisa, só que na primeira eu fiz acesso indireto, e na segunda forma eu fiz acesso direto.

Olhando para um raciocínio humano.

0x Byte3 Byte2 Byte1 Byte0 , veja que os bytes são LSB para direita e MSB para esquerda.

Porém na memória RAM, eles são organizados sequencialmente em ordem crescente.
EX:
0X0000F000 //posição inicial da variável de 16 bits que o montador utilizou para a variável de 16 bits.

0X0000F000 0x34 LSB de 0x1234
0X0000F001 0x12 MSB de 0x1234

Observe que no seu exemplo 0x1234, 0x34 é LSB então ele esta no inicio do ponteiro de indexação desta variável !

Você não esta sozinho, muitas pessoas confundem o raciocínio humano com a organização computacional little endiam, big endian é pior ainda..

Parem de ficar mexendo nos meus nibles, isto pega mal, vai que eu goste!!
Mano, ve só.
Sou responsável pelo que escrevo!!! E não pelo que você entende !!!
fabim
Dword
 
Mensagens: 5001
Registrado em: 16 Out 2006 10:18
Localização: aqui uái!!!?

AnteriorPróximo

Voltar para PIC

Quem está online

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

cron

x