home | area personale         schemi | tutorial | robotica | pic micro | recensioni         forum | chat irc         faq | contatti         store | Ordina PCB
username
password
cerca

 
FORUM: Pic Micro
Tutto quanto riguarda questi microprocessori... progetti, suggerimenti, aiuti, discussioni...ecc


aiuto programma
     
Autore Messaggio opzioni
2N30055





postato il:
22.12.2019, alle ore 14:28
aiuto programma 

Buongiorno a tutti,

mi potete gentilmente spiegare come funzione questa funzione?

il programma visualizza su un display a 7 segmenti i numeri tra 0 e F a cadenza di un secondo.

non riseco a capire però come sia possibile. lavariabile numbers non è utilizzata da nessuna parte.

Premetto che mi sto avvicinando ora alla programmazione e sto cercando di capire il funziomaneto del programma.

Grazie a tutti
 int i;
    
    while (1)
    {
        for (i = 0; i <= 15; i++)
                
        {
            PORTB = Display(i);
            __delay_ms(1000);
            
        }
    }
    
    return;
}

unsigned char Display(unsigned char digit)
    {
        unsigned char numbers;
        
        unsigned char DIGIT[] = { 0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F, 0x77, 0x7C,0x39,0x5E,0x79,0x71};
       
        numbers = DIGIT[digit];
        
       return numbers;
        
    } 
caccamo2





postato il:
22.12.2019, alle ore 15:09
https://en.wikipedia.org/wiki/Return_statement


...
double_wrap




una ogni 100 livelli
una ogni 10 livelli una ogni 10 livelli una ogni 10 livelli una ogni 10 livelli una ogni 10 livelli una ogni 10 livelli una ogni 10 livelli


postato il:
22.12.2019, alle ore 16:49
Detto in modo molto molto rozzo il nome della funzione <Display> e' come se fosse il nome di una variabile. Il valore viene assegnato al nome con l'istruzione <return>, Ne consegue che <Display> contiene il valore contenuto in <numbers> .

Nel pezzo superiore del codice c'e' l'istruzione PORTB = Display(i); ne consegue che PORTB assume il valore di <Display> e quindi quello di <numbers>


In generale chiamando una funzione si puo' <passare in avanti> uno o piu' valori ma si puo' anche <passare all'indietro> un valore (stavolta uno solo) associndolo al nome della funzione stessa

Per inciso il <tipo> di quel che viene ritornato deve essere dichiarato col nome della funzione, nel codice di prima si ha

unsigned char Display(unsigned char digit)

quindi in questo caso la funzione <riceve> un unsigned char e <risponde> con un unsigned char, ma ci sono tutte le combinazioni possibili dei tipi di variabili. Se non c'e' un <return> la funzione e' di tipo <void>

ps. i puristi si stracceranno le vesti, ma portino pazienza....



"se peso cado, ma se cado non peso"
adamatj.altervista.org
2N30055





postato il:
23.12.2019, alle ore 15:39
Grazie mille double_wrap, ho capito il funzionameto.
palombo




una ogni 10 livelli


postato il:
24.12.2019, alle ore 10:17
per essere precisi la var numbers è dichiarata eccome! E' dichiarata nella funzione quindi è una variabile locale e viene vista solo dentro la funzione. Ciò si fa per vari motivi uno è che all'uscita della funzione viene liberata la ram occupata dalla var quindi si liberano risorse nel micro un altro è che non può essere influenzata da un eventuale errore (bug) che c'è nel programma. Se per es fosse una var dichiarata nel main ovvero globale e poi la usiamo sia nel programma che nella funzione un eventuale modifica della var nel programma o nella funzione potrebbe creare confusione se non stiamo attenti all'uso che se ne fa!
Nei compilatori di solito la funzione return usa un registro e non una var in ram per tornare il valore rendendo più compatto e veloce il codice. A volte (dipende dal compilatore) usano una parte della ram gestita in modo automatico ovvero lo stack una parte si ram di solito allocata alla fine della memoria per operazioni di scambio e memorizzazione temporanea di valori



"senza parole"...sennò ci tassano pure quelle!
segui questo thread con grixFC, per questa funzione devi aver installato il software grixFC

torna su
     

Come utente anonimo puoi leggere il contenuto di questo forum ma per aprire una discussione
o per partecipare ad una discussione esistente devi essere registrato ed accedere al sito




 







 
 
indietro | homepage | torna su copyright © 2004/2024 GRIX.IT - La community dell'elettronica Amatoriale