como Função vai pra outra Função

Software e Hardware para uC PIC

Moderadores: andre_luis, 51, guest2003, Renie

como Função vai pra outra Função

Mensagempor juarezbazzo » 17 Mai 2015 20:52

Olá caros amigos, faz tempo que não pergunto nada, algum tempo atrás estudei o asm pic e aprendi muitas coisas com as perguntas respondidas pelo pessoal do fórum, mas linguagem C está muito difícil de entender algumas coisas, adquiri alguns Livros, até mesmo do Fabio Pereira, abaixei diversas postila na net, mas não encontrei uma explicação detalhada sobre como uma "Função" vai pra outra "Função" ou sai sem o "Return", estudei pra ver se elas ao terminar a ultima linha ia pra próxima, ficou mais confuso ainda, if e else, if quando for verdadeiro executa o comandoA mas e depois? se próximo é ComandoB que é falso?, como passará a outra função, se conseguir entender isso, o resto me parece mais fácil de ir entendo.
100+ um abraço Juarez Bazzo
juarezbazzo
Bit
 
Mensagens: 25
Registrado em: 25 Nov 2006 21:58

Re: como Função vai pra outra Função

Mensagempor xultz » 18 Mai 2015 08:14

No C o que manda é o que está delimitado por um par { e }.
Por exemplo:
Código: Selecionar todos
unsigned char x;
x = 14;

if (x > 10)
{
    PORTB = 0xFF;
    U1TXREG = 'A';
}
else
{
    PORTB = 0;
    U1TXREG = 'B';
}


Eu tenho um if que verifica se x é maior que 10. Se for, vai executar tudo que está entre o primeiro par { e }, no caso, atribuindo FF ao registrador PORTB, e atribuindo o valor do caracter 'A' ao registrador U1TXREG. Se x fosse menor ou igual a 10, executaria os comandos entre o par { e } abaixo de else.
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

Re: como Função vai pra outra Função

Mensagempor ze » 18 Mai 2015 08:49

talvez isso englobe mais sua dúvida
Código: Selecionar todos
unsigned char decida_x(unsigned char x)
{
if (x > 10)
{
    return 'A'
}
else
{
    return 'B';
}
}
...
x=14;
if (decida_x(x))=='A')     {PORTB = 0xFF;U1TXREG = 'B';}
if (decida_x(x))=='B')     {PORTB = 0x00;U1TXREG = 'A';}

Ou seja, a função é tratada como um variável.
Se achou isso difícil, jacinto pena de você quando se deparar com ponteiros, vetores & cia...
Avatar do usuário
ze
Dword
 
Mensagens: 1655
Registrado em: 05 Jun 2007 14:32

Re: como Função vai pra outra Função

Mensagempor juarezbazzo » 18 Mai 2015 12:44

Caro Xultz e Ze , agradeço tua atenção em me mostrar esse exemplo, montei um circuito com Lcd pra teste.
Em asm programei para Lcd, Rtc, termômetro e até um voltímetro, muito esforço e com ajuda dos amigos desse fórum,
Não digo colegas porque sou amador.
Alias caro Ze, não fique com pena!
Pois nos anos 80 e começo dos anos 90 nós da velha guarda, trabalhávamos nas fabricas de Calçados e injeção de sola, aqueles painéis com contadora e um emaranhado de ligações e fios, temporizadores a base de BCs e outros, levávamos uns dois dias só pra entender a aquelas ligações, uns 100 funcionários parados esperando por nós, os patrões não tinha pena de Nós.
Por isso nós estamos querendo entrar na era MCU, hoje com a tecnologia, em frente a um Pc, se desenvolve um circuito com um único mcu que na época era do tamanho de uma parede, heheh,
Por incrível que pareça, vai ser menos difícil do que as perguntas que fiz 100+ Juarez Bazzo
juarezbazzo
Bit
 
Mensagens: 25
Registrado em: 25 Nov 2006 21:58

Re: como Função vai pra outra Função

Mensagempor RobL » 18 Mai 2015 20:54

Quando alguém grita em português, em francês, etc, o comando "chute a bola", a ação final será a mesma, chutar a bola.

Em assembly ou em C multiplicar por 5, ou "chutar a bola" o resultado será o mesmo.

Assembly pic 16F:
Suponha que você tenha escrito um bloco de instruções que multiplica por 5 um valor que está em W.

O bloco em assembly que multiplica por 5 é o que se chama função.
Função é um bloco de instruções que vai trabalhar um valor que se quer multiplicar.

Matemática informal misturada com digital: :roll:
Função é um bloco de instruções que fará uma transformação em um elemento do domínio e após transformado (trabalhado) vai ligá-lo a outro elemento do contra domínio ("o resultado).

Em assembly do PIC 16F ao final desse bloco tem um return.

Em C você vai escrever somente que quer multiplicar por 5.
O compilador vai gerar o bloco que fará essa multiplicação, tal como em assembly.
Ao final desse bloco vai ter um return.
O bloco em C, no seu editor de texto, estará entre chaves {}. Ao encontrar o final do bloco, retorna a quem chamou.

Salto condicional e salto incondicional (IF else em C).

Em assembly PIC 16F você usa as instruções Salte se o bit tal está alto e similares.

Em C vai usar if else. Ele vai gerar o equivalente ao assembly:
Se o bit tal estiver alto execute a linha a seguir. Se não estiver
salte para o endereço tal e execute...

Em C você escreve em um editor de texto algo mais legível que em assembly.
Basta dizer em linguagem c:
Z = b * k ;

Vai gerar um monte de instruções como em assembly para fazer esse produto.

Em C: pode dar nome aos bois

#define Z Quantidade_de_bois

Quantidade_de_bois = b * k ;

Além de não precisar saber como multiplicar em assembly fica-se com um código legível.
O compilador não necessita gerar assembly do código objeto (código de máquina). Pode-se configurar para que gere o assembly.

Espero que tenha visualizado como após chamar uma função e retornar possa passar(chamar "call") para outra função e os saltos condicionais, visto que o seu texto em C gerou blocos (código objeto) ou também em assembly, para sua leitura.
RobL
Dword
 
Mensagens: 1546
Registrado em: 20 Fev 2007 17:56


Voltar para PIC

Quem está online

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

x