Torna indietro   BaroneRosso.it - Forum Modellismo > Elettronica > Circuiti Elettronici


Rispondi
 
Strumenti discussione Visualizzazione
Vecchio 07 marzo 10, 13:28   #11 (permalink)  Top
User
 
L'avatar di frank
 
Data registr.: 29-11-2002
Residenza: Mountain View, CA
Messaggi: 4.390
Fai un ciclo, e in ciascun passo confronti la variabile con una maschera a bit, che sposti di volta in volta con l'operatore di spostamento bitwise a sinistra. Quando trovi che l'AND bitwise è 1, hai trovato quale bit è acceso, quindi quale paglione.
__________________
The number you dialed is imaginary. Please rotate your phone 90 degrees and redial.
frank non è collegato   Rispondi citando
Vecchio 07 marzo 10, 14:42   #12 (permalink)  Top
User
 
L'avatar di lol21
 
Data registr.: 16-11-2008
Residenza: Riva del Garda - TN
Messaggi: 429
ma degli array come quell'esempio che ho fatto prima non potrebbe andare bene?
conta che questo è uni dei miei primi programmi ed è per questo che uso anche le librerie esterne, non mi pareva così complicato, programmi di gestione lcd led e pulsanti ne avevo già fatti, questo sarebbe più un'unione di più programmi già fatti.

dunque non sarebbe più facile fare una cosa del genere sapendo poi che dovrei probabilmente fare altre modifiche in futuro e se aggiungessi pulsanti mi basterebbe aggiungere un valore all'array?

ciao e grazie
lol21
lol21 non è collegato   Rispondi citando
Vecchio 07 marzo 10, 15:03   #13 (permalink)  Top
User
 
L'avatar di roberto88m
 
Data registr.: 14-01-2009
Residenza: trapani
Messaggi: 137
per illez:::
ma che fine hai fatto? ti ho mandato pm e nn rispondi....
roberto88m non è collegato   Rispondi citando
Vecchio 07 marzo 10, 16:42   #14 (permalink)  Top
User
 
L'avatar di frank
 
Data registr.: 29-11-2002
Residenza: Mountain View, CA
Messaggi: 4.390
Citazione:
Originalmente inviato da lol21 Visualizza messaggio
ma degli array come quell'esempio che ho fatto prima non potrebbe andare bene?
conta che questo è uni dei miei primi programmi ed è per questo che uso anche le librerie esterne, non mi pareva così complicato, programmi di gestione lcd led e pulsanti ne avevo già fatti, questo sarebbe più un'unione di più programmi già fatti.

dunque non sarebbe più facile fare una cosa del genere sapendo poi che dovrei probabilmente fare altre modifiche in futuro e se aggiungessi pulsanti mi basterebbe aggiungere un valore all'array?

ciao e grazie
lol21
Anche gli array statici occupano memoria. Se devi risparmiare all'ultimo byte, credo che niente batta l'uso di un ciclo già a partire da 4-5 paglioni.
__________________
The number you dialed is imaginary. Please rotate your phone 90 degrees and redial.
frank non è collegato   Rispondi citando
Vecchio 07 marzo 10, 17:50   #15 (permalink)  Top
User
 
L'avatar di lol21
 
Data registr.: 16-11-2008
Residenza: Riva del Garda - TN
Messaggi: 429
ok grazie dell'aiuto vi farò sapere
ma le variabili comunque non occupano RAM? io ho problemi di ROM

ciao
lol21
lol21 non è collegato   Rispondi citando
Vecchio 07 marzo 10, 17:53   #16 (permalink)  Top
User
 
L'avatar di frank
 
Data registr.: 29-11-2002
Residenza: Mountain View, CA
Messaggi: 4.390
Citazione:
Originalmente inviato da lol21 Visualizza messaggio
ok grazie dell'aiuto vi farò sapere
ma le variabili comunque non occupano RAM? io ho problemi di ROM

ciao
lol21
Se sono array statici non è detto, il compilatore potrebbe allocarle in ROM. Ma dovrebbe essere documentato nel manuale.
__________________
The number you dialed is imaginary. Please rotate your phone 90 degrees and redial.
frank non è collegato   Rispondi citando
Vecchio 08 marzo 10, 14:10   #17 (permalink)  Top
User
 
L'avatar di lol21
 
