Página 1 de 1

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

MensagemEnviado: 17 Mai 2015 20:52
por juarezbazzo
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

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

MensagemEnviado: 18 Mai 2015 08:14
por xultz
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.

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

MensagemEnviado: 18 Mai 2015 08:49
por ze
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...

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

MensagemEnviado: 18 Mai 2015 12:44
por juarezbazzo
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

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

MensagemEnviado: 18 Mai 2015 20:54
por RobL
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.