- Messaggi: 6
- Ringraziamenti ricevuti 0
Puntatore di array
- Roberto_c
- Autore della discussione
- Nuovo Utente
-
Less
Di più
13 Anni 5 Giorni fa #1
da Roberto_c
Puntatore di array è stato creato da Roberto_c
Buongiorno a tutti, ho un problema di programmazione sull'uso dei puntatori che mi sta assilando,non sono molto pratico, così provo a chiedere a voi.
La funzione è questa;
int Media(int Val_A, long *Somma_Medie, unsigned char *Counter, int *Media_Buff[])
{
*Somma_Medie += Val_A - *Media_Buff[*Counter];
*Media_Buff[*Counter] = Val_A;
++*Counter;
if (*Counter > N_Medie - 1)
*Counter = 0;
return (*Somma_Medie / N_Medie);
}
E la richiamo così:
AnalOUT[0] = Media(Analog[0], &Somma_Medie1, &Counter1, &Media_Buff1[0]);
AnalOUT[1] = Media(Analog[1], &Somma_Medie2, &Counter2, &Media_Buff2[0]);
AnalOUT[2] = Media(Analog[2], &Somma_Medie3, &Counter3, &Media_Buff3[0]);
La funzione si occupa di calcolare la media mobile degli ingressi analogici, il problema è che nell'array " Media_Buffer1", o 2 o 3 non vengono caricati i valori delle letture, sicuramente sbaglio qualcosa con i puntatori o gli indici.
Aiuto, please.
Ciao.
La funzione è questa;
int Media(int Val_A, long *Somma_Medie, unsigned char *Counter, int *Media_Buff[])
{
*Somma_Medie += Val_A - *Media_Buff[*Counter];
*Media_Buff[*Counter] = Val_A;
++*Counter;
if (*Counter > N_Medie - 1)
*Counter = 0;
return (*Somma_Medie / N_Medie);
}
E la richiamo così:
AnalOUT[0] = Media(Analog[0], &Somma_Medie1, &Counter1, &Media_Buff1[0]);
AnalOUT[1] = Media(Analog[1], &Somma_Medie2, &Counter2, &Media_Buff2[0]);
AnalOUT[2] = Media(Analog[2], &Somma_Medie3, &Counter3, &Media_Buff3[0]);
La funzione si occupa di calcolare la media mobile degli ingressi analogici, il problema è che nell'array " Media_Buffer1", o 2 o 3 non vengono caricati i valori delle letture, sicuramente sbaglio qualcosa con i puntatori o gli indici.
Aiuto, please.
Ciao.
Si prega Accesso o Crea un account a partecipare alla conversazione.
13 Anni 5 Giorni fa #2
da Mauro Laurenti
Risposta da Mauro Laurenti al topic Re: Puntatore di array
Ciao Roberto,
da una prima lettura ti posso dire:
AnalOUT[0] = Media(Analog[0], &Somma_Medie1, &Counter1, &Media_Buff1[0]);
se vuoi passare l'indirizzo dell'array Media_Buff1 puoi anche scrivere:
AnalOUT[0] = Media(Analog[0], &Somma_Medie1, &Counter1, Media_Buff1);
per il valore di ritorno hai un int ma ritorni il risultato di una divisione:
return (*Somma_Medie / N_Medie);
anche se tra interi fai il casting manualmente.
Nella funzione incrementi Counter ma non hai il ciclo interno.
Perché incrementarla nella funzione?
Perché passare il puntatore all'array se poi fai uso di un solo valore?
Perché non passare subito il valore?
Saluti,
Mauro
da una prima lettura ti posso dire:
AnalOUT[0] = Media(Analog[0], &Somma_Medie1, &Counter1, &Media_Buff1[0]);
se vuoi passare l'indirizzo dell'array Media_Buff1 puoi anche scrivere:
AnalOUT[0] = Media(Analog[0], &Somma_Medie1, &Counter1, Media_Buff1);
per il valore di ritorno hai un int ma ritorni il risultato di una divisione:
return (*Somma_Medie / N_Medie);
anche se tra interi fai il casting manualmente.
Nella funzione incrementi Counter ma non hai il ciclo interno.
Perché incrementarla nella funzione?
Perché passare il puntatore all'array se poi fai uso di un solo valore?
Perché non passare subito il valore?
Saluti,
Mauro
Si prega Accesso o Crea un account a partecipare alla conversazione.
- Roberto_c
- Autore della discussione
- Nuovo Utente
-
Less
Di più
- Messaggi: 6
- Ringraziamenti ricevuti 0
13 Anni 4 Giorni fa #3
da Roberto_c
Risposta da Roberto_c al topic Re: Puntatore di array
Ciao Mauro, direi che mi trovi d'accordo con le tue osservazioni, in effetti il contatore lo posso incrementare fuori dalla funzione, però a livello didattico, vorrei capire perchè questa ringa di codice non funziona
*Media_Buff[*Counter] = Val_A;
cioè non riesco a memorizzare i valori nell'array.
dove sbaglio???
*Media_Buff[*Counter] = Val_A;
cioè non riesco a memorizzare i valori nell'array.
dove sbaglio???
Si prega Accesso o Crea un account a partecipare alla conversazione.
13 Anni 4 Giorni fa #4
da Mauro Laurenti
Risposta da Mauro Laurenti al topic Re: Puntatore di array
Ciao,
sostituisci:
con
cambia:
con
per leggibilità cambia:
con
si capisce meglio che stai incrementando un puntatore.
ti sconsiglio di controllare entrambi gli esempi, quello tuo e i cambiamenti che ho suggerito, simulando il programma e vedere effettivamente quale puntatore non accetta. il valore corretto.
Assumo che le variabili passate alla funzione siano di tipo corretto e non avvenga alcun casting.
Saluti,
Mauro
sostituisci:
Code:
int Media(int Val_A, long *Somma_Medie, unsigned char *Counter, int *Media_Buff[])
con
Code:
int Media(int Val_A, long *Somma_Medie, unsigned char *Counter, int *Media_Buff)
cambia:
Code:
*Media_Buff[*Counter] = Val_A;
con
Code:
*Media_Buff += *Counter;
*Media_Buff = Val_A;
per leggibilità cambia:
Code:
++*Counter;
Code:
*Counter++;
si capisce meglio che stai incrementando un puntatore.
ti sconsiglio di controllare entrambi gli esempi, quello tuo e i cambiamenti che ho suggerito, simulando il programma e vedere effettivamente quale puntatore non accetta. il valore corretto.
Assumo che le variabili passate alla funzione siano di tipo corretto e non avvenga alcun casting.
Saluti,
Mauro
Si prega Accesso o Crea un account a partecipare alla conversazione.
Moderatori: Mauro Laurenti, StefA
Registrati al sito
Accedi a tutte le risorse e articoli non visibili pubblicamente, puoi registrarti con pochi passi.
Forum - Ultimi messaggi
-
- Strana anomalia LT lib module_EEPROM
- da marcoilgrande
-
- Nuova versione Kicad 9
- da Mauro Laurenti
-
- MODULO GSM SIM900A
- da embedded
-
- Freedom III e compilazioni fallite
- da Black
-
- LTerminal - nuove funzioni
- da Mauro Laurenti