Data registr.: 16-11-2008
Residenza: Riva del Garda - TN
Messaggi: 429
oooooooooooooooooooooooooooooooooooooook, vaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaa bene

ora provo con il metodo degli array (si sono duro di testa ) poi magari riprovo coi cicli cercando anche altri esempi online perchè non ho mai fatto come hai detto tu

grazie a tutti intanto, vi farò sapere se funziona

ciao
lol21
lol21 non è collegato   Rispondi citando
Vecchio 08 marzo 10, 15:21   #18 (permalink)  Top
User
 
L'avatar di illez
 
Data registr.: 06-08-2007
Residenza: Empoli
Messaggi: 1.813
Ho guardato un po' il codice e devo dire che con un ciclo FOR non risolveresti: hai delle eccezioni da gestire che riguardano i casi 'somma', voglio dire i valori 3,5,6,9 che non sono diretta potenza di 2.
Probabilmente hai già una buona riduzione del codice raccogliendo tutti i casi in una funzione che richiamerai da tutto il codice.
ad esempio

unsigned int function check_porta()
{
switch(PORTA) {
case 1: return 1;
case 2: return 2;
case 3: return 9;
etc etc
}
}

Nel codice scriveresti, per esempio:
arciereb[freb] = check_porta();

Attenzione che comunque hai un paio di eccezioni, come qui:
case 6:
arciereb[freb] = 0;
freb = freb-1;
break;
in questo caso devi comunque controllare porta==6 e decrementare freb

Non conoscendo bene il funzionamento, non credo che si possa fare sempre dentro la funzione. Ma insomma, vedi tu...
__________________
.......
illez non è collegato   Rispondi citando
Vecchio 08 marzo 10, 15:27   #19 (permalink)  Top
User
 
L'avatar di lol21
 
Data registr.: 16-11-2008
Residenza: Riva del Garda - TN
Messaggi: 429
per il case 6 infatti mettevo un if
il fatto che non siano potenze di 2 in realtà è perchè per alquni tasti uso un solo bit acceso per altri anche 2
ad esempio
case 1 (0b00000001)
case 2 (0b00000010)
case 4 (0b00000100)
...
case 3 (0b00000011) da quì non sono più potenze di 2

uso questo modo per non usare pin eccessivi.

grazie dell'aiuto, appena ho un po di tempo butto giù il codice completo

ciao
lol21
lol21 non è collegato   Rispondi citando
Vecchio 08 marzo 10, 15:28   #20 (permalink)  Top
User
 
L'avatar di frank
 
Data registr.: 29-11-2002
Residenza: Mountain View, CA
Messaggi: 4.390
Citazione:
Originalmente inviato da lol21 Visualizza messaggio
magari riprovo coi cicli cercando anche altri esempi online perchè non ho mai fatto come hai detto tu
Guarda qui:

Codice:
// MAXPAGLIONI e' il numero massimo di paglioni
int mask, i;
if (PORTA) 
        for (mask=1, i=1; mask < (1 << MAXPAGLIONI); mask = mask << 1, i++) 
	        if (PORTA & mask) break;
// al termine del ciclo, i contiene il numero del paglione colpito
Questo funziona se, come nel tuo codice, può essere colpito un solo paglione per volta. Se è possibile che vengano colpiti più bersagli insieme, bisogna modificare le cose.
__________________
The number you dialed is imaginary. Please rotate your phone 90 degrees and redial.
frank non è collegato   Rispondi citando
Rispondi

Bookmarks




Regole di scrittura
Non puoi creare nuove discussioni
Non puoi rispondere alle discussioni
Non puoi inserire allegati
Non puoi modificare i tuoi messaggi

BB code è Attivato
Le faccine sono Attivato
Il codice [IMG] è Attivato
Il codice HTML è Disattivato
Trackbacks è Disattivato
Pingbacks è Disattivato
Refbacks è Disattivato


Discussioni simili
Discussione Autore discussione Forum Commenti Ultimo Commento
alimentatore insufficiente??? molale81 Batterie e Caricabatterie 2 10 aprile 09 00:35



Tutti gli orari sono GMT +2. Adesso sono le 14:37.


Basato su: vBulletin versione 3.8.11
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
E' vietata la riproduzione, anche solo in parte, di contenuti e grafica. Copyright 1998/2019 - K-Bits P.I. 09395831002