Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

[C] Variabili globali o variabili puntatore?

Linguaggi e sistemi

Moderatori: Foto UtentePaolino, Foto Utentefairyvilje

0
voti

[31] Re: [C] Variabili globali o variabili puntatore?

Messaggioda Foto UtenteEcoTan » 31 mag 2015, 12:22

fairyvilje ha scritto:SI muovono e ciò ti basta?

No, non mi basta.
Vabbè, provo a spiegarmi. E' chiaro che non intendo contestare l'esistenza delle variabili locali, anzi gli esempi di programmazione che si trovano nel datasheet del microcontrollore ne fanno uso.
Non intendo contestare neanche (ci mancherebbe!!) gli sviluppi della tecnica, semmai penso che sia venuta a mancare la collaborazione in un ambito più alto.
Quando scrivevo i primi programmi in C mettevo le dichiarazioni delle variabili un po' nel main un po' nelle InterruptServicingRoutine senza badarci ed avevo risultati folli. Mi sono chiarite le idee con l'aiuto di una persona competente e disponibile e credo di capire cosa succedesse ma adesso non voglio aprire altri distinguo.
E' bastato spostare le dichiarazioni delle variabili verso l'inizio, cioè in area global, e tutto ha funzionato. Posso usare le variabili, così dichiarate, sia nel main che nelle ISR e nelle funzioni, e sfruttare le dette variabili anche per passare i valori da una routine al main e viceversa o anche fra le routine. L'unica ovvia avvertenza è che ogni variabile (che può avere anche indici come vettore o matrice) ha un nome e un significato, se ho bisogno di un'altra variabile devo dichiararne appunto un'altra con un altro nome. Ma ho l'impressione di stare scrivendo cose ovvie, cos'altro c'è da dire sulla logica della realtà?
Avatar utente
Foto UtenteEcoTan
7.720 4 12 13
Expert EY
Expert EY
 
Messaggi: 5426
Iscritto il: 29 gen 2014, 8:54

2
voti

[32] Re: [C] Variabili globali o variabili puntatore?

Messaggioda Foto Utenteboiler » 31 mag 2015, 12:23

fairyvilje ha scritto:
aldofad ha scritto:Questa discussione assurda sembra risalire al 1980 quando la programmazione non era object oriented ed esisteva solo codice monolitico.


La programmazione di oggi in realtà non è solo object oriented


Finalmente qualcuno l'ha detto. Soprattutto non lo è a livello di microcontrollori piccoli e soprattutto non lo è con C. Certo si può fare una pseudo-OOP con C, così come posso usare un martello per spaccarmi le falangi. Se abbia senso, è un altro discorso...

Boiler
Avatar utente
Foto Utenteboiler
26,4k 5 9 13
G.Master EY
G.Master EY
 
Messaggi: 5613
Iscritto il: 9 nov 2011, 12:27

0
voti

[33] Re: [C] Variabili globali o variabili puntatore?

Messaggioda Foto Utentealdofad » 31 mag 2015, 12:27

EcoTan ha scritto:Ma ho l'impressione di stare scrivendo cose ovvie, cos'altro c'è da dire sulla logica della realtà?

La sua dimensione, esigua nei casi che descrivi e gestibile ancora in stile monolitico. Oltre puoi andare solo con gli oggetti
Avatar utente
Foto Utentealdofad
853 4 5
Sostenitore
Sostenitore
 
Messaggi: 689
Iscritto il: 21 gen 2014, 1:07
Località: Treviso

1
voti

[34] Re: [C] Variabili globali o variabili puntatore?

Messaggioda Foto Utentefairyvilje » 31 mag 2015, 12:30

EcoTan ha scritto:
fairyvilje ha scritto:SI muovono e ciò ti basta?

No, non mi basta.


Quindi scriveresti questo codice
Codice: Seleziona tutto
int add(int a, int b);

int add(int a, int b){
    return a+b;
}

int main(){
    return add(5,6);
}


così?
Codice: Seleziona tutto
int add_a, add_b, add_ret;

void add();

void add(){
    add_ret= add_a + add_b;
}

int main(){
    add_a=5;
    add_b=6;
    add();
    return add_ret;
}


?% ?%
"640K ought to be enough for anybody" Bill Gates (?) 1981
Qualcosa non ha funzionato...

Lo sapete che l'arroganza in informatica si misura in nanodijkstra? :D
Avatar utente
Foto Utentefairyvilje
15,0k 4 9 12
G.Master EY
G.Master EY
 
Messaggi: 3047
Iscritto il: 24 gen 2012, 19:23

0
voti

[35] Re: [C] Variabili globali o variabili puntatore?

Messaggioda Foto UtenteEcoTan » 31 mag 2015, 12:37

aldofad ha scritto:
EcoTan ha scritto:Ma ho l'impressione di stare scrivendo cose ovvie, cos'altro c'è da dire sulla logica della realtà?

La sua dimensione, esigua nei casi che descrivi e gestibile ancora in stile monolitico. Oltre puoi andare solo con gli oggetti

Sì, posso essere d'accordo. Non ho risposto subito perché anche Teletu fa le bizze.
Avatar utente
Foto UtenteEcoTan
7.720 4 12 13
Expert EY
Expert EY
 
Messaggi: 5426
Iscritto il: 29 gen 2014, 8:54

0
voti

[36] Re: [C] Variabili globali o variabili puntatore?

Messaggioda Foto Utentefairyvilje » 31 mag 2015, 12:45

Comunque Foto UtenteEcoTan hai mai provato a considerare le variabili statiche locali? Risolverebbero molti dei problemi con le routines degli interrupts in modo molto più elegante se sicuro.
"640K ought to be enough for anybody" Bill Gates (?) 1981
Qualcosa non ha funzionato...

Lo sapete che l'arroganza in informatica si misura in nanodijkstra? :D
Avatar utente
Foto Utentefairyvilje
15,0k 4 9 12
G.Master EY
G.Master EY
 
Messaggi: 3047
Iscritto il: 24 gen 2012, 19:23

0
voti

[37] Re: [C] Variabili globali o variabili puntatore?

Messaggioda Foto UtenteEcoTan » 31 mag 2015, 12:52

Anche su questo posso essere d'accordo benchè mi sono trovato bene con la global.
Per rispondere all'altro quesito dovrei capire la sintassi delle funzioni, anche se qualche volta le ho usate minimalmente per necessità e per tentativi.. ripeto che c'è chi suona Mozart o meglio Rachmaninoff e chi batte tasti a orecchio, magari anche conoscendo qualcosa di musica in generale e magari anche centrando qualche risultato.
Avatar utente
Foto UtenteEcoTan
7.720 4 12 13
Expert EY
Expert EY
 
Messaggi: 5426
Iscritto il: 29 gen 2014, 8:54

0
voti

[38] Re: [C] Variabili globali o variabili puntatore?

Messaggioda Foto Utentealdofad » 31 mag 2015, 12:54

Il codice di un interrupt, ossia della procedura ad esso annessa che viene chiamata interrompendo il thread (spesso unico) principale, deve essere breve e rapido il più possibile, possibilmente manipolare solo una (o poco più) variabili globali che verranno a loro volta computate dal thread principale. Ecco perché quelle variabili globali si devono dichiarare di tipo "volatile", ossia si informa il compilatore di non ottimizzarne la lettura tramite cache ma di leggerne ogni volta il valore poiché potrebbe essere stato cambiato da altri threads, in questo caso dalla procedura di interrupt. Naturalmente questa architettura esula completamente dal dire che "è meglio ed è più veloce" adoperare variabili globali
Avatar utente
Foto Utentealdofad
853 4 5
Sostenitore
Sostenitore
 
Messaggi: 689
Iscritto il: 21 gen 2014, 1:07
Località: Treviso

0
voti

[39] Re: [C] Variabili globali o variabili puntatore?

Messaggioda Foto UtenteEcoTan » 31 mag 2015, 13:03

aldofad ha scritto:quelle variabili globali si devono dichiarare di tipo "volatile"

Questo qualificatore non lo metto più e mi pare che tutto funzioni egualmente, comunque tengo in evidenza la tua precisazione.
Avatar utente
Foto UtenteEcoTan
7.720 4 12 13
Expert EY
Expert EY
 
Messaggi: 5426
Iscritto il: 29 gen 2014, 8:54

1
voti

[40] Re: [C] Variabili globali o variabili puntatore?

Messaggioda Foto Utentealdofad » 31 mag 2015, 13:16

In qualità di programmatore il tuo compito è di metterla, non ci è dato sapere con quale logica il compilatore ottimizza la cache delle variabili. Posso solamente supporre che per una variabile ad accesso monoatomico, ossia pari ai bit del micro, non abbia certamente senso porla in cache.
Avatar utente
Foto Utentealdofad
853 4 5
Sostenitore
Sostenitore
 
Messaggi: 689
Iscritto il: 21 gen 2014, 1:07
Località: Treviso

PrecedenteProssimo

Torna a PC e informatica

Chi c’è in linea

Visitano il forum: Nessuno e 29 ospiti